Claude API 구조화된 출력(structured outputs) — JSON 스키마로 출력 보장하기

"JSON으로 답해"는 가끔 깨집니다. 구조화된 출력으로 스키마를 보장하는 두 모드(JSON 출력·엄격한 도구), 작동 원리(제약 디코딩), 비호환·주의점을 공식 기준으로 정리합니다.

"결과를 JSON으로만 답해"라고 프롬프트로 부탁해도, 모델이 가끔 마크다운으로 감싸거나 설명을 덧붙여 파싱이 깨질 수 있습니다. 구조화된 출력(structured outputs)은 응답을 정의한 스키마에 맞게 제약해, 바로 파싱 가능한 출력을 보장합니다. 이 글은 두 모드와 작동 원리, 주의점을 공식 기준으로 정리합니다. (공식 문서: docs.claude.com · 기준 시점: 2026년 6월)

"JSON으로 답해" vs 스키마 보장프롬프트로 부탁· 가끔 마크다운으로 감쌈· 잡담·설명이 섞임· 스키마 위반 → 파싱 실패구조화된 출력· 정의한 스키마를 그대로 준수· 바로 파싱 가능한 JSON· 재시도·정규식 파싱 불필요스키마 준수를 "부탁"이 아니라 "보장"으로 · 기준 2026.6

왜 필요한가

프롬프트 엔지니어링만으로 JSON을 강제하면 다음 문제가 남습니다.

  • 응답을 마크다운 코드블록으로 감싸거나 잡담을 덧붙임
  • 형식이 조금만 바뀌어도 정규식 파싱이 깨짐
  • 스키마 위반 시 에러 처리와 재시도가 필요

구조화된 출력은 이를 "부탁"이 아니라 "보장"으로 바꿉니다. 공식 문서도 항상 유효한 JSON이 필요하면 프롬프트 기법 대신 이 기능을 쓰라고 안내합니다.

두 가지 모드

  • JSON 출력(output_format) — 응답 전체를 지정한 JSON 형식으로 받습니다. 데이터 추출·정형 응답에 적합합니다.
  • 엄격한 도구 사용(strict: true) — 도구의 이름과 입력이 스키마를 반드시 따르도록 검증합니다. 복잡한 도구·에이전트 워크플로에 적합합니다.

두 기능은 독립적으로 쓰거나 한 요청에서 함께 쓸 수 있습니다.

어떻게 보장하나

구조화된 출력은 JSON 스키마를 grammar(문법)로 컴파일한 뒤, 생성 단계에서 그 규칙을 벗어나는 토큰이 나오지 않도록 제약합니다(제약 디코딩, constrained decoding). 즉 모델이 스키마를 위반하는 출력을 애초에 만들 수 없습니다. 스키마가 복잡할수록 컴파일이 오래 걸릴 수 있어, 과도하게 큰 스키마는 단순화가 권장됩니다.

쓰는 법

원하는 데이터 형태를 JSON 스키마로 정의해 전달합니다.

# 원하는 출력 형태를 스키마로 정의
schema = {
  "type": "object",
  "properties": {
    "name": {"type": "string"},
    "price": {"type": "number"},
    "in_stock": {"type": "boolean"}
  },
  "required": ["name", "price"]
}
# 이 스키마를 출력 형식(output_format) 파라미터로 전달합니다.
# 정확한 파라미터 형식과 베타 헤더는 공식 문서에서 확인하세요.

SDK를 쓰면 더 쉽습니다. Python은 Pydantic, TypeScript는 Zod로 스키마를 정의할 수 있고, SDK가 지원되지 않는 제약(min·max 등)은 자동으로 단순화하고 설명에 반영해 줍니다(실제 제약은 여러분 코드에서 검증).

두 가지 모드 · 어떻게 보장하나JSON 출력 (output_format)데이터 추출·정형 응답엄격한 도구 (strict: true)도구 이름·입력 스키마 검증JSON 스키마원하는 형태 정의grammar 컴파일규칙으로 변환생성 제약위반 토큰 생성 불가제약 디코딩(constrained decoding) 개념 · 파라미터·상태는 변동 가능 · 기준 2026.6

주의할 점

  • 가용성·상태 변동 — 모델·플랫폼별로 지원 범위가 다르고, 일부는 베타 헤더가 필요할 수 있습니다. 정식 제공(GA) 여부와 대상 모델은 바뀌니 공식 문서가 기준입니다.
  • 비호환 기능 — Citations(인용)와 메시지 프리필(prefilling)은 함께 쓸 수 없습니다(인용과 함께 쓰면 400 오류).
  • 확장 사고와의 트레이드오프 — 추론 과정이 더 중요한 작업이면 확장 사고가 나을 수 있습니다. 문법 제약은 thinking 영역에는 적용되지 않습니다.
  • 스키마 단순화 — 지나치게 복잡한 스키마는 나눠서 단순하게 유지하세요.

관련 가이드

도구 사용의 기본 작동 원리는 Tool Use 가이드, 첫 호출은 Claude API 시작하기, 에러·한도는 에러와 레이트리밋 다루기를 함께 보세요.

구조화된 출력의 파라미터·베타 헤더·지원 모델·정식 제공 여부 등은 변동될 수 있으며, 가장 정확한 정보는 공식 문서(docs.claude.com)에서 확인하시기 바랍니다. 본 사이트는 Anthropic 공식 사이트가 아닙니다.

이어서 읽어보세요

궁금한 점이 있거나 활용법을 나누고 싶나요?

커뮤니티에서 다른 사용자들과 팁과 노하우를 나눠보세요. 더 많은 가이드도 준비되어 있어요.