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()์ด ๋ ์ ์ฉํจ.