[NestJS] Pipe를 통한 validation 적용

우주·2022년 12월 18일
0

NestJS

목록 보기
2/2
post-thumbnail

PIPE ?

Pipe는 @Injectable 데코레이터로 주석이 달린 클래스이다.

  • data transformation, data validation을 위해 사용됨.
  • pipe는 controller 경로 처리기에 의해 처리되는 인수에 대해 작동함.

Nest는 메소드 호출 직전에 파이프를 삽입하고 파이프는 메소드로 가는 인수를 수신하고 이에 작동하게 된다.

Data transformation

입력한 데이터를 원하는 형식으로 변환하는 것이다
입력값이 숫자인데 문자열로 입력이 되었을 때 pipe에서 자동으로 숫자로 변환해준다.

Data validation

입력한 데이터가 유효한지 아닌지 판단하여 예외를 발생시킨다.

Handler-level Pipes

핸들러 레벨에서 @UsePipes() 데코레이터를 이용해서 사용이 가능하다. 해당 파이프는 모든 parameter에 적용된다.

Parameter-level Pipes

파라미터 레벨 파이프는 특정한 파라미터에만 적용이 되는 파이프이다. 아래와 같은 경우에는 title만 파라미터 파이브가 적용이된다.

Global Pipes

글로벌 파이프는 애플리케이션 레벨의 파이프이다. 클라이언트의 모든 요청에 적용이되며, main.ts에 넣어주어야 한다.

Pipe 사용예시

pipe를 사용하기 위해서 아래 두 개의 패키지를 다운받는다.
❯ npm i class-validator
❯ npm i class-transformer

Board.DTO

해당 value에 아무것도 입력되지 않았을 때의 validation을 확인하기 위해서
IsNotEmpty를 사용한다. 그리고 해당 값 윗라인에 @IsNotEmpty를 사용해 해당 값에 대한 validation을 진행한다.


board.controller

핸들러 레벨의 파이프 사용을 위해서 UsePipes를 사용했고, NestJs에 내장된 6가지 built-in pipes 중 ValidationPipe를 적용했다.


실제로 validation이 적용되었는지 Postman으로 요청을 보냈을 때

위와 같이 title, descrition값에 빈 값을 요청으로 갔을 때

  • title should not be empty
  • description should not be empty

validation이 잘 이루어 진 것을 확인할 수 있다.

여기서 하나의 인자를 채우고 다시 요청을 보낸다면?

예상했던 것과 같이 해당 인자에만 validation이 적용되어 응답이 오는 것을 볼 수 있다.


NestJS Built-in Pipe

  • ValidationPipe
  • ParseIntPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • DefaultValuePipe

추가로 validator 클래스가 궁금하다면 아래 문서를 참고
https://github.com/validatorjs/validator.js

profile
개발합니다. 회고합니다.

0개의 댓글