0Pricing
TypeScript Academy · 강의

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 ZodError

parse 오류 처리하기

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Zod 스키마 기초
  2. 스키마에서 타입 추론하기
  3. parse와 safeParse 비교
  4. 스키마 조합과 정제
← TypeScript Academy(으)로 돌아가기