[개인 스터디] NestJS 정복하기 #06 - Pipe 사용법

2022. 10. 29. 21:13·백엔드 개발
반응형

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로 요청

Request
 
{
"title": "",
"description": ""
}

 

Response (Pipe의 예외에러 발생)

{
"statusCode": 400,
"message": [
"title should not be empty",
"description should not be empty"
],
"error": "Bad Request"
}

 

# 게시글 생성 Body Request를 Not Null로 요청

 

Request

{
"title": "첫번째 게시글",
"description": "첫번째 게시글 내용입니다."
}

 

Response  (Pipe의 예외에러 발생 X)

{
"id": "90451e80-5781-11ed-b83e-55e14abdbb4a",
"title": "첫번째 게시글",
"description": "첫번째 게시글 내용입니다.",
"status": "PUBLIC"
}

 

마치며,

pipe를 통해 Validation 검증을 단 한~두줄만에 구성할 수 있다.

NestJS에 대한 개발방법이고, Pipe에 대해서 많이 사용해보며 상황에 따라

Pipe를 사용해보는 경험을 익히도록 하겠다.

 

반응형

'백엔드 개발' 카테고리의 다른 글

[CI/CD] AWS EC2 자동화 배포 파이프라인 구축하기  (0) 2025.01.25
[개인 스터디] 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
'백엔드 개발' 카테고리의 다른 글
  • [CI/CD] AWS EC2 자동화 배포 파이프라인 구축하기
  • [개인 스터디] NestJS 정복하기 #07 - 커스텀 Pipe 구현
  • [개인 스터디] NestJS 정복하기 #05 - Pipe { Data Transformation & Validation }
  • [개인 스터디] NestJS 정복하기 #04 - DTO | Data Transfer Object
욱22
욱22
우기의 모든 걸 기록합니다.
    반응형
  • 욱22
    우기 때 만나요
    욱22
  • 전체
    오늘
    어제
    • 우기 때 만나요 (265) N
      • 💭 경험&생각 (49) N
      • 🌤 일상&취미 (12)
      • 📖 북로그 (29)
      • 백엔드 개발 (27)
      • 📚 스터디 (33)
        • 비즈니스 (0)
        • 프론트엔드 (9)
        • 디자인 (4)
        • 데이터베이스 (8)
        • 데이터 분석 (0)
        • 인공지능 (2)
        • 알고리즘 (10)
      • CS 대학강의 (78)
      • 🌤 프로젝트 (0)
        • UMC 2기: 동네 (15)
        • UMC 3기: 당신의 발자취 (6)
        • ERICA: 스타트업톤 (9)
        • ERICA: 또래튜터링 (2)
      • 🌤 대외활동 (5)
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • 태그

    객체지향 프로그래밍
    백준
    생각정리
    AWS
    창업
    대학생 개발 프로젝트
    스타트업
    디자인
    안드로이드
    자기계발
    자료구조
    java
    드럼 레슨
    Kotlin
    대학생 대외활동
    디자인베이스
    오블완
    드럼
    티스토리챌린지
    파이썬
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
욱22
[개인 스터디] NestJS 정복하기 #06 - Pipe 사용법
상단으로

티스토리툴바