@Module providers

Nest 컨테이너 그래프

`@Injectable()`과 `providers` 배열은 단순 등록이 아니라 어떤 토큰을 어떤 구현으로 만들지 전달하는 설계도입니다.

모듈이 컨테이너에 건네는 단서

UserService

`@Injectable()`이 붙은 클래스는 provider 토큰으로 등록됩니다.

UserController

생성자 타입 정보로 `UserService`가 필요하다는 요구를 남깁니다.

AppModule

controllers와 providers 목록을 묶어 탐색 가능한 범위를 정합니다.

요청 시 컨테이너가 해결하는 관계

1

토큰 조회

컨트롤러 생성자가 요구한 타입을 provider 저장소에서 찾습니다.

2

재귀 해결

서비스가 다른 provider를 필요로 하면 그 의존성까지 먼저 만듭니다.

3

인스턴스 주입

기본 singleton provider는 한 번 만든 인스턴스를 재사용합니다.

new 제거

생성 책임 이동

컨트롤러는 구현을 직접 만들지 않고 필요한 계약만 생성자로 드러냅니다.

범위

수명 주기 관리

singleton, 요청 범위 같은 정책은 컨테이너가 인스턴스 보관 방식을 바꾸는 지점입니다.

override

테스트 교체

같은 토큰에 mock provider를 연결하면 컨트롤러 코드는 그대로 둡니다.