그저 내가 되었고

☁️Cloud Native / Serverless 본문

개발/Cloud Computing

☁️Cloud Native / Serverless

hyuunii 2023. 3. 28. 13:59

Cloud Native

클라우드 네이티브 애플리케이션 개발은 잘 알려져 있는 클라우드 컴퓨팅 기법과 기술을 기반으로 애플리케이션을 구축, 실행, 개선하는 방법입니다. 

 

클라우드 네이티브 애플리케이션"의 "클라우드"란 무엇일까요?

 

"클라우드 네이티브" 애플리케이션은 프라이빗, 퍼블릭 및 하이브리드 클라우드 환경 전체에 지속적인 개발과 자동화된 관리 환경을 제공하기 위해 특별히 설계된 애플리케이션을 뜻합니다. 기업은 클라우드 컴퓨팅을 채택하여 애플리케이션의 확장성과 가용성을 향상시킬 수 있습니다. 이러한 이점은 리소스의 셀프 서비스 및 온디맨드 프로비저닝은 물론 개발부터 프로덕션에 이르는 애플리케이션 라이프사이클을 자동화하여 실현할 수 있습니다.

 

그러나 이러한 이점을 모두 활용하기 위해서는 새로운 형태의 애플리케이션 개발이 필요합니다.

 

"클라우드 네이티브 개발"이 바로 그에 해당합니다. 애플리케이션을 신속하게 구축하고 업데이트하면서 품질을 개선하고 위험을 낮추는 접근 방식입니다. 구체적으로 말하자면, 이 접근 방식을 활용하여 대응 능력, 확장성, 내결함성을 갖춘 애플리케이션을 퍼블릭, 프라이빗 또는 하이브리드 클라우드 환경이든 어디에나 구축할 수 있습니다.


Serverless

: 클라우드 컴퓨팅의 모델 중 하나로 사용자가 서버를 직접 관리할 필요가 없는 모델을 의미.

동적으로 서버의 자원을 할당합니다. 즉, 사용자가 없다면 자원을 할당하지 않고 대기하다 요청이 들어오면 그 때 자원을 할당해서 요청을 처리하고 다시 대기 상태로 들어갑니다.

e.g.) AWS의 AWS Lambda, Azure의 Azure Functions, Google의 Cloud Functions 등

 

 

서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다.

 

서버리스 모델에도 서버가 존재하긴 하지만, 애플리케이션 개발에서와 달리 추상화되어 있습니다. 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리하며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 됩니다.

 

서버리스 애플리케이션은 배포되고 나면 필요에 따라 자동으로 스케일 업되거나 스케일 다운됩니다. 퍼블릭 클라우드 제공업체의 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드로 미터링됩니다. 그러므로 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않습니다.

 

서버리스는 클라우드 제공업체가 클라우드 인프라와 애플리케이션의 스케일링을 모두 관리한다는 점에서 다른 클라우드 컴퓨팅 모델과 차이를 보입니다. 서버리스 애플리케이션은 호출 시 온디맨드로 자동 시작되는 컨테이너에 배포됩니다.

 

표준 서비스로서의 인프라(Infrastructure-as-a-Service, IaaS) 클라우드 컴퓨팅 모델에서 사용자는 용량 단위를 사전 구매하게 됩니다. 즉, 애플리케이션을 구동하기 위해 퍼블릭 클라우드 공급업체에 상시 가동 중인 서버 구성 요소에 대한 비용을 지불해야 합니다. 수요가 많을 때 서버 용량을 스케일 업하고 더 이상 그만큼의 용량이 필요하지 않을 때 스케일 다운하는 것 역시 사용자의 책임입니다. 애플리케이션을 구동하기 위해 필요한 클라우드 인프라는 애플리케이션이 사용되지 않을 때에도 활성화된 상태입니다.

 

그에 반해 서버리스 아키텍처에서는 애플리케이션이 필요할 경우에만 시작됩니다. 이벤트가 구동을 위한 애플리케이션 코드를 트리거하면 퍼블릭 클라우드 공급업체가 신속하게 해당 코드에 대한 리소스를 할당합니다. 코드 실행이 종료되면 비용도 청구되지 않습니다. 비용과 효율성이라는 이점 이외에도, 서버리스는 애플리케이션 스케일링 및 서버 프로비저닝과 같은 일상적이고 사소한 태스크에서 개발자의 부담을 덜어줍니다.

 

