반응형

이 글의 동영상 강의 입니다.

https://youtu.be/BQAR-0JCA7o

 

* 이 글은 아래 사이트를 참조하여 작성하였습니다.

https://docs.nestjs.kr/providers

 

Providers

  • provider는 services, repositories, factories, helpers 등이 있습니다. 
  • provider는 종속성에 의해 Inject(주입)할 수 있습니다.
  • 즉, provider 객체의 생성 및 연결은 nest runtime 시스템에 위임될 수 있습니다.
  • 컨트롤러는 HTTP 요청을 처리하고 복잡한 작업은 Provider에게 위임을 합니다.
  • provider는 module에서 선언하는 일반 javascript class 입니다.

 

Service

다음과 같이 CatsService를 만들어 보겠습니다.

CatsService는 지난 시간에 만든 CatsController에서 사용할 Service이며, 데이터의 조회, 저장, 수정, 삭제를 처리합니다.

서비스는 다음과 같이 generate script를 사용하여 만들 수 있습니다.

nest g service cats

 

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;
  }
}

@Injectable() 데코레이터는 이 class가 Nest IoC 컨테이너에서 관리하는 class 임을 선언하는 것입니다.

 

다음은 CatsService에서 사용한 Cat 인터페이스입니다.

cat.interface.ts

export interface Cat {
  name: string;
  age: number;
  breed: string;
}

이제 CatsController를 다음과 같이 바꿀 수 있습니다.

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();
  }
}

CatsService는constructor를 통해 주입됩니다. private을 사용하면 선언과 초기화가 동시에 이루어 집니다.

 

이상으로 provider의 개념과 service를 만들어보았습니다.

반응형

+ Recent posts