AWS와 같은 클라우드 시스템에서 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델.
서버가 존재하긴 하지만, 추상화 되어서 클라우드 제공업체가 서버 인프라를 프로비저닝, 유지관리, 스케일링하며 개발자는 단순히 코드를 컨테이너에 패키징하기만 하면 됨.
배포되고 나면 자동으로 스케일 업되거나 스케일 다운된다. 온디맨드로 미터링되기 때문에, 서버리스 기능이 유휴 상태일 때는 아무 비용도 들지 않는다.
Vercel, AWS Lambda 등과 같은 곳에서 이러한 서비스를 제공하고 있다.
서버리스는 단순히 클라우드 제공을 의미하는 게 아니라, 동적으로 상황에 맞춰 함수를 쪼개 처리한다던가, DB를 생성한다던가 하는 것을 자동으로 해주는 것을 의미한다. 즉, 서버리스는 관리할 서버가 없는 것.
예를 들어, FaaS(Function-as-a-Service : AWS Lambda function) / BaaS(Backend-as-a-Service : Amplify, Firebase)와 같은 것들을 서버리스라 부른다.
** Vercel은?
Vercel은 기본적으로 IaaS(Infra-as-a-Service) 플랫폼이지만, Next.js의 API routes 기능과 Server-side rendering으로 페이지를 생성할 때는 독립적인 서버리스 함수로 만들어져 동작하기에 서버리스 기능을 제공한다고 할 수 있다.
(Next.js 앱을 빌드해보면, api와 페이지 생성이 server-side renders at runtime에서 이루어지는 것을 확인 가능.)
장점
- 효율적이고, 비용 절감 가능.
- 사업 측면에서 개발자 리소스도 절감할 수 있다.
단점
모니터링이 쉽지 않음.
콜드 스타트를 처리해야 함. 일정 간격으로 함수를 계속 실행해서 ‘따뜻하게’ 유지할 수도 있겠지만, 복잡한 아키텍처의 경우 상황이 복잡해짐.