NestJS Module Graph

Module, DI, Guard, Pipe 연결 구조

NestJS는 모듈 그래프와 의존성 주입 컨테이너 위에 요청 파이프라인을 얹는 구조라 provider 공개 범위를 정확히 잡아야 합니다.

01

Module 선언

imports, providers, controllers, exports로 모듈의 경계를 정의합니다.

경계
02

Provider 등록

Service, Repository, Client 같은 주입 대상을 토큰과 함께 컨테이너에 올립니다.

DI
03

Export 선택

다른 모듈이 써야 하는 provider만 exports로 공개합니다.

Public API
04

처리 흐름 부착

Guard, Pipe, Interceptor를 전역, 컨트롤러, 핸들러 단위로 배치합니다.

범위
05

핸들러 실행

Controller가 정리된 입력을 받아 Service 호출로 요청을 처리합니다.

Route
Module
의존성 경계 기능 단위로 provider와 controller를 묶고 외부 공개 범위를 제한합니다.
순환 의존성 한계
Provider
실제 기능 구현 Service, Adapter, Repository처럼 주입 가능한 실행 단위를 담당합니다.
토큰 교체 가능
Interceptor
응답 전후 처리 로깅, 캐시, 응답 래핑, 타임아웃처럼 핸들러 주변 관심사를 처리합니다.
관심사 분리

모듈 설계 점검

공개 최소화 exports가 많아질수록 모듈 경계가 흐려지고 변경 영향이 커집니다.
순환 의존 forwardRef가 필요하다면 책임을 다시 나눌 신호일 수 있습니다.
스코프 비용 요청 범위d provider는 편하지만 요청마다 생성되어 비용이 커질 수 있습니다.