NestJS / https://docs.nestjs.com/
- 구조화된 코드 작성과 모듈화에 강점을 가진 Node.js 프레임워크
- Node.js의 웹 서버 프레임워크를 기반으로, TypeScript를 지원하여 타입 안정성과 코드 자동 완성을 제공
주요 개념들
모듈(Module)
- NestJS의 모든 애플리케이션은 모듈로 구성됨
- 특정 기능을 그룹화하는 단위
- NestJS에서 모듈은 @Module() 데코레이터로 정의되며, 모듈 내에서 사용할 수 있는 컴포넌트(서비스, 컨트롤러 등)를 지정할 수 있다.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
위 예제에서, AppModule은 애플리케이션의 루트 모듈로, 컨트롤러와 서비스를 포함함.
컨트롤러(Controller)
- 클라이언트의 요청을 처리하고 응답을 반환하는 역할
- @Controller() 데코레이터를 통해 생성
- HTTP 메서드(@Get, @Post, @Put, @Delete 등)를 명시하여 특정 요청을 처리함.
import { Controller, Get } from '@nestjs/common';
@Controller('example')
export class ExampleController {
@Get()
findAll(): string {
return 'This action returns all examples';
}
}
GET /example 요청이 들어오면 findAll() 메서드가 실행되는 예시
서비스(Service)
- 비즈니스 로직 담당
- 컨트롤러와 모듈에 종속되지 않고 독립적인 로직을 수행
- @Injectable() 데코레이터를 통해 다른 컴포넌트에 주입할 수 있음
- NestJS에서는 종속성 주입(Dependency Injection) 시스템을 활용하여 필요한 곳에 서비스를 주입할 수 있음.
주요 기능, 아키텍처
의존성 주입(Dependency Injection, DI)
- NestJS는 DI를 통해 모듈 간 결합도를 낮추고 테스트 용이성을 높힘.
- NestJS의 IoC(Inversion of Control) 컨테이너가 자동으로 인스턴스를 관리함.
미들웨어(Middleware)
- 요청과 응답 사이에서 특정 작업을 수행할 수 있는 함수 예) 인증, 로깅 등
- NestJS에서 미들웨어는 @Middleware() 데코레이터 대신 함수로 정의하고 apply() 메서드를 통해 모듈에 적용함.
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log(`Request...`);
next();
}
}
파이프(Pipe)
- 데이터 유효성 검사를 수행하거나 데이터를 변환할 때 사용됨.
- NestJS는 기본적으로 ValidationPipe와 ParseIntPipe 등 여러 파이프를 제공함.
- @UsePipes() 데코레이터를 사용해 적용함.
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) {
return this.exampleService.findOne(id);
}
"id" 파라미터를 정수로 변환하는 파이프를 적용하여 올바른 데이터 타입으로 처리하는 방식