카테고리 없음
패스트캠퍼스 환급챌린지 24일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기
Laftel
2025. 3. 28. 16:26
반응형
***본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다
나의 입 맛에 맞는 밸리 데이터 만들기
NestJS에서 class-validator를 이용해 **커스텀 유효성 검사기(Validator)**를 구현한 예입니다.
이렇게 @ValidatorConstraint()와 @Validate()를 사용한 이유는 기존 제공되는 데코레이터만으로는 부족한 유효성 검증을 커스터마이징하기 위함입니다.
기존 유효성 데코레이터의 한계
@MinLength(4), @MaxLength(8) 같은 기본 제공 데코레이터는
- 메시지를 하나씩 따로 써야 하고
- 복잡한 로직(예: 여러 조건 조합, 동적 메시지 등)을 넣기 어렵습니다.
@ValidatorConstraint() + 클래스 선언
- validate() → 실제 검증 로직: 길이가 4 이상 8 이하인지 확인
- defaultMessage() → 유효성 검사 실패 시 보여줄 메시지
@ValidatorConstraint()
class PasswordValidator implements ValidatorConstraintInterface {
validate(value: any): boolean {
return value.length >= 4 && value.length <= 8;
}
defaultMessage(validationArguments?: ValidationArguments): string {
return '비밀번호는 4~8자로 입력해주세요. 입력된 값: {$value}';
}
}
2. DTO에서 적용
@Validate(PasswordValidator, {
message: '다른 에러 메시지'
})
password: string;
- @Validate() 데코레이터를 통해 특정 필드에 커스텀 validator를 적용
- 옵션으로 message를 설정하면, 클래스 내부 defaultMessage() 대신 이 메시지가 우선 사용됨
✅ 이렇게 바꾼 이유
복합 조건 검증 | 기본 데코레이터로 표현이 어려운 조건 (길이가 4~8 사이)을 하나의 검증기로 처리 |
유연한 메시지 제공 | 상황에 맞게 에러 메시지를 커스터마이징 가능 |
검증 로직 재사용 | 여러 DTO나 필드에서 같은 validator를 재사용할 수 있음 |
구조 분리 | 검증 로직을 깔끔하게 분리하여 코드 가독성과 유지보수성 향상 |
예시 사용 결과
export class CreateUserDto {
@Validate(PasswordValidator, {
message: '비밀번호는 최소 4자, 최대 8자까지 가능합니다.',
})
password: string;
}
{
"statusCode": 400,
"message": ["비밀번호는 최소 4자, 최대 8자까지 가능합니다."],
"error": "Bad Request"
}
- 복잡한 검증 조건(4~8자 길이 등)을 하나의 함수로 처리하기 위해
- 에러 메시지를 사용자 맞춤형으로 제공하기 위해
- class-validator의 한계를 넘어서 더 유연한 검증 시스템을 만들기 위해
- 검증 로직을 재사용 가능한 형태로 분리하기 위해
패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
https://bit.ly/4hTSJNB
반응형