NestJS는 의존성 주입(DI) 을 사용하여,컴포넌트 간의 결합도를 낮춥니다. DI는 컴포넌트가 필요한 서비스를 직접 생성하지 않고, 컨테이너에서 서비스를 주입받는 방식입니다. 이로 인해 컴포넌트는 특정 서비스에 종속되지 않고, 다양한 서비스와 함께 사용할 수 있습니다.
NestJS에서 DI를 사용하려면 컴포넌트의 생성자에 @Inject()
데코레이터를 사용합니다.
@Inject()
데코레이터는 컴포넌트가 필요한 서비스의 타입을 지정합니다. 컨테이너는 @Inject()
데코레이터에서 지정된 타입의 서비스를 찾아 컴포넌트의 생성자에 주입합니다.
예를 들어 다음 코드는 UserRepository
서비스가 필요한 UserController
컴포넌트를 정의합니다.
@Controller()
export class UserController {
constructor(@Inject() private userRepository: UserRepository) {
}
...
}
컨테이너는 UserRepository
서비스가 필요한 UserController
컴포넌트를 생성할 때 UserRepository 서비스를 찾아 UserController
컴포넌트의 생성자에 주입합니다.
NestJS에서 DI를 사용하면 다음과 같은 이점을 얻을 수 있습니다.
컴포넌트 간의 결합도를 낮춥니다.
컴포넌트를 다양한 서비스와 함께 사용할 수 있습니다.
컴포넌트를 테스트하기 쉽게 만듭니다.
NestJS의 DI는 컴포넌트의 모듈성과 재사용성을 높이는 데 도움이 됩니다.