[Nest.JS] 신용카드, 색상코드, UUID, 위도/경도 유효성 데코레이터

궁금하면 500원·2024년 8월 11일
0

유효성 검사

이전 포스팅에 class-validator 데코레이터를 사용하여 유효성 검사를
학습하고 사이드 프로젝트 만들었는데.. 사이드 프로젝트 만드는 과정중
사용하게 된 유효성 검사 4가지 데코레이터에 대해 포스팅 할려고 합니다.

1. @IsCreditCard()

@IsCreditCard() 데코레이터는 문자열이 유효한 신용카드 번호 형식인지 확인합니다.
Luhn 알고리즘을 사용하여 카드 번호의 형식을 검사합니다.

예시 코드

import { IsCreditCard, IsNotEmpty } from 'class-validator';

export class PaymentDto {
    @IsNotEmpty()
    @IsCreditCard() // 유효한 신용카드 번호인지 확인
    cardNumber: string;
}

// 예시 데이터:
{
    "cardNumber": "4111111111111111" // 유효한 카드 번호 형식
}

// 예시 데이터 (에러):
{
    "cardNumber": "1234567890123456" // 유효하지 않은 카드 번호 형식
}
  • Luhn 알고리즘을 통해 카드 번호가 유효한지 체크하기 때문에, 카드 번호의 형식 오류가 있을 경우 유효성 검사가 실패합니다.

2. @IsHexColor()

@IsHexColor()는 문자열이 6자리 또는 3자리 16진수로 표현된 유효한 색상 코드인지 확인합니다.
HTML/CSS에서 사용되는 색상 코드 형식을 검증할 때 유용합니다.

예시 코드:

import { IsHexColor, IsNotEmpty } from 'class-validator';

export class ColorDto {
    @IsNotEmpty()
    @IsHexColor() // 유효한 16진수 색상 코드인지 확인
    backgroundColor: string;
}

// 예시 데이터:
{
    "backgroundColor": "#ff5733" // 유효한 6자리 16진수 색상
}

// 예시 데이터 (에러):
{
    "backgroundColor": "blue" // 유효하지 않은 색상 형식
}
  • 이 데코레이터는 # 문자로 시작하는 3자리 또는 6자리의 16진수 코드만 허용합니다.
    예를 들어, #fff, #ffffff는 허용되지만 blue 같은 색상 이름은 허용되지 않습니다.

3. @IsUUID()

@IsUUID() 데코레이터는 문자열이 유효한 UUID(범용 고유 식별자)인지 확인합니다.
주로 데이터베이스에서 고유 식별자로 사용되며, 다양한 버전의 UUID를 지원합니다.

예시 코드:

import { IsUUID, IsNotEmpty } from 'class-validator';

export class UserDto {
    @IsNotEmpty()
    @IsUUID() // 유효한 UUID인지 확인
    userId: string;
}

// 예시 데이터:
{
    "userId": "123e4567-e89b-12d3-a456-426614174000" // 유효한 UUID v4
}

// 예시 데이터 (에러):
{
    "userId": "invalid-uuid-string" // 유효하지 않은 UUID
}
  • UUID 버전을 지정하고 싶은 경우, @IsUUID('4')와 같이 버전을 명시할 수 있습니다.
    기본적으로는 모든 버전의 UUID를 검증할 수 있지만, 필요에 따라 특정 버전만 허용할 수 있습니다.

4. @IsLatLong()

@IsLatLong() 데코레이터는 문자열이 유효한 위도(latitude)와 경도(longitude) 값인지 확인합니다.
위도와 경도는 각각 -90에서 90, -180에서 180 사이의 실수로 표현됩니다.

예시 코드:

import { IsLatLong, IsNotEmpty } from 'class-validator';

export class LocationDto {
    @IsNotEmpty()
    @IsLatLong() // 유효한 위도와 경도 값인지 확인
    coordinates: string;
}

// 예시 데이터:
{
    "coordinates": "37.7749,-122.4194" // 유효한 위도, 경도 값 (샌프란시스코)
}

// 예시 데이터 (에러):
{
    "coordinates": "200,200" // 유효하지 않은 위도와 경도 값
}
  • 위도와 경도는 위도,경도 형식의 문자열로 전달되며, 각 값이 범위 내에 있어야만 유효성 검사가 통과합니다.
    위도가 -90에서 90, 경도가 -180에서 180 사이여야 합니다.

결론

  • @IsCreditCard(): 유효한 신용카드 번호인지 검사 (Luhn 알고리즘 사용).
  • @IsHexColor(): 유효한 16진수 색상 코드인지 검사.
  • @IsUUID(): 유효한 UUID(범용 고유 식별자)인지 검사.
  • @IsLatLong(): 유효한 위도와 경도 값인지 검사.

이 네 가지 데코레이터는 각기 다른 검증 용도로 사용되며,
NestJS에서 데이터 유효성 검사를 간편하게 구현하는 데 큰 도움이 되었습니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글