NestJS의 class-validator는 TypeScript의 클래스에서 유효성 검사를 수행할 수 있게 도와주는 라이브러리입니다.
유효성 검사는 주로 사용자 입력 검증, 데이터 전송 객체(Data Transfer Object, DTO) 검증, 모델 유효성 검사 등에서 사용됩니다.
class-validator를 사용하면 DTO 클래스의 속성에 직접 유효성 검사 데코레이터를 붙여서 자동으로 유효성을 검사할 수 있습니다.
이는 코드의 유지보수를 용이하게 합니다.
유효성 검사를 클래스의 속성에 직접 정의하므로, 데이터 검증 로직이 명확하게 표현됩니다.
다양한 DTO에서 동일한 유효성 검사 로직을 재사용할 수 있습니다.
기본 제공되는 유효성 검사 외에도 사용자 정의 유효성 검사를 쉽게 추가할 수 있습니다.
class-validator에서 제공하는 주요 데코레이터는 다음과 같습니다
다음은 NestJS와 class-validator를 사용한 간단한 예제입니다.
import { IsString, IsInt, Min, Max, Length, IsEmail, ValidateNested } from 'class-validator';
export class CreateUserDto {
@IsString()
@Length(3, 50)
name: string;
@IsEmail()
email: string;
@IsInt()
@Min(18)
@Max(100)
age: number;
}
import { Body, Controller, Post } from '@nestjs/common';
import { CreateUserDto } from './create-user.dto';
@Controller('users')
export class UsersController {
@Post()
create(@Body() createUserDto: CreateUserDto) {
// 유효성 검증이 자동으로 수행됩니다.
return 'User created!';
}
}
class-validator는 NestJS의 유효성 검사와 함께 사용될 때,
검증 실패 시 자동으로 HTTP 400 Bad Request 에러를 발생시키며,
에러 메시지는 다음과 같은 형태로 반환됩니다.
{
"statusCode": 400,
"message": [
"name should not be empty",
"name must be longer than or equal to 3 characters",
"email must be an email",
"age must be an integer number",
"age must not be less than 18",
"age must not be greater than 100"
],
"error": "Bad Request"
}
커스터마이즈된 에러 메시지를 사용하려면 데코레이터에 message 속성을 추가하면 됩니다.
import { IsString, Length, IsEmail, IsInt, Min, Max } from 'class-validator';
export class CreateUserDto {
@IsString({ message: 'Name must be a string' })
@Length(3, 50, { message: 'Name must be between 3 and 50 characters' })
name: string;
@IsEmail({}, { message: 'Email must be a valid email address' })
email: string;
@IsInt({ message: 'Age must be an integer' })
@Min(18, { message: 'Age must be at least 18' })
@Max(100, { message: 'Age must be less than or equal to 100' })
age: number;
}
class-validator는 DTO 클래스에서 유효성 검사를 자동으로 수행할 수 있게 도와주는 라이브러리입니다.
주요 데코레이터로는 @IsString(), @IsInt(), @IsEmail() 등이 있으며, 이들을 활용해 다양한 검증 로직을 간편하게 구현할 수 있습니다.
에러 반환은 기본적으로 HTTP 400 상태 코드와 함께 에러 메시지를 배열 형태로 제공합니다.
커스터마이즈된 에러 메시지를 제공하려면 각 데코레이터의 message 속성을 사용하면 됩니다.
이렇게 class-validator를 활용하면 NestJS 프로젝트에서 데이터 유효성 검사를
효율적으로 관리하고, 가독성 높은 코드를 유지할 수 있다는것을 배웠습니다.