NestJS · Horizontal Scale

수평 확장에서 로컬 상태 제거하기

NestJS 인스턴스를 늘리는 것보다 먼저 확인할 것은 세션, 파일, 캐시, WebSocket room, DB 연결이 단일 프로세스에 묶여 있지 않은지다.

01

상태 목록화

메모리 세션, local file, in-memory cache, socket room 같은 로컬 상태를 찾는다.

02

외부화

공유가 필요한 상태는 Redis, object storage, database, broker로 옮긴다.

03

트래픽 분산

로드 밸런서가 ready 상태인 인스턴스에만 요청을 보낸다.

04

한도 조정

replica 증가와 함께 DB pool, Redis connection, external API rate limit을 재계산한다.

Health
트래픽 받을 준비 프로세스 생존과 DB 준비 상태를 분리
readiness/liveness 구분
Sticky
같은 인스턴스 고정 로컬 세션이나 WebSocket 때문에 필요할 수 있음
장애 복구와 확장성 저하
Shared cache
일관된 캐시 Redis로 여러 인스턴스가 같은 캐시를 사용
무효화 이벤트 필요
Connection pool
DB 보호 replica 수 곱하기 pool size가 DB 한도를 넘지 않게 조정
pooler 검토

로컬 파일 · 세션 · DB 한도 점검

로컬 파일 업로드가 컨테이너 내부 디스크에만 남지 않는다.
세션 인스턴스가 바뀌어도 인증 상태가 유지된다.
DB 한도 최대 replica에서 connection 수가 안전하다.
실시간 여러 인스턴스에서 WebSocket broadcast가 누락되지 않는다.