“타입스크립트에서 더 잘 맞는 스키마 검증 도구는?”
타입스크립트와의 궁합이 약한 이유
yup은 런타임 데이터 검증에는 매우 유용하지만,
타입스크립트와는 손발이 잘 맞지 않습니다.
타입을 자동으로 추론하지 못하기 때문에
개발자가 직접 type을 선언하거나
as 키워드로 단언해야 하는 일이 많습니다.
결과적으로 스키마와 타입이 분리되어
유지보수가 어려워지고, 불일치 가능성도 생깁니다.
import * as yup from 'yup';
const schema = yup.object({
name: yup.string().required(),
age: yup.number().required(),
});
// 타입이 자동으로 안 잡힘
type User = { name: string; age: number }; // 직접 선언
타입스크립트와의 궁합이 매우 좋은 이유
zod는 스키마에서 바로 타입을 추론합니다.
z.infer를 사용하면, 스키마와 타입이 자동으로 연결됩니다.
타입 선언을 따로 하지 않아도 되고,
스키마가 바뀌면 타입도 함께 바뀌므로
유지보수성이 뛰어납니다.
import { z } from 'zod';
const UserSchema = z.object({
name: z.string(),
age: z.number(),
});
// 자동 추론!
type User = z.infer<typeof UserSchema>;
타입스크립트 개발 환경에서 매우 자연스럽게 동작하며,
런타임 안정성과 타입 안전성을 모두 확보할 수 있습니다.
| 항목 | yup | zod |
|---|---|---|
| 타입 자동 추론 | ❌ 없음 | ✅ 있음 (z.infer) |
| 타입 선언 필요 | ⛔ 수동 선언 필요 | ✅ 불필요 |
| 타입-스키마 동기화 | ❌ 불일치 가능 | ✅ 항상 일치 |
| 유지보수성 | 👎 낮음 | 👍 높음 |
| 타입스크립트 궁합 | ⚠️ 보통 | 🌟 매우 좋음 |