
공급자는 Nest의 핵심 개념입니다. 서비스, 저장소, 팩토리, 헬퍼와 같은 많은 기본 Nest 클래스는 공급자로 취급될 수 있습니다. 공급자의 핵심 아이디어는 종속성으로 주입 될 수 있어 객체가 서로 다양한 관계를 형성할 수 있다는 것입니다. 이러한 객체를 "연결"하는 책임은 주로 Nest 런타임 시스템에서 처리
nest g service cats
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
이제 고양이를 검색하는 서비스 클래스가 생겼으니, 이를 : 내부에서 사용해 보겠습니다
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
클래스 생성자를 통해 주입됩니다
Nest는 의존성 주입(Dependency Injection) 이라는 강력한 디자인 패턴을 기반으로 구축되었습니다 . 공식 Angular 문서 에서 이 개념에 대한 유용한 글을 읽어보시기를 강력히 추천합니다 .
Nest에서는 TypeScript의 기능 덕분에 종속성이 유형에 따라 해결되므로 관리가 간편합니다. 아래 예시에서 Nest는 catsService인스턴스를 생성하고 반환하여 종속성을 해결합니다 CatsService(싱글턴의 경우 이미 다른 곳에서 요청된 경우 기존 인스턴스를 반환합니다). 이 종속성은 컨트롤러의 생성자에 주입되거나 지정된 속성에 할당됩니다.
공급자는 일반적으로 애플리케이션 수명 주기와 일치하는 수명("범위")을 갖습니다. 애플리케이션이 부트스트랩될 때 각 종속성을 해결해야 하므로 모든 공급자가 인스턴스화됩니다. 마찬가지로 애플리케이션이 종료되면 모든 공급자가 삭제됩니다. 하지만 공급자를 요청 범위로 지정할 수도 있습니다. 즉, 공급자의 수명이 애플리케이션의 수명 주기가 아닌 특정 요청에 따라 결정됩니다. 이러한 기법에 대한 자세한 내용은 주입 범위 장 에서 확인할 수 있습니다.