Lambda에서는 NestJS를 요청마다 새 서버로 띄우지 않는다

API Gateway 이벤트를 handler가 받고, 첫 요청에서 만든 Nest 어댑터는 가능한 한 재사용한다. 오래 남아야 하는 상태는 함수 밖에 둔다.

1. API Gateway

HTTP를 이벤트로 변환

경로, 메서드, 헤더, 본문이 Lambda 입력이 된다.

2. handler

웜업과 실제 요청 구분

프리워밍 신호는 바로 끝내고, 실제 요청만 앱으로 넘긴다.

3. cached server

Nest 어댑터 재사용

module scope에 저장한 Express 어댑터를 다음 요청에 쓴다.

4. external state

상태는 밖으로 분리

세션, 파일, 큐, 캐시는 RDS, Redis, S3, SQS로 보낸다.

Lambda가 맞는 경우

짧은 HTTP 이벤트와 들쭉날쭉한 트래픽이 중심일 때.

컨테이너가 맞는 경우

긴 연결, 긴 작업, 상시 프로세스가 필요할 때.

공통 전제

비밀값, 파일, 세션은 코드와 함수 메모리에 두지 않는다.

핵심: 서버리스 NestJS의 성패는 서버를 많이 만드는 것이 아니라, 초기화 비용을 줄이고 상태 책임을 함수 밖으로 옮기는 데 있다.