본문 바로가기
개발/Nest

@UsePipes와 ValidationPipe로 유효성검사

by 안뇽! 2024. 11. 15.
반응형

 

클라이언트가 서버로 전송하는 데이터의 유효성검사를 Nest에서는 효율적으로 할 수 있게 Pipe라는 기능을 제공한다.

특히 ValidationPIpe는 DTO를 활용하여 자동으로 유효성 검사를 수행한다.

 

@UsePipes

@UsePipes는 Nest 데코레이터로 특정 메서드나 클래스에 파피프를 적용하기 위해 사용된다.

파이프는 데이터를 변환하거나 유효성을 검사하는데 사용하는데, Request가 컨트롤러에 도달하기 전에 실행된다.

 

@ValidationPipe

ValidationPipe는 DTO를 기반으로 유효성 검사를 수행한다. 

 

  • 자동 유효성 검사: DTO에 정의된 조건을 기준으로 데이터 검증
  • 자동 예외처리: 데이터가 유효하지 않을 경우 400 반환
  • 데이터 정제: 불필요한 필드를 제거하고 DTO에 정의된 필드만 남긴다.

예시

baords.controller.ts

import {
  Body,
  Controller,
  Get,
  Param,
  Post,
  UsePipes,
  ValidationPipe,
} from '@nestjs/common';
import { Board } from 'src/boards/board.entity';
import { BoardsService } from 'src/boards/boards.service';
import { CreateBoardDto } from 'src/boards/dto/create-board.dto';

@Controller('boards')
export class BoardsController {
  constructor(private boardsService: BoardsService) {}

  ...
  
  @Post()
  @UsePipes(ValidationPipe)
  createBoard(@Body() createBoardDto: CreateBoardDto): Promise<Board> {
    return this.boardsService.createBoard(createBoardDto);
  }
}

 

create-board.dto.ts

import { IsNotEmpty } from 'class-validator';

export class CreateBoardDto {
  @IsNotEmpty()
  title: string;
  @IsNotEmpty()
  description: string;
}

 

createBoard 메서드에 ValidationPipe를 적용하여 클라이언트가 보낸 데이터(@Body)를 CreateBoardDto와 비교하여 검증한다.

 

description을 빼고 POST를 쏘면 자동으로 에러메시지까지 반환해준다.

 

반응형

'개발 > Nest' 카테고리의 다른 글

리포지토리 패턴  (0) 2024.11.16
Nest 공식문서에서 dto 생성시 interface보다 class를 권장하는 이유  (0) 2024.11.14
Nest로 SSR하기 (+MVC)  (0) 2022.06.24
Nest 컨트롤러  (0) 2022.06.19
nest와 친해지기  (0) 2022.06.18