서버리스(serverless):
개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다.
서버리스 모델에도 서버가 존재하긴 하지만, 애플리케이션 개발에서와 달리 추상화되어 있습니다.
서버리스 애플리케이션은 배포되고 나면 필요에 따라 자동으로 scale-up과 scale-down을 진행합니다.
정리하자면 서버리스란?
서버가 필요 없다는 뜻이 아닌, 서버를 관리하거나 신경 쓸 필요가 없다는 뜻입니다.
나노 수준의 함수로 구성되어 있습니다.
<출처>
: 서버리스(Serverless)란 무엇인가?
서버리스는 BaaS 보다는 FaaS에 더 가깝습니다.
BaaS (Backend as a Service)
FaaS (Function as a Service)
일반적으로 SPA, 안드로이드와 같은 클라이언트 중심으로 개발된 애플리케이션입니다.
BaaS가 제공하는 인증, DB, 사용자 관리 등과 같은 외부 서비스를 사용해서 대부분의 비즈니스 로직을 처리합니다.
무상태(Stateless) 함수가 서버 측 비즈니스 로직을 포함합니다.
Backend를 작은 함수로 쪼개서 사용자가 직접 관리하지 않는 서버로 올립니다.
함수들은 특정한 조건 또는 주기, 요청 등으로 trigger 되어서 서버가 알아서 실행되고 종료됩니다.
일정 주기, 조건 등에 함수를 호출하므로 리소스를 낭비하지 않게 되어서 비용이 저렴합니다.
인프라 구성, 운영, 보안 등에 신경쓰지 않고 비즈니스 로직에 집중할 수 있습니다.
auto-scaling이 적용됩니다.
패키징 및 배포가 간단합니다.
릴리즈 주기가 감소하여 생산성 또한 높아집니다.
trigger에 의해 서버를 실행 및 종료를 반복하기 때문에 실시간 서비스에는 적합하지 않습니다.
클라우드 서비스 업체에 종속됩니다.
실행 시간에 한계가 있습니다.
Stateless 형태로 로컬 데이터를 사용할 수 없습니다.
위의 단점들 때문에 디버깅이나 코드 테스팅에 불편함이 따릅니다.