서버리스를 활용하면 운영 체제 및 파일 시스템 관리, 보안 패치, 부하 분산, 용량 관리, 스케일링, 로깅, 모니터링과 같은 일상적인 태스크를 모두 클라우드 서비스 제공업체에 이관할 수 있습니다.

 

완전한 서버리스 애플리케이션은 물론, 일부는 서버리스로 일부는 전통적인 마이크로서비스 구성 요소로 이루어진 애플리케이션을 구축할 수도 있습니다.

 

 

 


서버리스 아키텍처(Serverless Architecture)의 구현 방식

서버리스 아키텍처의 대표적인 두 가지 구현 방식은 다음과 같다.

  • FaaS (Function as a Service) : AWS Lambda, Microsoft Azure Function, Google Cloud Functions ... 등
  • BaaS (Backend as a Service) : Firebase, Kinvey, Parse ... 등

두 가지 구현 방식으로 나뉘지만, 일반적으로 서버리스라고 하면 FaaS를 가리킨다.

 

 

 


FaaS(Function as a Service)

FaaS는 Function 즉, 함수를 서비스로 제공.

사용자가 작성한 코드(백엔드)를 서버리스 제공자의 서버에 업로드하면 해당 서버는 업로드한 코드를 함수 단위로 쪼개 대기상태로 둡니다.
그러다 요청이 들어오면 서버가 대기상태에 두었던 함수를 실행시켜 처리한 후 작업이 끝나면 다시 대기상태로 만드는 구조입니다.
비용은 함수 호출 횟수에 따라 청구됩니다.

쉽게 말해 업로드한 코드는 평소에 자고있고, 요청이 들어오면 서버가 코드를 깨워 요청을 처리한 후 다시 재웁니다.

 

 

FaaS의 특징

1. Stateless: FaaS 서비스는 함수가 실행되는 동안에만 관련된 자원을 할당하게 되며, 함수가 항상 같은 머신에서 실행된다는 보장이 없습니다. 따라서 함수 실행 시 로컬에서 어떤 상태(State)가 유지될 수 없습니다.

이를 해결하고 싶다면 메모리에 상태를 저장하지 않고 AWS의 경우 S3을 이용하거나 아예 DB를 사용해야 합니다.

 

2. Ephemeral: 위에서 말한 것과 같이 함수는 특정 이벤트가 발생했을 때만 컨테이너로서 배포되고, 실행이 끝난 후엔 자원이 회수되므로 일시적으로만 배포된다고 할 수 있습니다.

 


BaaS (Backend as a Service)

BaaS는 일반적으로 SPA, 안드로이드와 같은 클라이언트 중심으로 개발된 어플리케이션입니다.

클라이언트단에서 BaaS가 제공하는 인증, DB, 사용자 관리 등과 같은 백엔드 관련 외부 서비스를 사용해서 대부분의 비즈니스 로직을 처리합니다.

쉽게말해 SNS연동이나 DB와 같이 백엔드에 필요한 기능들을 사용자가 직접 구현할 필요 없이 제공하는 API로 해당 기능을 구현할 수 있게 해주는 것이죠.


클라우드 공급자가 백엔드 개발 환경까지 제공해준다고 보면 될 것 같습니다.

 

 

누가 BaaS를 사용해야 할까?

BaaS 플랫폼은 기술적인 서비스이고, 앱 개발자들을 위해 만들어졌습니다.
가장 흔하게 사용하는 상황은 다음과 같다.

 

- Backend 개발에 있어 한정된 지식을 가진 Frontend 개발자

- 빠른 개발을 원하는 Backend 개발자

 

 

어떤 유형의 프로젝트가 BaaS와 잘 어울릴까?

실시간 응용프로그램(채팅, 메시지 앱)

교통 앱

소셜-네트워크 유형 앱

전자상거래 앱

음악 또는 영상 스트리밍 앱

게임

 


서버리스를 추천하는 대상

서버리스는 사이드 프로젝트(토이 프로젝트)나 최대한 빠르게 시제품(초기 서비스)을 런칭하고 싶은 경우에 추천드립니다.

이런 경우 기존 클라우드 컴퓨팅 모델에 비해 돈과 시간을 모두 절약할 수 있으므로 서버리스가 좋은 선택이 될 수 있습니다.

 

 

 

 

 

출처::
클라우드 네이티브 애플리케이션의 이해 https://www.redhat.com/ko/topics/cloud-native-apps 
서버리스란? https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless 
서버리스(Serverless)의 개념 https://tibetsandfox.tistory.com/4
서버리스(Serverless)란? https://dev-coco.tistory.com/171