Pipe를 사용하기 위한 터미널 설정
NestJS Pipe 모듈 설치 [Validation & Transformer]
아래와 같은 터미널 명령어를 통해 Validation & Transformer Pipe를 설치한다.
해당 Pipe는 이전 포스팅에서 소개했던,
NestJS에서 지원하는 Pipe 중 하나이다. (그렇기에, npm으로 모듈을 설치해서 바로 사용할 수 있다.)
$ npm install class-validator class-transformer --save
Part. 1-2 게시글 생성 API
파이프사용해서 Validation 진행
게시글 생성 DTO에 Pipe - Data Validation 적용
게시글 DTO에서 | 클라이언트 request 요청 클래스이자,
객체에서 request 값에 대한 Validation 처리를 진행한다.
Validation은 Null 값 체크하는
IsNotEmpty() 메소드를 사용해 "요청 인자" 하나씩 Validation을 진행했다.
import {IsNotEmpty } from "class-validator";
// create-board.dto.ts 파일 || 게시글 생성 request 객체
export class CreateBoardDto{
@IsNotEmpty()
title: string;
@IsNotEmpty()
description: string;
}
게시글 생성 Controller에 Handler - level Pipe 적용
Handler - level Pipe를 적용하기 위해 @Post 데코레이터와 Controller 메소드 사이에 @UsePipes 데코레이터를 호출한다.
(Controller 메소드를 실행하기 전에 Pipe를 거치기 위해 구성해둔 것임. - 이는 NestJS의 Pipe를 이용한 개발규칙임.)
ValidationPipe를 인자로 넣어 request에 대해 Data Validation을 진행한다.
(아마도, @UsePipes 데코레이터를 만나면서 dto 클래스에 접근해 빈 값 체크에 대한 Validation을 진행하고,
통과하면 아래의 Controller 메소드를 실행하는 게 아닐까?) - 개인적인 생각이니, Pipe를 다뤄보면서 개념을 확실히 잡겠다.
import { Post, UsePipes, ValidationPipe } from '@nestjs/common';
/*
게시글 생성 API Part. 1-2
*/
// 엔드포인트 : '/'
// dto 사용 & Pipe 사용해 Validation 처리
@Post()
// Handler Pipe 이용
@UsePipes(ValidationPipe)
createBoard(
@Body() createBoaradDto: CreateBoardDto
): Board {
return this.boardsService.createBoard(createBoaradDto);
}
Pipe 설정 끝 & 테스팅
위와 같이 Pipe에 대한 코드를 추가하여
API 메소드를 실행하기 전에 request Data에 대한 Validation 작업을 수행할 수 있게 되었다.
그럼, 이제
Postman으로 API Request 테스트를 해보면서
Pipe가 잘 적용되는지 확인해보고,
우리가 Pipe를 적용한 사항에 대해 이해해보자 ㅎㅎ
# 게시글 생성 Body Request를 Null로 요청
Response (Pipe의 예외에러 발생)
# 게시글 생성 Body Request를 Not Null로 요청
Request
Response (Pipe의 예외에러 발생 X)
마치며,
pipe를 통해 Validation 검증을 단 한~두줄만에 구성할 수 있다.
NestJS에 대한 개발방법이고, Pipe에 대해서 많이 사용해보며 상황에 따라
Pipe를 사용해보는 경험을 익히도록 하겠다.
'📚 스터디 > 백엔드' 카테고리의 다른 글
[개인 스터디] NestJS 정복하기 #07 - 커스텀 Pipe 구현 (0) | 2022.10.30 |
---|---|
[개인 스터디] NestJS 정복하기 #05 - Pipe { Data Transformation & Validation } (0) | 2022.10.29 |
[개인 스터디] NestJS 정복하기 #04 - DTO | Data Transfer Object (0) | 2022.10.29 |
[개인 스터디] NestJS 정복하기 #03 - 게시글 생성 API | Create API (0) | 2022.10.28 |
[개인 스터디] NestJS 정복 - CRUD API 구현 (0) | 2022.10.27 |