공급자는 Nest의 개본 개념입니다. 많은 기본 Nest클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 공급자로 취급될 수 있습니다. 공급자는 종속성으로 주입 할 수 있습니다. 즉, 개체는 서로 다양한 관계를 만들 수 있으며 개체 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임할 수 있습니다.
컨트롤러는 HTTP 요청을 처리하고, 복잡한 서비스 로직은 Provider에게 위임해야 합니다.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
위의 코드에서 providers에 AppService가 providers로 등록되어있는 것을 볼 수 있습니다. 만약 providers에 AppService를 지운다면?
@Controller('cats')
export class AppController {
constructor(private readonly appService: AppService) {}
@Get('hello')
getHello(): string {
return this.appService.getHello();
}
}
생성자로 appService를 넣어주고 있지만 Nest는 providers에 AppService가 등록되어 있지 않기 때문에 찾을 수 없게 되고, 에러가 발생하게 됩니다.
스프링의 Bean으로 생각하면 될 것 같습니다. 의존성 주입(DI)입니다.
해당 게시글은 "NestJS 공식 홈페이지"와
인프런 강의 "탄탄한 백엔드 NestJS, 기초부터 심화까지(윤상석)"을 참고하여 만들었습니다.