zod
는 TypeScript와 JavaScript에서 사용할 수 있는 스키마 선언 및 검증 라이브러리입니다. zod
를 사용하면 객체, 배열, 숫자, 문자열 등 다양한 데이터 구조를 스키마로 정의하고, 이를 기반으로 데이터의 유효성을 검증할 수 있습니다. 이를 통해 타입 안정성과 런타임에서의 데이터 검증을 동시에 수행할 수 있습니다.
왜 zod
를 사용하는가?
- 타입 안전성:
zod
는 TypeScript와 자연스럽게 통합되어 스키마에서 정의한 데이터 구조에 대해 TypeScript 타입을 자동으로 추론합니다. - 런타임 검증: TypeScript는 컴파일 타임에서만 타입을 검사합니다.
zod
는 런타임에서도 데이터가 올바른지 확인할 수 있어, API 응답이나 폼 입력 데이터를 검증할 때 유용합니다. - 간편한 사용법:
zod
는 직관적이고 선언적인 API를 제공하여, 복잡한 데이터 구조도 쉽게 정의하고 검증할 수 있습니다. - 객체 변환: 데이터를 변환하거나 파싱할 때도 유용하며, 잘못된 데이터가 들어오는 것을 방지할 수 있습니다.
기본 사용법
1. 설치
먼저 zod
를 설치해야 합니다.
npm install zod
2. 기본 스키마 정의 및 검증
import { z } from 'zod';
// 문자열 스키마 정의
const stringSchema = z.string();
// 검증
stringSchema.parse("hello"); // 성공
stringSchema.parse(123); // 실패 - Error: Expected string, received number
parse
메서드는 유효하지 않은 데이터가 들어올 경우 오류를 발생시킵니다.
3. 객체 스키마
객체의 구조를 정의할 수 있습니다.
const userSchema = z.object({
name: z.string(),
age: z.number(),
});
// 검증
userSchema.parse({
name: "Alice",
age: 25,
}); // 성공
userSchema.parse({
name: "Alice",
age: "25", // 실패 - Error: Expected number, received string
});
4. 선택적 필드 및 기본값
스키마에서 선택적 필드 또는 기본값을 정의할 수 있습니다.
const userSchema = z.object({
name: z.string(),
age: z.number().optional(), // 선택적 필드
isAdmin: z.boolean().default(false), // 기본값 설정
});
userSchema.parse({
name: "Bob",
}); // 성공, { name: "Bob", isAdmin: false }
5. 배열, Enum 등 복잡한 타입
배열이나 enum 등도 스키마로 정의할 수 있습니다.
const fruitsSchema = z.array(z.string());
fruitsSchema.parse(["apple", "banana", "orange"]); // 성공
const roleSchema = z.enum(["admin", "user", "guest"]);
roleSchema.parse("admin"); // 성공
roleSchema.parse("manager"); // 실패 - Error: Invalid enum value
6. 타입 추론
zod
는 스키마에서 TypeScript 타입을 자동으로 추론할 수 있습니다.
const userSchema = z.object({
name: z.string(),
age: z.number(),
});
type User = z.infer<typeof userSchema>;
// User 타입은 { name: string; age: number }로 추론됩니다.
언제 zod
를 사용하는가?
- API 데이터 검증: 클라이언트와 서버 간의 데이터 교환 시, 서버에서 클라이언트가 보낸 데이터가 올바른지 검증하는 데 유용합니다.
- 사용자 입력 검증: 사용자가 입력한 폼 데이터나 입력 값들이 예상한 데이터 타입과 구조를 따르는지 확인할 수 있습니다.
- 타입 안전한 데이터 파싱: 외부 API에서 가져온 데이터를 타입 안전하게 파싱하여, 잘못된 데이터 형식으로 인한 에러를 방지합니다.
zod
는 간단한 사용법과 강력한 기능으로 다양한 상황에서 타입 안전성과 데이터 검증을 동시에 제공해줍니다.
'TIL' 카테고리의 다른 글
[240919 TIL] pnpm 재설치 (0) | 2024.09.19 |
---|---|
[240919 TIL] revalidatePath, on-demand ISR (1) | 2024.09.19 |
[240908 TIL] 모노레포 구성하기 업데이트 (2) | 2024.09.08 |
[240906 TIL] Monorepo 구성하기 (0) | 2024.09.06 |
[240821 TIL] 컬쳐핏 (0) | 2024.08.21 |