프로젝트 소개
Zod는 TypeScript 우선 검증 라이브러리입니다. 스키마를 정의하고 이를 사용해 데이터를 파싱하면 강력한 타입의 검증된 결과를 받습니다. Node.js와 최신 브라우저에서 작동하며, 외부 의존성이 없고 작은 핵심 번들(약 2kb gzip)을 제공합니다. API는 불변입니다. 메서드는 기존 스키마를 변경하지 않고 새 인스턴스를 반환합니다. TypeScript 또는 일반 JavaScript에서 사용할 수 있으며 내장된 JSON Schema 변환 기능을 포함합니다.
기본 사용법은 스키마 정의로 시작합니다. 예를 들어 문자열과 숫자 필드를 가진 객체를 정의할 수 있습니다. 스키마에서 `.parse`를 호출하면 입력을 검증하고 강력한 타입의 깊은 복제본을 반환합니다. 스키마가 비동기 리파인먼트(refinement)나 트랜스폼(transform)을 사용하는 경우 `.parseAsync()`를 대신 사용해야 합니다. 검증에 실패하면 `.parse()`는 예상 타입, 오류 코드, 문제 필드 경로, 메시지 등 세부적인 문제 정보를 포함한 `ZodError`를 던집니다. try/catch를 피하려면 `.safeParse()`가 파싱된 데이터 또는 오류를 담은 판별 유니온(discriminated union)을 반환합니다. `.safeParseAsync()`는 비동기 스키마를 처리합니다.
타입은 `z.infer<>`를 사용하여 스키마에서 추론할 수 있습니다. 입력 타입과 출력 타입이 예를 들어 `.transform()`을 통해 달라지는 경우 `z.input<>`과 `z.output<>`이 각각 독립적으로 추출합니다.
주목할 만한 기능은 사전 컴파일(ahead-of-time compilation)입니다. `z.compile(schema)`는 유효한 입력에 대해 컴파일된 빠른 경로를 가진 스키마 복제본을 반환하며, 유효하지 않은 입력은 일반 파서로 폴백하므로 오류 보고는 동일하게 유지됩니다. README에 따르면 55개 스키마 벤치마크에서 중앙값 2.4배 속도 향상을 보였고, 스키마 복잡도에 따라 확장됩니다(대형 객체 배열 및 20개 키 객체는 약 9배, 중첩 객체는 약 4.5배, 단순 문자열 스키마는 이점 없음). 컴파일은 스키마를 정의하는 모듈 앞에서 `zod/compile`을 임포트하여 전역적으로 활성화할 수도 있습니다. 컴파일은 `new Function`을 사용하며, CSP 환경과 같이 `z.config({ jitless: true })`가 설정되면 전역 모드는 자동으로 비활성화됩니다. `z.compile()`을 직접 호출하는 것은 명시적 옵트인입니다. 비동기 리파인먼트나 트랜스폼이 있는 스키마 및 기타 일부 구성은 컴파일할 수 없습니다. 이 경우 `z.compile()`은 스키마를 변경하지 않고 반환하며, 특정 오류를 던지기 위해 `{ strict: true }`를 전달하지 않는 한 일반 파서를 계속 사용합니다. 유효하지 않은 입력에 대해 리파인먼트와 트랜스폼이 두 번 실행될 수 있습니다. 컴파일된 스키마에서 새 스키마를 파생하면 컴파일되지 않은 스키마가 반환되므로 최종 스키마를 컴파일해야 합니다.
설치는 `npm install zod`로 합니다. 프로젝트는 zod.dev 문서, Discord 커뮤니티, 소셜 채널로 연결됩니다. MIT 라이선스입니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.