본문 바로가기

Backend/NestJS

[NestJS] NestJS 유효성 파이프 적용 이해하기(ValidationPipe)

728x90
validationpipe를 이용하는 것이 구체적으로 이해가 가지 않아
이에 대한 이해 과정 기록이다.

개요

이번 기록에서는 아래의 코드를 이해하는 것이 목적이다.

//Boards.controller.ts
@Post()
@UsePipes(ValidationPipe)
createBoard(@Body() createBoardDTO: CreateBoardDTO) {
  return this.boardsService.createBoard(createBoardDTO);
}

createBoard는 board를 생성하는 역할을 하는 메소드이며

ValidationPipe는 Board의 DTO에서 지정한 유효성을 검사하는 역할을 한다.

 

하나씩 천천히 알아보자.

@UsePipes

export declare function UsePipes(...pipes: (PipeTransform | Function)[]): ClassDecorator & MethodDecorator;

UsePipes의 정의는 위와 같다.

 

주석을 보면 UsePipes는 인자로 전달되는 Pipe들을 바인딩해서

해당 핸들러나 컨트롤러 전역에 적용하는 역할을 한다.

위의 정의를 보면 충분히 예상할 수 있다.

 

PipeTransform 인터페이스는 Pipe를 생성하기 위해 반드시 implements 해야 하는 인터페이스이다.

파이프에 대한 기록은 다룬 적이 있다.

 

[NestJS] User API 만들기(3) (파이프 Pipe 유효성 검사)

NestJS 파이프에 대한 공부 기록이다. 개요 파이프는 요청이 라우터 핸들러로 전달되기 전 요청 객체를 변환할 수 있는 기회를 제공한다. 파이프는 일반적으로 아래 두 가지의 목적으로 사용한다.

choi-records.tistory.com

 

이제 UsePipes 데커레이터는 무슨 역할을 하는지 알았고,

validationPipe를 보자.

 

ValidationPipe

The ValidationPipe makes use of the powerful class-validator package and its declarative validation decorators. The ValidationPipe provides a convenient approach to enforce validation rules for all incoming client payloads, where the specific rules are declared with simple annotations in local class/DTO declarations in each module.

위는 NestJS 공식문서에서 가져온 글이다.

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

 

요약하면, ValidationPipe는 클라이언트의 요청에 대해

class-validator 라이브러리의 유효성 검사 데커레이터를 사용해 유효성 검사 규칙을 적용한다는 것이다.

 

또한 TypeScript에서 제너릭이나 인터페이스는 metadata를 저장하지 않기 때문

DTO를 만들 때 Class를 이용할 것을 권한다.

 

createBoardDTO를 보자.

import { IsNotEmpty } from 'class-validator';

export class CreateBoardDTO {
  @IsNotEmpty()
  title: string;

  @IsNotEmpty()
  description: string;
}

class-validator의 유효성 검사 라이브러리인 IsNotEmpty 데커레이터를 이용해

title과 description을 검사하고 있다.

 

컨트롤러에서 ValidationPipe를 이용해 

JSON Body를 class instance로 바꾸는 동작부터

유효성 검사하는 작업을 수행할 때까지의 옵션을 지정할 수 있다.

 

728x90