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 해야 하는 인터페이스이다.
파이프에 대한 기록은 다룬 적이 있다.
이제 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 공식문서에서 가져온 글이다.
요약하면, 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로 바꾸는 동작부터
유효성 검사하는 작업을 수행할 때까지의 옵션을 지정할 수 있다.
'Backend > NestJS' 카테고리의 다른 글
[NestJS] @EntityRepository 대체 커스텀 데커레이터, 모듈 만들기 (1) | 2023.01.04 |
---|---|
[NestJS] TypeORM, Entity, Repository 구조(NestJS PostgresSQL 적용) (1) | 2023.01.03 |
[NestJS] User API 만들기(3) (파이프 Pipe 유효성 검사) (0) | 2022.12.30 |
[NestJS] Nest 모듈 설계 (0) | 2022.12.29 |
[NestJS]User API 만들기(2) (Provider 프로바이더 회원가입 구현) (1) | 2022.12.29 |