JavaScript/js ๋ฌธ๋ฒ•

NestJS - IsDate() vs @IsDateString()

GREEN๋‚˜๋ฌด 2025. 2. 13. 04:59
728x90

๐Ÿ“Œ @IsDate() vs @IsDateString() ์˜ˆ์ œ

NestJS์˜ class-validator ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


1๏ธโƒฃ @IsDate() → Date ํƒ€์ž…์˜ ๊ฐ’๋งŒ ํ—ˆ์šฉ

import { IsDate } from 'class-validator';
import { Type } from 'class-transformer';

class ExampleDto {
  @IsDate()
  @Type(() => Date) // ๋ณ€ํ™˜ ํ•„์ˆ˜!
  birthDate: Date;
}

// ์‚ฌ์šฉ ์˜ˆ์ œ
const validData = { birthDate: new Date('2025-01-01') }; // โœ… ์œ ํšจํ•จ
const invalidData = { birthDate: '2025-01-01' }; // โŒ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ์œ ํšจํ•˜์ง€ ์•Š์Œ

๐Ÿ”น ์ฃผ์˜ํ•  ์ :

  • @IsDate()๋Š” Date ๊ฐ์ฒด๋งŒ ํ—ˆ์šฉํ•จ.
  • string ๊ฐ’์„ Date๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด @Type(() => Date)์„ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ.
  • ์ผ๋ฐ˜์ ์ธ API ์š”์ฒญ์—์„œ๋Š” ๋ฌธ์ž์—ด("2025-01-01")๋กœ ์ „๋‹ฌ๋˜๋ฏ€๋กœ ์ง์ ‘ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—์„œ ์‹คํŒจํ•จ.

2๏ธโƒฃ @IsDateString() → ๋‚ ์งœ ํ˜•์‹์˜ ๋ฌธ์ž์—ด ํ—ˆ์šฉ

import { IsDateString } from 'class-validator';

class ExampleDto {
  @IsDateString()
  eventDate: string;
}

// ์‚ฌ์šฉ ์˜ˆ์ œ
const validData = { eventDate: '2025-01-01T10:00:00.000Z' }; // โœ… ์œ ํšจํ•จ
const invalidData = { eventDate: '2025-01-01' }; // โœ… ์ด๊ฒƒ๋„ ํ—ˆ์šฉ๋จ
const invalidFormat = { eventDate: 'random string' }; // โŒ ์œ ํšจํ•˜์ง€ ์•Š์Œ

๐Ÿ”น ์ฃผ์˜ํ•  ์ :

  • ISO 8601 ํ˜•์‹์˜ ๋‚ ์งœ ๋ฌธ์ž์—ด์„ ํ—ˆ์šฉ (YYYY-MM-DD ๋˜๋Š” YYYY-MM-DDTHH:mm:ss.sssZ)
  • Date ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

โœ… ์ •๋ฆฌ (์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ?)

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ—ˆ์šฉ ํƒ€์ž… ๋ณ€ํ™˜ ํ•„์š” ์—ฌ๋ถ€ ์‚ฌ์šฉ ์˜ˆ

@IsDate() Date ๊ฐ์ฒด @Type(() => Date) ํ•„์š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ Date ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•  ๊ฒฝ์šฐ
@IsDateString() string (ISO 8601) โŒ ๋ณ€ํ™˜ ํ•„์š” ์—†์Œ API ์š”์ฒญ์—์„œ ๋‚ ์งœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ

 

๐Ÿ’ก API์—์„œ ๋‚ ์งœ๋ฅผ ๋ฐ›์„ ๋•Œ๋Š” @IsDateString()์„ ์ถ”์ฒœ!
→ ์ผ๋ฐ˜์ ์œผ๋กœ JSON ์š”์ฒญ์—์„œ ๋‚ ์งœ๋Š” ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ๋˜๋ฏ€๋กœ @IsDate()๋ณด๋‹ค @IsDateString()์ด ๋” ์œ ์šฉํ•จ.