2023-09-01
NestJS로 이직용 포트폴리오 만들어보기 - 1
NestJSTypeScriptNode.js포트폴리오
NestJS란?
NestJS는 Node.js를 위한 프레임워크로, Angular의 구조와 개념을 기반으로 만들어졌습니다. NestJS는 TypeScript를 사용하며, OOP(Object-Oriented Programming)와 FP(Functional Programming)의 모든 기능을 제공합니다.
NestJS의 구조
NestJS는 모듈, 컨트롤러, 서비스, 프로바이더, 미들웨어, 필터, 게이트웨이 등의 요소로 구성됩니다. 각 요소의 역할은 다음과 같습니다.
- 모듈: 애플리케이션의 기능을 구성하는 데 사용되며, 관련된 컨트롤러, 서비스 및 프로바이더의 그룹을 정의합니다.
- 컨트롤러: 요청을 처리하고 응답을 반환하는 역할을 합니다.
- 서비스: 데이터를 처리하고 컨트롤러에 데이터를 반환하는 역할을 합니다.
- 프로바이더: 의존성 주입을 지원하는 컨트롤러 또는 서비스를 위한 클래스입니다.
- 미들웨어: 요청과 응답 사이에 위치하여 요청을 처리하거나 응답을 수정하는 역할을 합니다.
- 필터: 예외 처리를 위한 역할을 합니다.
- 게이트웨이: 외부 요청과 애플리케이션의 요소 간에 위치하여 요청을 전달하거나 응답을 수정하는 역할을 합니다.
NestJS의 작동 방식
- 클라이언트로부터 요청이 들어옵니다.
- 요청이 라우터에 의해 적절한 컨트롤러로 전달됩니다.
- 컨트롤러는 서비스를 호출하여 요청에 필요한 데이터를 가져옵니다.
- 요청에 필요한 데이터를 모두 가져온 후, 컨트롤러는 데이터를 이용하여 응답을 반환합니다.
코드 예시
모듈 예시
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}컨트롤러 예시
import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
findAll(): string {
return this.catsService.findAll();
}
}서비스 예시
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: string[] = ['Tom', 'Kitty', 'Luna'];
findAll(): string[] {
return this.cats;
}
}미들웨어 예시
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: Function) {
console.log(`Request...`);
next();
}
}