Zod
Zod란?
Zod는 TypeScript-first 스키마 선언 및 데이터 검증 라이브러리다.
- 스키마(schema): 데이터 구조(타입)와 제약 조건을 정의한 것
- 즉, Zod는 "이 데이터가 어떤 구조와 규칙을 가져야 한다" 를 코드로 선언하고 런타임에서 실제 값이 그 규칙을 따르는지 검사할 수 있게 해준다.
Zod를 쓰는 이유
-
런타임 검증 가능
- TypeScript 타입은 컴파일 타임에만 동작해서 런타임에서는 타입 안정성을 보장하지 못한다.
- Zod는 런타임에서도 입력값을 검사할 수 있어서 API 요청 / 응답, 폼 입력값 등을 안전하게 다룰 수 있다.
-
TypeScript와 완벽한 호환
- Zod 스키마로 정의하면 z.infer를 통해 바로 타입을 뽑아 쓸 수 있다.
- 즉, 타입 정의와 유효성 검증을 따로 작성할 필요 없이 한 번만 작성하면 된다.
-
간결한 문법
- 다른 라이브러리보다 직관적이고 코드 양이 적다.
- 타입스크립트 친화적으로 설계되어 있어 IDE 자동완성도 잘 된다.
-
강력한 기능
- 기본적인 string, number, date 같은 검증뿐 아니라 커스텀 검증, 조건부 검증, union(여러 타입 중 하나) / intersection(여러 타입이 포함된 형태) 타입, 객체, 배열, nullable 등 지원이 가능하다.
- 예: 이메일 형식, 최소 글자 수, 특정 패턴, regex 등
장점 정리
- 런타임 검증 + 타입 정의를 동시에 하여 코드 중복을 줄인다.
- API 안정성 강화 → 외부 데이터(REST, DB 등)를 받을 때 타입 안정 보장.
- TypeScript interface 지원 → 스키마 기반으로 타입 자동 생성.
- 테스트, 유지보수 용이 → 어디서 문제가 생겼는지 쉽게 디버깅 가능.
- TypeScript와 매우 높은 호환성
간단한 예시
import { z } from "zod";
// 스키마 정의
const UserSchema = z.object({
id: z.number(),
name: z.string().min(2),
email: z.string().email(),
});
// 타입 자동 생성
type User = z.infer<typeof UserSchema>;
// 런타임 검증
const result = UserSchema.safeParse({
id: 1,
name: "홍길동",
email: "test@gmail.com",
});
if (!result.success) {
console.error(result.error);
} else {
const user: User = result.data;
}

