parse와 safeParse 비교
검증 성공과 실패를 우아하게 처리합니다.
parse와 safeParse 비교은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
검증하는 두 가지 방법
Zod는 두 가지 검증 메서드를 제공합니다. parse는 유효하지 않은 데이터에서 오류를 발생시키고, safeParse는 대신 결과 객체를 반환합니다.
import { z } from "zod";
const schema = z.string();
// schema.parse(x) throws on failure
// schema.safeParse(x) returns { success, ... }parse는 유효하지 않은 데이터에서 오류를 발생시킵니다
parse는 성공하면 검증된 값을 반환하고 실패하면 ZodError를 발생시킵니다. 유효하지 않은 데이터가 정말 예외적인 상황일 때 적합합니다.
import { z } from "zod";
const schema = z.number();
const ok = schema.parse(42); // 42
// schema.parse("nope"); // throws ZodErrorparse 오류 처리하기
parse를 try/catch로 감싸 발생한 오류를 처리하고, 실패한 내용의 세부 정보를 확인할 수 있습니다.
import { z } from "zod";
const schema = z.number();
try {
schema.parse("nope");
} catch (err) {
if (err instanceof z.ZodError) {
console.log("Invalid:", err.issues.length);
}
}safeParse는 결과를 반환합니다
safeParse는 절대 오류를 발생시키지 않습니다. success: true와 data를 포함한 객체나, success: false와 error를 포함한 객체를 반환합니다.
import { z } from "zod";
const schema = z.number();
const result = schema.safeParse("nope");
// result is { success: false, error: ZodError }결과 좁히기
결과는 success를 기준으로 구분되는 유니온입니다. 이를 확인하면 data 또는 error 중 하나로 형식이 좁혀집니다.
import { z } from "zod";
const schema = z.object({ id: z.number() });
const result = schema.safeParse({ id: 1 });
if (result.success) {
console.log(result.data.id); // typed
} else {
console.log(result.error.issues);
}parse를 사용할 때
유효하지 않은 입력이 버그이거나 작업을 중단해야 할 때 parse를 사용합니다. 예를 들어 시작할 때 필수 config를 읽는 경우가 있습니다.
import { z } from "zod";
const configSchema = z.object({ port: z.number() });
const config = configSchema.parse({ port: 8080 });
// Fail fast if config is wrong.safeParse를 사용할 때
유효하지 않은 입력이 예상되며 이를 우아하게 처리하고 싶을 때 safeParse를 사용합니다. 예를 들어 사용자가 제출한 양식 데이터를 검증하는 경우가 있습니다.
import { z } from "zod";
const formSchema = z.object({ email: z.string() });
const r = formSchema.safeParse({ email: 123 });
if (!r.success) {
// Show a friendly validation message
}ZodError 문제 읽기
ZodError에는 각 문제를 설명하는 issues 배열이 있습니다. 각 항목에는 경로, 메시지, 오류 코드가 포함됩니다.
import { z } from "zod";
const schema = z.object({ age: z.number() });
const r = schema.safeParse({ age: "x" });
if (!r.success) {
for (const issue of r.error.issues) {
console.log(issue.path, issue.message);
}
}둘 다 추론된 형식을 반환합니다
성공하면 두 메서드 모두 z.infer<typeof schema>로 지정된 검증된 값을 제공하므로, 이후의 코드도 완전히 형식이 지정됩니다.
import { z } from "zod";
const userSchema = z.object({ name: z.string() });
type User = z.infer<typeof userSchema>;
const u: User = userSchema.parse({ name: "Ada" });
console.log(u.name);올바른 메서드 선택하기
간단한 기준은 다음과 같습니다. 실패 시 실행을 중단해야 하는 신뢰된 경로 또는 중요한 경로에는 parse를 사용하고, 충돌 없이 처리해야 하는 신뢰할 수 없는 입력에는 safeParse를 사용합니다.
import { z } from "zod";
const schema = z.string();
// Critical: schema.parse(value)
// User-facing: schema.safeParse(value)두 방식 조합하기
일반적인 방식은 safeParse를 도우미 함수로 감싸 형식이 지정된 데이터나 서식이 지정된 오류를 반환하도록 하는 것입니다. 그러면 두 메서드의 편리함을 모두 얻을 수 있습니다.
import { z } from "zod";
function validate<T extends z.ZodType>(schema: T, value: unknown) {
const r = schema.safeParse(value);
return r.success ? { ok: true, data: r.data } : { ok: false, error: r.error };
}
// Reusable, no throwing.빠른 확인: parse와 safeParse
parse와 safeParse의 차이에 대한 이해도를 확인해 보세요.
복습: parse와 safeParse
parse는 유효하지 않은 데이터에서 오류를 발생시키고 safeParse는 success/error 결과를 반환한다는 점, 각각을 사용하는 시점, 그리고 ZodError의 문제를 읽는 방법을 배웠습니다.
import { z } from "zod";
const schema = z.object({ id: z.number() });
const r = schema.safeParse({ id: 1 });
if (r.success) console.log(r.data.id);자주 묻는 질문
“parse와 safeParse 비교” 강의는 무료인가요?
네 — “parse와 safeParse 비교” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“parse와 safeParse 비교”에서 뭘 배우나요?
검증 성공과 실패를 우아하게 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“parse와 safeParse 비교” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Zod 스키마 기초
- 스키마에서 타입 추론하기
- parse와 safeParse 비교
- 스키마 조합과 정제