AWS Lambda를 사용하면서 한번도 제대로 서버리스에 대해서 알아보지 않은거 같아서 장점과 단점, 특징, 동작 방식을 확실히 알고 싶어서 알아보게 되었다.
코드 실행, 데이터 관리 및 애플리케이션 통합을 위한 기술을 서버를 관리할 필요 없이 제공합니다. 서버리스 기술은 자동 크기 조정, 기본 제공 고가용성 및 종량제 결제 모델을 제공하여 민첩성을 개선하고 비용을 최적화합니다.
위의 내용은 아마존에서 서버리스에 대하여 설명한 내용이다. 즉 서버리스란 본인이 서버를 직접 구축하고 관리하지 않고 사용한 만큼 비용을 내면 되는 것이다. Serverless 라고해서 말 그대로 서버가 없다는 것은 아니다.
일단 서버리스는 일반적으로 Baas (Backend-as-a-Service) 와 Faas (Funtion-as-a-Service) 로 구분된다.
서비스형 백엔드(BaaS)는 개발자가 웹 또는 모바일 애플리케이션의 모든 백그라운드 측면을 아웃소싱하여 프런트 엔드만 작성하고 유지 관리하면 되는 클라우드 서비스 모델이다.
Baas는 주로 모바일 앱, 웹앱 등에 사용되는데 Baas로 앱을 만드는 개발자가 서버 기술을 알지 못해도 앱에 필요한 기능 ( DB, 푸쉬 알림, 인증, SNS, 위치 서비스 )를 API로 제공해 사용한만큼만 비용을 지불하여 쉽고 빠르게 구현할수 있게해준다. 또한 이용자 확장 또한 자동으로 해준다.
대표적으로 구글의 Firebase, AWS Amplify 등이 있다.
서비스형 함수(FaaS)는 고객들이 앱 개발 및 런칭에 관련한 하부 구조의 복잡한 빌드, 유지보수 없이 애플리케이션 기능을 개발, 실행, 관리할 수 있도록 플랫폼을 제공하는 클라우드 컴퓨팅 서비스의 한 분류이다.
서비스형 함수는 클라우드에 코드를 함수 단위로 저장해서 필요할때마다 꺼내서 비용을 지불하는 방식이다. 함수를 저장하게 되면 함수는 대기상태에 들어가는데 이때 자고있는 함수를 요청하게 되면 함수는 일어나서 요청을 처리하고 다시 대기상태로 돌아가는 방식이다.
대표적으로 AWS Lambda, Google Cloud Functions, Cloudflare Workers 등이 있다.
알아보니까 서버리스는 긴 시간을 요구하는 작업에는 부적합 하다. 서버리스는 제한된 요청시간이 있기 때문에 동영상 없로드 같은 작업에는 불리 하다고 볼 수 있다.
왠지 Lambda로 동영상 업로드 할때 잘 안되었던 기억이 있다.
서버리스는 AWS Lambda와 API gateway 만 사용했었는데 이번 기회로 Baas와 Faas에 대하여 알게 되었고 둘의 차이점, 장단점에 대하여 알게되었다. 소규모 프로젝트에서는 둘다 적합하지만 Baas 를 사용할 것 같다. 클라이언트에서 바로 사용할 수 있고 무엇보다 콜드 스타트때문이다.
하지만 개인적으로 Faas는 콜드 스타트를 제외하면 Baas보다 낫다고 생각하기 때문에 콜드 스타트가 중요하지 않거나 규모가 상대적으로 큰 프로젝트에서 서버리스로 웹, 앱을 만들게 된다면 함수가 완전히 잠들기 직전인 5분마다 한번씩 Lambda에 요청을 보내는 방식을 사용하게 된다면 콜드 스타트는 해결 된다고 생각한다.