JSON만 던지면 TypeScript 타입 정의가 짠! (feat. Zod)

Author: Zzabbis // Date: 2026-02-04

📝 JSON만 던지면 TypeScript 타입 정의가 짠! (feat. Zod)

“백엔드 API 응답이 이렇게 복잡한데, 이걸 언제 다 인터페이스로 만들지?”

interface User { ... } 일일이 치고 계신가요? 중첩된 객체, 배열, 옵셔널 값… 실수하기 딱 좋습니다. API 응답 JSON만 복사해 넣으세요. 완벽한 TypeScript 타입 정의는 물론, 런타임 검증을 위한 Zod 스키마까지 만들어드립니다.


⚡️ 3줄 요약 (TL;DR)

  1. JSON 데이터를 TypeScript Interface/Type으로 변환
  2. 런타임 유효성 검사를 위한 Zod/Yup 스키마 생성
  3. 중첩된 구조(Nested Object)도 완벽 처리

🚀 해결책: “타입 마스터”

아래 PROMPT 내용을 복사해서 사용하세요.

역할 (Role): 너는 TypeScript 생태계에 통달한 수석 개발자야.

상황 (Context): 외부 API로부터 JSON 데이터를 받았는데, 이를 내 프로젝트에서 안전하게 사용하기 위해 타입 정의가 필요해.

요청 (Task):

  1. 아래 JSON 데이터를 기반으로 TypeScript Interface를 작성해줘. (이름은 파스칼 케이스로)
  2. 런타임 검증을 위해 **Zod 스키마(Schema)**도 함께 작성해줘.
  3. Zod 스키마로부터 타입을 추론(z.infer)하는 코드도 포함해줘.

JSON 데이터:

[여기에 JSON 데이터를 붙여넣으세요]

제약사항 (Constraints):

  • 모든 필드는 기본적으로 필수(required)로 가정하되, null이 포함된 경우에만 옵셔널(?)로 처리해.
  • 배열 안에 있는 객체도 별도의 인터페이스로 분리해서 정의해줘.
  • JSDoc 주석을 달아서 각 필드가 무엇인지(추론해서) 설명해줘.

🧬 프롬프트 해부 (Why it works?)

이 프롬프트가 강력한 이유는 3가지 논리적 장치 때문입니다.

  1. Zod 통합: 정적 타입(TS) 뿐만 아니라 런타임 검증(Zod) 코드까지 한 번에 요청하여 실무 활용도를 높였습니다.
  2. 구조 분리: 중첩된 객체를 하나의 거대한 타입으로 만들지 않고, 서브 타입으로 쪼개달라고 하여 재사용성을 확보했습니다.
  3. 자동 추론: null 값 처리나 주석 작성을 AI의 추론 능력에 맡겨, 단순 변환 이상의 가치를 제공합니다.

📊 증명: Before & After

❌ Before (입력 JSON)

{
  "id": 1,
  "name": "Jay",
  "contact": {
    "email": "jay@test.com",
    "phone": null
  },
  "tags": ["developer", "admin"]
}

✅ After (결과)

import { z } from "zod";

// 1. Zod Schema Definition
export const ContactSchema = z.object({
  email: z.string().email(),
  phone: z.string().nullable().optional(), // null 처리
});

export const UserSchema = z.object({
  id: z.number(),
  name: z.string(),
  contact: ContactSchema,
  tags: z.array(z.string()),
});

// 2. TypeScript Type Inference
/** 사용자 정보 인터페이스 */
export type User = z.infer<typeof UserSchema>;
export type Contact = z.infer<typeof ContactSchema>;

🚨 트러블 슈팅 (안 될 땐 이렇게!)

Q. Zod 말고 그냥 TS 인터페이스만 필요해요. A. 요청 사항에서 Zod 관련 항목을 지우고 “오직 TypeScript Interface만 작성해줘” 라고 하세요.

Q. 모든 필드를 옵셔널(Optional)로 만들고 싶어요. A. “모든 프로퍼티 뒤에 ?를 붙여서 선택적 속성으로 만들어줘” 또는 Zod의 경우 “.partial()을 사용해줘” 라고 요청하세요.


🎯 결론

타입 정의는 안전장치지만, 그걸 만드는 과정이 고통스러워선 안 됩니다. 복붙 한 번으로 안전하고 튼튼한 타입 시스템을 구축하세요! 🍷