Nest.js class-validation, class-transformer 적용 및 사용

개요

class-validation, class-transformer 은 타입의 안정성을 높이고 원하는 값이 입력되는 가를 검증하는 데에 사용되는 라이브러리 입니다. 기존의 자바 스크립트의 문법으로 원하는 값을 얻으려고 하면 각 validate 메소드를 작성을 하여야 했으나, 간단한 decarator 추가 함으로 인해 쉽게 검증을 할 수 있게 되었습니다. 그렇다면 어떻게 다운을 하고 사용할 수 있는지 알아 보도록 하겠습니다.

설치하기

npm install class-validator class-transformer @nestjs/mapped-types

설정하기

라이브러리를 사용하기 위해 main.ts에 설정을 추가

  // ValidationPipe 전역 적용
  app.useGlobalPipes(
    new ValidationPipe({
      // class-transformer 적용
      transform: true,
    }),
  );

사용하기

class-validator

먼저 class-validator을 적용한 DTO 입니다.

export class CreateVideoReqDto {
  @ApiProperty({ required: true }) // swagger 관련 내용
  @MinLength(2) // 최소 2글자 이상
  @MaxLength(30) // 최대 30글자 이하
  @IsString() // Type은 String만 허용
  title: string;

  @ApiProperty({ type: 'string', format: 'binary', required: true }) // swagger 관련 내용
  video: any;
}

위와 같이 간단하게 Decorator만 지정을 해주면 입력 받는 값에 대한 Validate를 수행하게 되고, 조건에 맞지 않는 값이 입력되게 되면 에러를 반환하게 됩니다.

class-transformer

pipeLine

Transform은 입력 받은 값을 1차적인 처리 후 받게되는 stream 구조를 가지고 있는 라이브러리 입니다. 이전에 설정한 내용을 보게 되면 pipe라는 이름으로 설정을 하였는데, 이러한 과정이 하나의 파이프라인처럼 짜여진 구조에 흘러가지는 그림이라고 생각하면 되겠습니다.

실제로 사용되는 코드는 아래와 같습니다.

export class PageReqDto {
  @ApiPropertyOptional({ description: '페이지. default = 1', default: 1 }) // swagger 관련 내용
  @Transform((param) => Number(param.value)) // query 값이 string 타입으로 number 타입으로 변경
  @IsInt() // int타입인지 validate
  page?: number = 1;

  @ApiPropertyOptional({ description: '페이지당 데이터 갯수. default = 20', default: 20 }) // swagger 관련 내용
  @Transform((param) => Number(param.value)) // // query 값이 string 타입으로 number 타입으로 변경
  @IsInt() // int타입인지 validate
  size?: number = 20;
}

controller 적용

JS의 Desctructure를 사용하여 입력 받는 값의 멤버변수 값으로 바로 입력 받아서 사용하고 있는 모습입니다.

  @Get()
  findAll(@Query() { page, size }: PageReqDto) {
    return this.userService.findAll(page, size);
  }

'Backend > Nest.js' 카테고리의 다른 글

Nest.js Swagger Bearer 인증 적용  (1) 2023.09.26
Nest.js Security Jwt strategy 적용  (0) 2023.09.26
Nest.js Swagger 설치 및 설정  (0) 2023.09.25
Nest.js Swagger 용 Decorator 작성  (0) 2023.09.25
Next.js Typeorm 설치 및 설정  (0) 2023.09.25