ValidationPipe와 class-validator의 동작 방식과 관계 이해하기.Nest.js

bshunter·2023년 7월 20일
0

Nest.js

목록 보기
1/1

Nest.js, ValidationPipe와 class-validator의 동작 방식과 관계 이해하기

본 게시글에서는 Nest.js에서 사용되는 ValidationPipe와 class-validator의 관계와 동작 원리에 대해 살펴보고, 두 기술을 함께 사용하는 예제를 통해 이해를 돕겠습니다.

ValidationPipe와 class-validator 개요

ValidationPipe

ValidationPipe는 Nest.js의 유효성 검사 기능을 도와주는 파이프입니다. ValidationPipe는 데이터의 유효성 검사를 실행하며, 매개 변수 데코레이터(@Body() 또는 @Param() 등)를 사용하여 컨트롤러에 전달하는 데이터의 유효성을 검사합니다.

class-validator

class-validator는 객체의 유효성을 검사하기 위한 데코레이터를 제공하는 라이브러리입니다. 특히 Nest.js에서는 DTO(Data Transfer Object) 클래스의 유효성 검사를 수행하는 데 활용됩니다. class-validator의 데코레이터를 사용하여 검사 규칙을 선언적으로 작성할 수 있습니다.

ValidationPipe와 class-validator의 관계

ValidationPipe는 내부적으로 class-validator를 사용하여 데이터의 유효성 검사를 수행합니다. 즉, class-validator의 데코레이터를 사용하여 DTO의 속성에 검증 규칙을 지정하면, ValidationPipe는 해당 규칙을 적용하여 전달되는 데이터의 유효성을 검사합니다.

예제: 사용자로부터 영화 정보 받기

예를 들어, 사용자로부터 영화 정보를 받아 저장하는 API를 구현한다고 가정하겠습니다.

DTO 작성

먼저, create-movie.dto.ts 파일에 다음과 같이 CreateMovieDto 클래스를 작성합니다.

import { IsNumber, IsString } from "class-validator";

export class CreateMovieDto {
  @IsString()
  readonly title: string;

  @IsNumber()
  readonly year: number;

  @IsString({ each: true })
  readonly genres: string[];
}

이 클래스는 사용자로부터 전달받은 영화 정보를 표현하며, 각 필드에는 유효성 검사를 위한 데코레이터가 적용되어 있습니다.

컨트롤러 작성

다음으로 movies.controller.ts 파일에 새로운 영화를 추가하는 엔드포인트를 작성합니다.

import { Body, Controller, Post } from "@nestjs/common";
import { CreateMovieDto } from "./dto/create-movie.dto";

@Controller("movies")
export class MoviesController {
  @Post()
  create(@Body() movieData: CreateMovieDto) {
    // 영화 추가 로직 작성
  }
}

여기서 @Body() 데코레이터가 사용된 movieData 매개변수의 타입으로 CreateMovieDto를 지정하였습니다.

유효성 검사 실행

마지막으로 main.ts 파일에서 ValidationPipe를 전역 파이프로 등록합니다.

import { ValidationPipe } from "@nestjs/common";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}

이렇게 설정하면, 사용자로부터 전달받은 데이터가 ValidationPipe를 통해 자동으로 유효성 검사가 실행됩니다. 검사 과정에서 CreateMovieDto에 적용된 데코레이터를 사용하여 각 필드의 값이 규칙에 맞는지 확인하고, 에러가 발생하면 적절한 에러 메시지를 반환합니다.

결론

이 포스트에서는 ValidationPipe와 class-validator의 관계와 작동 원리에 대해 살펴보았습니다. Nest.js에서는 이 두 기술을 함께 사용하여 간편하게 데이터의 유효성 검사를 수행할 수 있습니다. 이를 통해 안전하고 명확한 코드를 작성할 수 있으며, 더욱 견고한 애플리케이션을 만들 수 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

아주 유용한 정보네요!

답글 달기