카테고리 없음

패스트캠퍼스 환급챌린지 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"
}
  1. 복잡한 검증 조건(4~8자 길이 등)을 하나의 함수로 처리하기 위해
  2. 에러 메시지를 사용자 맞춤형으로 제공하기 위해
  3. class-validator의 한계를 넘어서 더 유연한 검증 시스템을 만들기 위해
  4. 검증 로직을 재사용 가능한 형태로 분리하기 위해

 


패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
https://bit.ly/4hTSJNB

반응형