DI Container

의존성은 클래스가 만들지 않고 컨테이너가 조립한다

NestJS DI의 핵심은 객체 생성 권한을 클래스에서 프레임워크로 옮겨, 결합도와 테스트 부담을 낮추는 것입니다.

등록

주입 가능한 대상 표시

@Injectable()providers 배열로 컨테이너가 관리할 클래스를 알립니다.

해석

필요한 타입을 찾음

컨테이너가 생성자 타입을 읽고 필요한 provider와 하위 의존성을 재귀적으로 찾습니다.

교체

같은 토큰에 mock 연결

테스트에서는 같은 provider 토큰에 fake 객체를 연결해 컨트롤러만 검증할 수 있습니다.

컨테이너가 객체를 조립하는 순서

01Provider 선언서비스를 주입 가능한 클래스로 표시합니다.
02Module 등록providers 배열에 포함해 컨테이너 범위에 넣습니다.
03Graph 구성생성자 의존성을 따라 객체 관계를 정리합니다.
04Constructor 주입필요한 인스턴스를 만들어 클래스에 전달합니다.
직접 생성

new UserService()

생성 위치가 클래스 내부에 묶여 구현 교체와 단위 테스트가 어려워집니다.

DI 사용

constructor(service)

클래스는 필요한 타입만 선언하고, 생성 정책과 인스턴스 수명은 컨테이너가 관리합니다.