zod를 사용한 스키마 검증과 TS 추론
zod로 요청을 검증하고 스키마에서 TypeScript 타입을 추론하며, 안전한 미들웨어와 오류 처리를 추가합니다.
zod를 사용한 스키마 검증과 TS 추론은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 3개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
소개
목표: zod로 들어오는 데이터를 검증하고 z.infer를 통해 TypeScript 타입을 동기화하십시오. 안전하게 파싱하고, 유용한 오류를 전송하며, 검증을 미들웨어에 연결합니다.
- 스키마를 한 번만 정의하기
- TS 타입 추론하기
- safeParse와 400 오류
스키마와 추론
조드로 한 번만 모델을 정의하십시오. 파생된 type User = z.infer<typeof userSchema> 타입은 검증과 정확히 일치합니다.
import { z } from "zod"
export const userSchema = z.object({
id: z.string().regex(/^u_[a-z0-9]+$/),
name: z.string().min(1),
age: z.number().int().nonnegative().optional()
})
export type User = z.infer<typeof userSchema>
// Reuse `User` across handlers, services, and tests처리기에서 safeParse 사용하기
예외를 피하려면 safeParse를 사용하고, 형식이 지정된 문제와 함께 400을 반환하십시오. 응답 타입은 성공 형태와 오류 형태를 모두 반영합니다.
import { Request, Response } from "express"
import { userSchema, User } from "./schema"
export function createUser(req: Request<{}, User, unknown>, res: Response<User | { error: string; issues?: unknown }>) {
const parsed = userSchema.safeParse(req.body)
if (!parsed.success) {
return res.status(400).json({ error: "Invalid body", issues: parsed.error.format() })
}
const user = parsed.data
return res.status(201).json(user)
}미들웨어 도우미
재사용 가능한 미들웨어를 만드십시오. 본문을 파싱한 다음 타입이 지정된 데이터를 연결하거나 세부 정보와 함께 400을 반환합니다.
import { z } from "zod"
import { Request, Response, NextFunction } from "express"
export function validateBody<T extends z.ZodTypeAny>(schema: T) {
return (req: Request, res: Response, next: NextFunction) => {
const r = schema.safeParse(req.body)
if (!r.success) {
return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
}
req.body = r.data
next()
}
}강제 변환 및 refine
문자열 형태의 숫자를 허용하려면 z.coerce를 사용하고, 알려진 값에는 z.enum을, 여러 필드에 걸친 규칙에는 .refine을 사용합니다.
import { z } from "zod"
const signupSchema = z.object({
email: z.string().email(),
age: z.coerce.number().int().gte(13),
role: z.enum(["user", "admin"]).default("user")
}).refine(v => v.role !== "admin" || v.age >= 18, { message: "admin must be adult" })
export type Signup = z.infer<typeof signupSchema>
// Coercion allows numbers in strings; refine adds cross-field rules오류 처리 팁
오류 처리 팁:
- 항상 입력 경계에서
safeParse를 사용하십시오. - 클라이언트용으로 문제를 형식화하고 스택 추적 정보가 노출되지 않도록 하십시오.
- 예외가 발생한 구문 분석을 처리한다면
unknown을ZodError로 좁히십시오.
zod 추론 확인
빠른 확인: TS 타입을 zod 스키마와 동기화된 상태로 유지하려면 어떻게 해야 합니까?
요약
요약: 스키마 하나를 정의하고, TS 타입을 추론한 다음, safeParse로 검증하고, 일관된 400 오류를 위해 미들웨어에 연결하십시오.
AI 튜터와 함께 TypeScript을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 101
- 레슨
- 352
자주 묻는 질문
“zod를 사용한 스키마 검증과 TS 추론” 강의는 무료인가요?
네 — “zod를 사용한 스키마 검증과 TS 추론” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“zod를 사용한 스키마 검증과 TS 추론”에서 뭘 배우나요?
zod로 요청을 검증하고 스키마에서 TypeScript 타입을 추론하며, 안전한 미들웨어와 오류 처리를 추가합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 2번째 강의입니다.
“zod를 사용한 스키마 검증과 TS 추론” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 라우터 처리기와 Request/Response 타이핑
- zod를 사용한 스키마 검증과 TS 추론
- 오류 미들웨어와 결과 타입