
ChatGPT/Gemini API 호출 시 '타입' 안정성을 원하는 사람들을 위한 Zod
요약
LLM의 출력을 프로그램에서 안전하게 다루기 위해 Zod를 활용한 스키마 검증 방법을 소개합니다. 단순히 JSON 모드를 사용하는 것만으로는 런타임 안정성을 보장할 수 없으며, Zod는 실제 데이터 구조를 검사하여 오류 발생 시 정확한 원인을 알려줍니다.
핵심 포인트
- LLM 출력의 불안정성(런타임 에러)을 방지하는 것이 중요합니다.
- Zod 스키마를 사용하면 런타임에서 데이터 구조를 안전하게 검증할 수 있습니다.
- 스키마 정의와 타입 추론이 가능하여 코드 관리가 용이합니다.
최근에는 LLM(대규모 언어 모델)의 출력을 그대로 프로그램에서 다루고 싶은 경우가 늘어나고 있습니다.
하지만 AI의 답변은 가끔 포맷이 깨지거나 불필요한 프로퍼티가 섞여서 '런타임 에러로 죽는' 것이 가장 무섭습니다.
이럴 때 유용한 것이 Zod를 사용한 스키마 검증(Schema Validation)입니다.
이번 글에서는 TypeScript 프로젝트에서 LLM의 응답을 안전하게 받는 방법을 간단히 소개하겠습니다.
왜 Zod인가?
LLM에게 JSON 모드로 응답하도록 요청하고 타입 정의(interface)를 지정하는 것만으로도 작동은 합니다.
하지만 그것은 어디까지나 '에디터 상의 안정성'일 뿐, 실제로 돌아온 데이터가 올바르다는 보장은 없습니다.
Zod를 사용하면:
- 런타임에서 구조를 검사할 수 있습니다.
- 타입 정의를 Zod 스키마로부터 역추적(
z.infer)할 수 있어, 이중 관리가 필요하지 않습니다. - 만일의 경우 구조가 다르면, 어디가 잘못되었는지 에러를 알려줍니다.
구현 예시
예를 들어, 요리 레시피를 생성하는 AI 기능을 가정해 보겠습니다.
1. 스키마 정의하기
먼저, 원하는 데이터의 형태를 Zod로 정의합니다.
import { z } from "zod";
const RecipeSchema = z.object({
title: z.string(),
// ...
2. LLM 출력을 파싱하기
API에서 돌아온 문자열(JSON)을 safeParse 하는 것이 핵심입니다.
async function getRecipeFromAI(prompt: string) {
// LLM API를 호출하는 처리 (의사 코드)
const response = await callLLM(prompt);
// ...
요약
LLM과 프로그래밍의 경계에는 필연적으로 '불확실성'이 따릅니다.
그 부분을 Zod라는 방패로 막아주기만 해도, 개발 스트레스가 크게 줄어들기 때문에 추천합니다!
'AI가 거짓말을 하는 것'은 막을 수 없어도, 'AI가 프로그램을 망가뜨리는 것'은 막을 수 있습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기