1. 프로바이더(Provider)
NestJS에 프로바이더는 애플리케이션의 의존성 주입 시스템의 핵심 구성요소로, 프로바이더는 서비스, 레포지토리, 팩토리 등과 같은 객체를 생성하고 관리하는 데 사용합니다. 일반적으로 비즈니스 로직을 포함하고, 다른 클래스에서 사용할 수 있도록 주입됩니다.
# 서비스 생성
nest generate service cats
생성된 서비스 코드는 다음과 같습니다.
import { Injectable } from "@nestjs/common";
@Injectable()
export class CatsService {
private cats = [];
create(cat) {
this.cats.push(cat);
}
findAll() {
return this.cats;
}
findOne(id: number) {
return this.cats[id];
}
}
- @Injectable(): 데코레이터는 이 클래스가 다른 클래스에 주입될 수 있음을 나타냄
2. 프로바이더 사용
프로바이더는 모듈에서 등록되어야 하며, 이를 통해서 다른 클래스에서 사용할 수 있습니다. prviders 배열에 CatsService를 추가하여 이 서비스를 모듈의 프로바이더로 등록합니다.
/* eslint-disable prettier/prettier */
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';
@Module({
imports: [],
controllers: [AppController, CatsController],
providers: [AppService, CatsService],
})
export class AppModule {}
3. 의존성 주입
컨트롤러나 다른 프로바이더에서 생성한 프로바이더를 주입할 수 있습니다.
import { Controller, Get, Body, Post, Param } from "@nestjs/common";
import { CatsService } from "./cats.service";
@Controller("cats")
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
create(@Body() cat) {
this.catsService.create(cat);
}
@Get()
findAll() {
return this.catsService.findAll();
}
@Get(":id") // 경로 매개변수 사용
findOne(@Param("id") id: number) {
return this.catsService.findOne(id);
}
}
4. 모듈 설정
서비스 컨트롤러를 포함하는 모듈을 설정합니다.
// cats/cats.module.ts
import { Module } from "@nestjs/common";
import { CatsService } from "./cats.service";
import { CatsController } from "./cats.controller";
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
애플리케이션을 실행하고 Postman이나 curl을 사용해 API를 테스트할 수 있습니다.
- 고양이 생성:
- POST: /cats
- Body: { "name": "Tommy" }
- 고양이 조회:
- GET: /cats/id
- 고양이 삭제
- cats 서비스에 고양이 삭제 메서드 추가
- DELETE 요청: http://localhost:3000/cats/0 (0번 인덱스의 고양이를 삭제)
import { Injectable } from "@nestjs/common";
@Injectable()
export class CatsService {
private cats = [];
create(cat) {
this.cats.push(cat);
}
findAll() {
return this.cats;
}
findOne(id: number) {
return this.cats[id];
}
delete(id: number): boolean {
if (id < 0 || id >= this.cats.length) {
return false; // 유효하지 않은 인덱스의 경우
}
this.cats.splice(id, 1); // 해당 인덱스의 고양이 삭제
return true; // 삭제 성공
}
}
- 컨트롤러에 삭제 메서드 추가
import { Controller, Get, Body, Post, Param, Delete } from "@nestjs/common";
import { CatsService } from "./cats.service";
@Controller("cats")
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
create(@Body() cat) {
this.catsService.create(cat);
return { message: "Cat created" };
}
@Get()
findAll() {
return this.catsService.findAll();
}
// 고양이 등록 조회
@Get(":id") // 경로 매개변수 사용
findOne(@Param("id") id: number) {
return this.catsService.findOne(id);
}
// 고양이 삭제
@Delete(":id")
delete(@Param("id") id: number) {
const result = this.catsService.delete(id);
if (result) {
return { message: "Cat deleted successfully" };
} else {
return { message: "Cat not found" };
}
}
}
GitHub - Koras02/nestjs-tutorial-blog
Contribute to Koras02/nestjs-tutorial-blog development by creating an account on GitHub.
github.com
LIST
'Back-End > NestJS' 카테고리의 다른 글
[NestJS] 2장 컨트롤러 (0) | 2025.03.07 |
---|---|
[NestJS] 1장 NestJs의 탄생 Nestjs는 무엇인가? (0) | 2025.02.11 |