NestJS는 기존에 사용해왔던 Express와 다르게 어떻게 의존성 주입을 할까?
전체적인 과정
1. 서비스 생성하기
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
findAll(): string[] {
return ['cat1', 'cat2'];
}
}
2. Module에 Provider 추가하기
import { Module } from '@nestjs/common';
import { CatsService } from './cats.service';
@Module({
providers: [CatsService],
})
export class CatsModule {}
3. Service를 Controller에 주입하기
import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Get()
findAll(): string[] {
return this.catsService.findAll();
}
}
// 위에 코드와 같다.
export class CatsController {
private catsService: CatsService;
constructor(catsService: CatsService) {
this.catsService = catsService;
}
}
이 방식으로, CatsController는 생성될 때 CatsService의 인스턴스를 생성자를 통해 주입받게 된다.
주요 구성 요소
프로바이더 (Providers)
- 서비스, 리포지토리, 설정, 데이터베이스 연결 등과 같은 애플리케이션에서 사용되는 값을, 클래스 또는 함수의 형태로 제공하는 것을 의미한다.
- 클래스 프로바이더는 @Injectable() 데코레이터와 함께 사용되며, 다른 클래스의 생성자에 주입될 수 있다.
- 사용자 정의 토큰을 사용해 값이나 팩토리 기반의 의존성도 주입 가능하다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
findAll(): string[] {
return ['cat1', 'cat2'];
}
}
모듈 (Modules)
- @Module() 데코레이터를 사용하여 모듈을 정의하고, 해당 모듈 내에서 사용할 프로바이더를 providers 배열에 등록한다.
import { Module } from '@nestjs/common';
import { CatsService } from './cats.service';
@Module({
providers: [CatsService], // <- 여기
})
export class CatsModule {}
데코레이터 (Decorators)
- @Injectable(): 클래스를 주입 가능하게 만드는 데코레이터이다.
- @Inject(): 특정 의존성을 주입하도록 지시하는 데코레이터로, 주로 사용자 정의 토큰이나 특정 의존성에 사용된다.
컨테이너 (Container):
- 내부적으로 의존성 주입 컨테이너를 사용하여 프로바이더와 모듈 간의 의존성을 관리한다
- 프로바이더 클래스를 인스턴스화하고, 필요한 의존성을 주입하며, 애플리케이션의 부분을 모듈화하고, 의존성을 해결하는데 사용 된다.
정리하면 NestJS에서 의존성 주입은 데코레이터로 프로바이더를 만들고 이것을 모듈에서 설정하여 사용하며, 컨테이너가 관리한다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.10.02 NestJS에서 모듈(Module) (0) | 2023.10.04 |
---|---|
23.10.01 데코레이터( @, Decorator) (0) | 2023.10.03 |
23.09.29 제어 역전 (Inversion of Control, IoC) (0) | 2023.10.02 |
23.09.28 의존성 주입이 있을 때 없을 때 (0) | 2023.09.29 |
23.09.27 모듈화(Modularization) (0) | 2023.09.27 |