IoC container

NestJS는 객체 생성 권한을 컨테이너로 옮겨 결합도를 낮춘다

컨트롤러는 new UserService()를 호출하지 않고 생성자 타입만 선언하며, 컨테이너가 프로바이더 등록 정보로 의존성 그래프와 인스턴스 수명주기를 관리한다.

등록

@Injectable()providers

주입 가능한 클래스가 모듈의 providers 배열에 들어가면 컨테이너가 토큰과 구현체를 기억한다.

프로바이더 관리
해결

생성자 타입으로 조회

UserController의 생성자 매개변수를 보고 필요한 UserService와 그 하위 의존성까지 재귀적으로 찾는다.

의존성 해결
수명

기본은 싱글톤 공유

대부분의 프로바이더는 애플리케이션 전체에서 하나의 인스턴스를 공유하고, 필요하면 요청 스코프를 선택한다.

수명 주기 관리
테스트

대역 객체로 교체

단위 테스트에서는 실제 DB 연결이 있는 서비스를 대신해 mock 프로바이더를 넣어 컨트롤러 로직만 검증한다.

테스트 용이성