개발자가 서버를 관리(서버 스케일링, 애플리케이션 구성 요소의 프로비저닝)할 필요 없이 application을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다.
즉 클라우드 컴퓨팅 기법과 기술을 기반으로 애플리케이션을 구축, 실행, 개선을 클라우드 제공업체에 맡긴다.
서버리스 모델에도 서버가 존재한다. 하지만 일반 애플리케이션 개발에서와는 달리, 추상화 되어 있다.
클라우드 제공업체가 server infrastructure에 대한 provisioning, maintaining, scaling 등의 일상적인 작업을 처리한다. -> 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다.
서버리스 애플리케이션
배포되고 나면 필요에 따라 자동으로 스케일 업 또는 스케일 다운된다.
public cloud providers 의 serverless offering 은 일반적으로 event-driven execution model을 통해서 metered on-demand 되는데, 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않는다.
=> 이벤트가 발생하지 않으면, (사용) 가격이 측정되지 않는다.
서버리스 아키텍처
서버리스는 클라우드 제공업체가 cloud infrastructure와 application scaling을 모두 maintaining 하기 때문에 다른 클라우드 컴퓨팅 모델과 차이를 보인다. 서버리스 애플리케이션은 호출 시 on-demand로 자동 시작되는 컨테이너에 배포된다.
표준 IaaS(Infrastructure as a Service) 클라우드 컴퓨팅 모델에서, 사용자는 용량 단위를 사전 구매하게 된다.
즉 애플리케이션을 구동하기 위해 퍼블릭 클라우드 공급업체에 상시 가동 중인 서버 구성 요소(Server Components)에 대한 비용을 지불해야 한다.
사용량에 따른 sacling에 대한 것 역시 사용자 책임이다.
애플리케이션을 구동하기 위해 필요한 클라우드 인프라는 사용되지 않을 때에도 활성화된 상태이다.
그에 반해 서버리스 아키텍처에서는 애플리케이션이 필요할 경우에만 시작된다.
이벤트 구동을 위한 앱 코드를 트리거하면 클라우드 공급업체는 해당 코드에 대한 리소스를 할당한다.
코드 실행이 종료되어도 비용은 청구되지 않는다.
비용, 효율성 등의 이점 외에도 애플리케이션 스케일링 및 서버 프로비저닝과 같은 일상적이고 사소한 태스크에서 개발자를 해방시켜준다.
서버리스를 잘 활용하면, O/S, file System, security patches, load balancing, capacity management, scaling, logging, and monitoring 을 모두 클라우드 서비스 제공업체에 이관할 수 있다.
Serverless Computing service
일반적으로 BaaS(Backend as a Service)와 Faas(Function as a Service)라는 두 그룹으로 나뉜다
BaaS
BaaS는 개발자가 다양한 제3사 서비스와 애플리케이션에 액세스 할 수 있게 해주는데 일반적으로 API를 통해 호출된다.
FaaS
개발자가 서버리스를 언급하는 경우는 FaaS 모델을 가리키는 경우가 더욱 일반적이다.
FaaS의 경우 개발자는 사용자 정의 서버 측 로직을 작성할 수 있지만, 이러한 로직은 클라우드 제공업체가 전체를 관리하는 컨테이너에서 구동된다.
=> ex) AWS Lambda, Azure Functions, GC multiple Offerings, IBM Colud Functions
FaaS 란?
FaaS는 event-driven execution model로, 개발자가 작성하는 로직이 플랫폼에서 전체를 관리하는 컨테이너로 배포된 후 on-demand로 실행된다.
개발자는 API를 통해 서버리스 애플리케이션을 호출할 수 있고, FaaS 제공 업체는 이를 API gateway를 통해 처리한다.
서버리스 컴퓨팅 장단점
장점
서버 프로비저닝 및 관리 같은 일상 업무의 부담을 줄이기 때문에, 개발자가 애플리케이션에 더 많은 시간을 할애할 수 있다.