2023-09-01

NestJS로 이직용 포트폴리오 만들어보기 - 1

NestJSTypeScriptNode.js포트폴리오

NestJS란?

NestJS는 Node.js를 위한 프레임워크로, Angular의 구조와 개념을 기반으로 만들어졌습니다. NestJS는 TypeScript를 사용하며, OOP(Object-Oriented Programming)와 FP(Functional Programming)의 모든 기능을 제공합니다.

NestJS의 구조

NestJS는 모듈, 컨트롤러, 서비스, 프로바이더, 미들웨어, 필터, 게이트웨이 등의 요소로 구성됩니다. 각 요소의 역할은 다음과 같습니다.

  • 모듈: 애플리케이션의 기능을 구성하는 데 사용되며, 관련된 컨트롤러, 서비스 및 프로바이더의 그룹을 정의합니다.
  • 컨트롤러: 요청을 처리하고 응답을 반환하는 역할을 합니다.
  • 서비스: 데이터를 처리하고 컨트롤러에 데이터를 반환하는 역할을 합니다.
  • 프로바이더: 의존성 주입을 지원하는 컨트롤러 또는 서비스를 위한 클래스입니다.
  • 미들웨어: 요청과 응답 사이에 위치하여 요청을 처리하거나 응답을 수정하는 역할을 합니다.
  • 필터: 예외 처리를 위한 역할을 합니다.
  • 게이트웨이: 외부 요청과 애플리케이션의 요소 간에 위치하여 요청을 전달하거나 응답을 수정하는 역할을 합니다.

NestJS의 작동 방식

  1. 클라이언트로부터 요청이 들어옵니다.
  2. 요청이 라우터에 의해 적절한 컨트롤러로 전달됩니다.
  3. 컨트롤러는 서비스를 호출하여 요청에 필요한 데이터를 가져옵니다.
  4. 요청에 필요한 데이터를 모두 가져온 후, 컨트롤러는 데이터를 이용하여 응답을 반환합니다.

코드 예시

모듈 예시

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