Providers란?
프로바이더는 Nest의 기본 개념이다. 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 프로바이더로 취급될 수 있다. 프로바이더의 주요 아이디어는 종속성으로 주입할 수 있다는 것. 즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 연결하는 기능은 대부분 Nest 런타임 시스템에 위임 될 수 있다. provider는 단순히 @Injectable() 데코레이터가 달린 클래스이다.
@Injectable 데코레이터를 사용하여 Nest IoC 컨테이너에서 관리할 수 있는 클래스임을 선언하는 메타데이터를 첨부할 수 있다.
서비스
서비스는 컨트롤러에서 사용됩니다. 데이터 저장과 출력을 담당하고, 이후 예시인 CatsController에서 사용 될 것이다
// cats.service.ts
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;
}
}
cats.servive.ts에는 하나의 프로퍼티와 두 개의 메소드를 갖는 CatsService 클래스를 가지고 있다.
그 위에 @injectable() 데코레이터를 추가함으로써 모든 Nest 컴포넌트에 주입할 수 있는 프로바이더가 되는 것 이다. 즉 위에 말한 것과 같이 Nest IoC 컨테이너에 의해 관리될 수 있는 클래스임을 선언하고, Cat과 같은 인터페이스에서 이를 사용할 수 있다.
// interfaces/cat.interface.ts
export interface Cat {
name: string;
age: number;
breed: string;
}
프로바이더 등록
위에서 생성한 서비스 프로바이더를 컨트롤러에서 사용하기 위해선, 모듈에 등록을 해주어야 한다.
@Module({
...
providers: [CatService]
}
export class CatsModule {}
컨트롤러에서의 사용
// cats.controller.ts
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();
}
}
생성자에 CatService 클래스를 삽입하고 CatService를 선언과 동시에 실행 할 수 있다.
'Nest.js' 카테고리의 다른 글
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 2 (0) | 2023.01.26 |
---|---|
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 1 (1) | 2023.01.26 |
[Nest.js] jest를 이용한 테스트 코드 작성 (0) | 2023.01.13 |
[Nest.js] DTO, 모듈화, ValidationPipe 실습 (0) | 2023.01.12 |
[Nest.js] Nest.js CRUD 실습 (REST API) (0) | 2023.01.11 |