1. @IsNotEmpty()
- 빈 값(Empty)을 허용하지 않음
- "", null, undefined가 들어오면 검증 에러 발생
- @IsOptional()과 함께 사용하면, 필드가 존재할 경우에만 검증됨
import { IsNotEmpty } from 'class-validator'; class ExampleDto { @IsNotEmpty() name: string; // 빈 값이 들어오면 에러 발생 }
2. @IsOptional()
- 필드를 선택적으로 입력할 수 있도록 허용함
- 요청에서 해당 필드가 누락되면 검증을 수행하지 않음
- 단, 값이 존재할 경우 다른 검증 조건을 적용할 수 있음
import { IsOptional, IsString } from 'class-validator'; class ExampleDto { @IsOptional() @IsString() description?: string; // 값이 있으면 문자열이어야 함, 없으면 검증하지 않음 }
3. @IsString()
- 문자열인지 검증
- 숫자, 객체, 배열 등이 들어오면 에러 발생
import { IsString } from 'class-validator'; class ExampleDto { @IsString() text: string; // 문자열이 아닌 값이 들어오면 에러 발생 }
4. @IsNumber()
- 숫자인지 검증
- allowNaN: true 옵션을 사용하면 NaN 허용 가능
- allowInfinity: true 옵션을 사용하면 Infinity 허용 가능
import { IsNumber } from 'class-validator'; class ExampleDto { @IsNumber() amount: number; }
5. @IsInt()
- 정수인지 검증 (소수점 허용 안 됨)
import { IsInt } from 'class-validator'; class ExampleDto { @IsInt() age: number; // 정수만 허용 }
6. @IsBoolean()
- true 또는 false 값만 허용
import { IsBoolean } from 'class-validator'; class ExampleDto { @IsBoolean() isActive: boolean; }
7. @IsArray()
- 배열인지 검증
import { IsArray } from 'class-validator'; class ExampleDto { @IsArray() items: string[]; }
8. @IsEmail()
- 이메일 형식인지 검증
import { IsEmail } from 'class-validator'; class ExampleDto { @IsEmail() email: string; }
9. @IsEnum()
- 특정 Enum 값인지 검증
import { IsEnum } from 'class-validator'; enum UserRole { ADMIN = 'admin', USER = 'user', } class ExampleDto { @IsEnum(UserRole) role: UserRole; }
10. @IsDate()
- 날짜 값인지 검증 (Date 객체만 허용됨)
import { IsDate } from 'class-validator'; class ExampleDto { @IsDate() birthDate: Date; }
11. @IsUrl()
- URL 형식인지 검증
import { IsUrl } from 'class-validator'; class ExampleDto { @IsUrl() website: string; }
12. @Length(min, max)
- 문자열 길이를 제한
import { Length } from 'class-validator'; class ExampleDto { @Length(3, 10) username: string; // 최소 3자, 최대 10자 }
13. @Min(value) & @Max(value)
- 최소값과 최대값 제한
import { Min, Max } from 'class-validator'; class ExampleDto { @Min(18) @Max(65) age: number; }
14. @Matches(regex)
- 정규식을 사용하여 값 검증
import { Matches } from 'class-validator'; class ExampleDto { @Matches(/^[a-zA-Z0-9]+$/) username: string; // 영문과 숫자만 허용 }
15. @ValidateNested()
- 중첩된 객체의 유효성 검증 (객체 내부 필드도 검증하려면 @Type() 필요)
import { ValidateNested } from 'class-validator'; import { Type } from 'class-transformer'; class AddressDto { @IsString() street: string; @IsString() city: string; } class UserDto { @ValidateNested() @Type(() => AddressDto) address: AddressDto; }
16. @ArrayNotEmpty()
- 배열이 비어 있으면 안 됨
import { ArrayNotEmpty } from 'class-validator'; class ExampleDto { @ArrayNotEmpty() items: string[]; // 빈 배열 허용 안 됨 }
17. @IsUUID(version)
- UUID 형식인지 검증
import { IsUUID } from 'class-validator'; class ExampleDto { @IsUUID() id: string; }
18. @IsPositive() & @IsNegative()
- 양수(@IsPositive()), 음수(@IsNegative())만 허용
import { IsPositive, IsNegative } from 'class-validator'; class ExampleDto { @IsPositive() positiveNumber: number; @IsNegative() negativeNumber: number; }
19. @Allow()
- 어떤 값이든 허용 (검증을 하지 않음)
import { Allow } from 'class-validator'; class ExampleDto { @Allow() extraField: any; // 어떤 값이든 허용 }
✅ 정리
- class-validator를 활용하면 DTO에서 입력값 검증을 간단하게 처리 가능
- @IsOptional()을 활용하면 필수 여부를 선택적으로 설정 가능
- 다양한 검증 데코레이터를 조합하여 안전한 데이터 유효성 검사 구현 가능
댓글 ( 0)
댓글 남기기