NEST REQUEST LIFECYCLE

NestJS 모듈 수명 주기

Controller, Service, Module을 나열하는 것보다 요청이 Guard, Pipe, Interceptor, Controller, Provider를 지나며 DI scope와 export/import 경계를 통과하는지 봐야 한다.

01

Route match

HTTP method와 path가 Controller handler에 매핑된다.

@Get/@Post
02

Guard/Pipe

권한을 검사하고 DTO validation/transform으로 입력을 정리한다.

before handler
03

Service 호출

Controller는 DI로 받은 Service에 비즈니스 로직을 위임한다.

provider
04

Interceptor/Filter

응답 래핑, 로깅, 예외 변환이 요청 전후에 적용된다.

cross-cutting
provider missing
모듈 providers에 등록되지 않음 생성자 주입 token을 찾지 못해 런타임 DI 오류가 난다.
UnknownDependencies
export missing
다른 모듈에서 provider 사용 불가 providers에만 있고 exports에 없으면 import한 모듈 밖으로 공개되지 않는다.
모듈 경계
요청 범위
요청별 상태를 singleton에 저장 사용자별 데이터는 request-scoped provider나 명시 인자로 전달한다.
state leak
DTO bypass
검증 전 raw body 사용 ValidationPipe와 whitelist/transform 옵션을 전역 또는 route에 적용한다.
입력 계약

구조 점검

모듈 방향 feature module이 infra module을 import하되 순환 import가 생기지 않아야 한다.
핸들러 얇기 Controller가 DB 접근을 직접 하지 않고 Service로 넘기는지 본다.
예외 표준화 도메인 오류가 HTTP status와 response body로 일관되게 변환되어야 한다.