Lambda에서 NestJS는 서버가 아니라 handler로 동작한다

API Gateway 이벤트가 들어오면 handler가 Nest 앱을 만들거나 재사용하고, 오래 살아야 하는 상태는 외부 서비스에 둔다.

Event input

HTTP가 Lambda 이벤트가 된다

path, method, headers, body가 controller 앞의 입력이 된다.

요청 진입점
Cached bootstrap

Nest 앱은 가능한 한 재사용한다

첫 요청은 초기화하고, 웜 요청은 캐시된 server를 쓴다.

콜드 스타트 관리
External state

상태는 함수 밖에 둔다

세션, 파일, 큐, 캐시는 RDS, Redis, S3, SQS로 분리한다.

함수 수명과 분리
판정 맞는 경우 위험 신호 보완책
Use Lambda짧은 HTTP 이벤트 요청 단위 작업, 낮은 유휴 비용 초기화 지연이 SLA를 넘음 번들 축소, 메모리 조정, 프리워밍
Move state out상태 분리 세션, 업로드, 큐가 필요함 /tmp나 메모리에 의존 관리형 DB, Redis, S3, SQS
Use container상시 연결 WebSocket, 긴 작업, 워커 프로세스 실행 시간과 연결 수명 초과 Fargate, Cloud Run, ECS

진입점Express 서버를 listen하지 않고 Lambda handler가 어댑터를 호출한다.

초기화bootstrap 결과를 module scope에 캐시해 웜 요청 비용을 줄인다.

상태함수 내부 값은 캐시 수준으로만 보고 영속 기준은 외부에 둔다.