Zod vs zod-validator
Zod와 zod-validator는 모두 TypeScript에서 데이터 검증을 수행하는 라이브러리이다.
주요 차이점:
- Zod → 런타임 데이터 검증 및 TypeScript 타입 안전성 보장
- zod-validator → Zod 기반의 추가적인 확장 기능 제공 (Express 미들웨어 지원 등)
1️⃣ Zod란?
Zod는 TypeScript에서 데이터 검증을 위한 가장 널리 사용되는 라이브러리 중 하나
런타임에서 JSON, API 응답, Form 데이터 등을 검증
TypeScript의 타입 시스템과 잘 통합되어 정적 + 동적 타입 안전성을 제공
기본 사용법
import { z } from "zod";
const UserSchema = z.object({
name: z.string().min(2, "이름은 최소 2자 이상이어야 합니다."),
email: z.string().email("유효한 이메일을 입력하세요."),
age: z.number().min(18, "나이는 18세 이상이어야 합니다."),
});
const userData = { name: "Alice", email: "alice@example.com", age: 25 };
const result = UserSchema.safeParse(userData);
console.log(result.success ? "✅ 유효한 데이터" : "❌ 유효하지 않은 데이터", result);
Zod는 .parse() 또는 .safeParse()를 사용하여 데이터를 검증할 수 있음
2️⃣ zod-validator란?
zod-validator는 Zod를 기반으로 한 확장 라이브러리
Express.js, Fastify 등의 프레임워크에서 쉽게 사용할 수 있도록 도와줌
핵심 기능:
- Express.js에서 Zod를 미들웨어로 사용 가능
- 자동으로 req.body, req.params, req.query 검증 가능
- 더 간결한 코드로 Zod를 API 검증과 통합
zod-validator 설치
npm install zod-validator
Express.js에서 zod-validator 사용
import express from "express";
import { z } from "zod";
import { validate } from "zod-validator";
const app = express();
app.use(express.json());
// ✅ 요청 데이터 스키마 정의
const UserSchema = z.object({
name: z.string().min(2, "이름은 최소 2자 이상이어야 합니다."),
email: z.string().email("유효한 이메일을 입력하세요."),
age: z.number().min(18, "나이는 18세 이상이어야 합니다."),
});
// ✅ `validate()` 미들웨어를 사용하여 요청 데이터 자동 검증
app.post("/user", validate(UserSchema), (req, res) => {
return res.status(200).json({ message: "✅ 데이터 검증 성공!", data: req.body });
});
app.listen(3000, () => console.log("🚀 서버 실행 중: http://localhost:3000"));
Express 미들웨어에서 validate(UserSchema)를 사용하면 자동으로 req.body를 검증!
별도의 safeParse() 또는 parse()를 호출할 필요 없이 간결한 코드로 처리 가능
| Zod | zod-validator | |
| 기본 데이터 검증 | 가능 (safeParse()) | 가능 (validate()) |
| TypeScript 타입 변환 (.infer) | 가능 | ❌ 불가능 |
| Express.js 미들웨어 지원 | ❌ 직접 구현 필요 | validate() 지원 |
| API 데이터 자동 검증 | ❌ 직접 safeParse() 사용 필요 | 미들웨어에서 자동 검증 |
| 사용 예시 | z.safeParse(req.body) | validate(UserSchema) |
Zod는 범용적인 데이터 검증에 강점이 있고, zod-validator는 Express API 요청 검증에 최적화됨!
Zod 사용 추천
- TypeScript 프로젝트에서 런타임 데이터 검증이 필요할 때
- Form 데이터 검증 (react-hook-form)
- Prisma와 함께 DB 저장 전 검증
- API 응답 데이터를 검증
zod-validator 사용 추천
- Express.js에서 API 요청을 자동으로 검증하고 싶을 때
- 별도의 safeParse()를 사용하지 않고 미들웨어에서 검증을 처리하고 싶을 때
'JavaScript > TypeScript' 카테고리의 다른 글
| Zod + zodResolver + React Hook Form (0) | 2025.05.15 |
|---|---|
| TypeScript에서 타입을 정의하는 주요 방식 (1) | 2025.05.02 |
| Zod (0) | 2025.03.19 |
| 모듈과 네임스페이스, 프로젝트 설정 및 최적화 (2) | 2025.03.19 |
| 객체 지향 프로그래밍 (OOP) in TypeScript (0) | 2025.03.19 |