Skip to main content
PromptQuorumPromptQuorum
Home/Prompt Engineering/LLM의 구조화된 출력: JSON 모드, 예시 및 사용 시점
Techniques

LLM의 구조화된 출력: JSON 모드, 예시 및 사용 시점

·10분 분량·By Hans Kuepper · Founder of PromptQuorum, multi-model AI dispatch tool · PromptQuorum

구조화된 출력과 JSON 모드는 언어 모델의 자유형 결과물을 신뢰할 수 있는 기계 판독 가능한 형식으로 변환하여 데이터베이스, API 및 자동화 워크플로우에 원활하게 통합될 수 있도록 합니다. 유효한 JSON을 강제하는 프롬프트를 설계하는 방법, JSON 모드와 함수 호출 및 스키마 프롬프팅을 비교하는 방법, 그리고 사용 사례에 적합한 방법을 결정하는 방법을 학습하십시오.

Key Takeaways

  • 신뢰성 향상: 구조화된 출력은 엄격한 스키마를 강제하여 파싱 오류와 수동 데이터 정리를 줄입니다.
  • 자동화 활성화: JSON 모드는 추출된 필드(우선순위, 범주, 긴급도)를 기반으로 조건부 논리를 트리거합니다.
  • API 준비 완료: 재포맷 없이 데이터베이스, CRM 및 비즈니스 시스템과 직접 통합됩니다.
  • 모델 의존적: 기본 JSON 모드는 GPT-5.6, Claude, Gemini에서 사용 가능합니다. 이전/오픈 소스 모델은 프롬프트 엔지니어링이 필요합니다.
  • 결정론적 작업에 최적: API, 자동화, 데이터 파이프라인. 창의적 글쓰기는 피하십시오.
  • 검증 필요: 다운스트림 사용 전에 항상 JSON 출력을 파싱하고 검증하십시오.
  • 모델 간 확장 가능: 스키마를 한 번 정의하고 OpenAI, Anthropic, Google 및 오픈 소스 제공업체 간의 차이를 테스트하고 문서화하십시오.

구조화된 출력은 언어 모델이 사전 정의된 형식(예: JSON)으로 데이터를 반환하도록 강제하는 방법으로, 신뢰할 수 있는 파싱, 자동화 및 소프트웨어 시스템 통합을 가능하게 합니다. 자유 형식 텍스트와 달리 다운스트림 도구가 수동 정리 없이 처리할 수 있는 엄격한 필드 이름, 데이터 유형 및 스키마를 강제합니다.

다음은 JSON 형식의 구조화된 출력의 간단한 예시입니다:

json
{
  "task": "summarize",
  "title": "Quick AI Guide",
  "summary": "This article explains structured output and JSON mode.",
  "key_points": ["JSON enforces format", "Reduces parsing errors", "Enables automation"],
  "audience_level": "intermediate",
  "confidence": 0.95
}

구조화된 출력이란

구조화된 출력은 다운스트림 도구가 결과를 안정적으로 파싱할 수 있도록 모델에 목록, 표 또는 JSON과 같은 고정된 스키마를 따르도록 요청하는 것을 의미합니다. 자유 형식 단락 대신 필드, 유형 및 허용된 값을 정의합니다.

구조화된 출력은 여러 형태를 취할 수 있습니다:

  • 고정된 수의 항목이 있는 글머리 기호 목록.
  • 특정 열이 있는 Markdown 표.
  • 단순 속성을 위한 키-값 쌍.
  • 사전 정의된 키가 있는 완전한 JSON 객체 또는 배열.

목표는 항상 동일합니다: 모호한 설명("회의에 대한 몇 가지 메모")을 예측 가능한 형태("제목, 날짜, 참석자, 결정사항, 위험요소")로 변환하는 것입니다.

JSON 모드란

JSON 모드는 모델이 유효한 JSON만 반환하도록 지시 또는 구성되는 구조화된 출력의 더 엄격한 변형입니다. JSON 모드에서는 모델이 출력하는 모든 것이 추가 정리 없이 JSON으로 파싱 가능해야 합니다.

일반적인 JSON 스키마는 다음과 같습니다:

json
{
  "title": "string",
  "summary": "string",
  "tags": ["string"],
  "priority": "low | medium | high"
}

프롬프트에 해당 스키마를 반영하고 모델에 채우도록 요청합니다. 일부 플랫폼은 추가 주석을 줄이기 위해 JSON 전용 응답을 강제하는 특수 설정 또는 API도 제공합니다.

구조화된 출력과 JSON 모드가 중요한 이유

구조화된 출력과 JSON 모드가 중요한 이유는 단순한 채팅 도우미가 아닌 더 큰 시스템의 구성 요소로 언어 모델을 변환할 수 있기 때문입니다. 출력이 예측 가능하면 다음을 수행할 수 있습니다:

  • 결과를 데이터베이스, CRM 또는 분석 도구에 직접 제공합니다.
  • `priority`, `status` 또는 `confidence`와 같은 필드를 기반으로 자동화를 트리거합니다.
  • 수동 포맷 없이 카드, 표 또는 대시보드에 모델 결과를 표시하는 UI를 구축합니다.

또한 프롬프트 디버깅을 더 쉽게 만듭니다. 구조가 깨지면 문제가 프롬프트나 스키마에 있다는 것을 알 수 있으며, "품질"이라는 모호한 차원이 아닙니다.

JSON 모드 vs 함수 호출 vs 스키마 프롬프팅

LLM에서 구조화된 출력을 얻기 위한 세 가지 방법이 존재합니다. 각각은 서로 다른 강점과 약점을 가지고 있습니다:

  • JSON 모드: 모델이 유효한 JSON만 출력합니다. 최적 용도: 데이터 추출, 분류, 요약. 제약사항: 출력 형식에만 제한되며 도구 실행 없음.
  • 함수 호출: 모델이 호출할 함수를 선택하고 JSON으로 인수를 제공합니다. 최적 용도: API 통합, 도구 사용, 에이전틱 워크플로우. 제약사항: 사전 정의된 함수 스키마 필요.
  • 스키마 프롬프팅: 모델에 스키마를 따르도록 요청하는 명시적 지시사항과 예시. 최적 용도: 유연성, 오픈 소스 모델, 사용자 지정 형식. 제약사항: ~80–85% 신뢰성, API 수준 보장 없음.

예시: 자유 텍스트 vs 구조화된 JSON

동일한 작업에 대한 자유 형식 프롬프트와 구조화된 JSON 프롬프트를 비교하면 차이가 명확해집니다. 여기서는 고객 이메일을 분류하고 요약합니다.

나쁜 프롬프트

"이 고객 이메일을 읽고 그들이 원하는 것을 요약하십시오."

좋은 프롬프트 – JSON 모드

"귀하는 고객 지원 담당자입니다. 아래 고객 이메일을 읽고 핵심 정보를 JSON 객체로 추출하십시오. 요구사항: 큰따옴표 키와 문자열 값을 사용하여 유효한 JSON만 출력하십시오. JSON 외부에 설명이나 추가 텍스트를 포함하지 마십시오. 값이 누락된 경우 빈 문자열을 사용하십시오. JSON 스키마: { "issue_type": "string", "urgency": "low | medium | high", "summary": "string (최대 25 단어)", "customer_sentiment": "negative | neutral | positive" } 고객 이메일: 이메일 텍스트 여기에 붙여넣기"

"좋은" 버전은 스키마, 유효한 값 및 JSON 전용 요구사항을 정의하여 출력을 파싱하고 다른 시스템에서 사용하기 쉽게 만듭니다.

구조화된 출력과 JSON 모드의 모범 사례

신뢰할 수 있는 구조화된 출력을 얻으려면 프롬프트에서 명시적이고 일관되며 엄격해야 합니다. 몇 가지 관행이 많은 도움이 됩니다:

  • 열거형에 대한 허용된 값을 포함하여 예상하는 정확한 스키마를 표시하십시오.
  • JSON(또는 구조) 외에는 아무것도 반환되어서는 안 된다는 것을 명확히 명시하십시오.
  • 짧고 명확한 키 이름을 사용하십시오(예: `issue_type`, `urgency`, `summary`).
  • 작업이 복잡하거나 민감한 경우 유효한 출력의 예시를 추가하십시오.
  • 중첩된 구조의 경우 단계별로 구성하고 실제 입력으로 테스트하십시오.
  • 스키마를 프롬프트에 직접 인코딩하는 SPECS와 같은 명세 중심 프레임워크나 형식 제약이 있는 RTF를 사용하십시오.

여전히 포맷 문제가 발생하면 "확실하지 않은 경우 추측하는 대신 필드를 빈 문자열로 남겨두십시오."와 같은 간단한 지시사항을 추가할 수 있습니다. 구조화된 출력은 추출된 데이터를 팩트 체크하기 위한 RAG(검색 증강 생성)와 결합할 때 가장 잘 작동합니다. 추출된 데이터가 사내 인프라를 벗어날 수 없는 경우, 동일한 JSON 모드 패턴을 온프레미스 벡터 저장소에 연결할 수 있습니다.

모델 비교: 제공업체별 JSON 준수

다양한 모델은 기본 JSON 모드 지원 수준이 다릅니다. 2026년 4월 기준, 주요 제공업체의 순위는 다음과 같습니다:

모델기본 JSON 모드프롬프트 전용 준수비고
OpenAI GPT-5.6예 (강제)불필요JSON 모드의 업계 표준; 99%+ 성공률.
Anthropic Claude Sonnet 5예 (강제)불필요우수한 JSON 준수; 복잡한 중첩 구조 지원.
Google Gemini 2.0예 (강제)불필요기본 JSON 지원; 빠른 추론.
Meta Llama 3.3 70B부분적강력 권장오픈 소스; 상세한 프롬프트와 예시로 잘 작동.
Mistral Large부분적권장양호한 JSON 동작; 특정 스키마로 테스트하십시오.
이전 GPT-3.5, Claude 2아니요필요강력한 프롬프트 엔지니어링 필요; ~80–85% 성공률.
소규모 오픈 소스 모델 (<13B)아니요예시와 함께 필요상세한 스키마와 여러 예시 필요; ~60–70% 성공률.

규제 환경에서의 구조화된 출력

구조화된 출력은 일관된 데이터 추출, 감사 추적 및 규정 준수 문서를 강제하기 때문에 규제된 산업에서 특히 가치 있습니다. 지역마다 다른 요구사항이 있습니다:

  • EU (GDPR, AI 법): 구조화된 출력은 체계적인 데이터 분류 및 삭제권 추적을 가능하게 합니다. JSON 모드를 사용하면 어떤 필드에 개인 데이터가 포함되는지 태그를 지정하여 DPIA 및 규정 준수 감사를 용이하게 합니다.
  • 일본 (METI AI 지침, APPI): 명확한 스키마 정의가 있는 구조화된 추출은 투명성 및 책임 요구사항을 지원합니다. 일본의 AI 법 준수는 종종 데이터 처리 방식을 문서화하도록 요구하며, 구조화된 출력은 명확한 감사 추적을 제공합니다.
  • 중국 (CAC 규정, 데이터 보안법): 구조화된 출력은 콘텐츠 조정 및 데이터 거주 로깅에 도움이 됩니다. JSON 모드를 사용하면 CAC 표준 준수를 위해 민감한 콘텐츠(금융 데이터, 개인 정보)를 체계적으로 분류할 수 있습니다.

일반적인 실수

구조화된 출력과 JSON 모드를 구현할 때 다음과 같은 빈번한 오류를 피하십시오:

  • 모호한 스키마: 스키마를 정의하지 않고 "핵심 포인트를 추출하십시오"라고 말하면 일관성 없는 출력이 발생합니다. 항상 정확한 필드 이름, 유형 및 제약 조건을 지정하십시오.
  • 누락된 예시: 예시 없이 스키마 설명만 제공하면 20–30% 실패율이 발생합니다. 항상 유효한 출력의 1–3개 예시를 제시하십시오.
  • 출력 검증 실패: 모델이 항상 유효한 JSON을 반환할 것이라고 가정하면 프로덕션에서 파싱 오류가 발생합니다. 항상 검증하고 파싱 실패를 우아하게 처리하십시오.
  • 에지 케이스 미처리: 누락되거나 모호하거나 범위를 벗어난 필드는 정의된 대체 동작(null, 빈 문자열 또는 기본값)이 있어야 합니다.
  • 쉬운 입력으로만 테스트: 실제 데이터는 지저분합니다. 에지 케이스로 스키마를 테스트하십시오: 불완전한 이메일, 특수 문자, 혼합 언어, 매우 긴 입력.

JSON 모드 vs 대안 사용 시점

엄격한 스키마 적용 및 결정론적 출력이 필요할 때 JSON 모드를 선택하십시오. 창의성과 개방형 추론이 중요할 때는 피하십시오.

  • ✓ JSON 모드 사용: 엄격한 스키마 필요, 자동화 파이프라인, API 통합, 데이터 추출, 분류 작업, 결정론적 출력, 검증이 필요한 프로덕션 시스템.
  • ✗ JSON 모드 피하기: 창의적 글쓰기, 개방형 추론, 브레인스토밍, 에세이, 코드 생성(함수 호출이 더 나음), 철학적 질문, 서술적 콘텐츠.
  • 대안: 함수 호출 사용 도구 통합 및 에이전틱 워크플로우가 필요할 때(모델이 호출할 함수를 선택).
  • 대안: 스키마 프롬프팅 사용 유연성이 필요하거나 오픈 소스 모델을 사용하거나 API 수준 보장이 필요하지 않을 때.

구조화된 출력을 언제 사용해야 합니까?

구조화된 출력은 세 가지 주요 시나리오에서 빛을 발합니다. 결정론적이고 기계 판독 가능한 결과가 필요할 때 사용하십시오:

  • API 및 통합: LLM 출력을 다운스트림 시스템(데이터베이스, CRM, 대시보드)에 직접 연결합니다. 구조화된 출력은 파싱 오류 및 수동 정리를 방지합니다. 예시: 이메일에서 고객 데이터를 추출하여 CRM에 작성.
  • 자동화 및 워크플로우: 모델 출력 필드(우선순위, 긴급도, 범주)를 기반으로 작업을 트리거합니다. JSON 모드는 조건부 논리를 위한 신뢰할 수 있는 필드 추출을 보장합니다. 예시: 긴급도 수준별로 지원 티켓 라우팅.
  • 데이터 파이프라인: 대규모로 대량 데이터(문서, 이메일, 로그)를 처리합니다. 일관된 스키마는 배치 처리, 검증 및 오류 처리를 가능하게 합니다. 예시: 10,000개의 연구 논문에서 메타데이터를 검색 가능한 데이터베이스로 추출.

구조화된 출력과 JSON 모드 사용 방법

  1. 1
    데이터 추출 및 기계 판독 가능한 출력의 경우 JSON 모드(OpenAI GPT-5.6, Anthropic Claude, Google Gemini 등에서 사용 가능)를 사용하십시오. 이렇게 하면 모델이 산문이 아닌 유효한 JSON을 반환하게 됩니다. 예시: 제품 정보를 키(이름, 가격, 설명, 평점)가 있는 JSON으로 추출.
  2. 2
    필드 이름, 데이터 유형 및 제약 조건을 포함하여 JSON 스키마를 명시적으로 정의하십시오. 예시: { "name": string, "price": number (≥ 0), "in_stock": boolean, "tags": array of strings }.
  3. 3
    원하는 정확한 JSON 구조의 예시를 제공하십시오. 예시: { "issue": "memory leak", "severity": "critical", "suggested_fix": "...", "code_snippet": "..." }. 예시는 스키마 설명보다 더 강력합니다.
  4. 4
    중첩된 구조(배열 내의 객체)의 경우 계층 구조에 대해 명시적으로 설명하십시오. 중첩된 배열을 포함한 완전한 JSON 예시를 제공하십시오.
  5. 5
    다운스트림 시스템에서 사용하기 전에 JSON 출력을 검증하십시오. 반환된 JSON을 파싱하고 확인하십시오: (1) 유효한 JSON 문법, (2) 모든 필수 필드 존재, (3) 데이터 유형이 예상과 일치. 파싱 오류를 우아하게 처리하십시오.

다음은 올바른 계층 구조를 보여주는 중첩된 배열이 있는 완전한 JSON 예시입니다:

json
{
  "articles": [
    {
      "title": "string",
      "author": "string",
      "citations": [
        {
          "title": "string",
          "year": "number"
        }
      ]
    }
  ]
}

관련 읽기

관련 프롬프트 엔지니어링 주제로 지식을 확장하십시오:

자주 묻는 질문

구조화된 출력과 JSON 모드의 차이는 무엇입니까?

구조화된 출력은 모델에 고정된 형식(목록, 표, 키-값 쌍 또는 JSON)으로 데이터를 반환하도록 요청하는 더 넓은 범주입니다. JSON 모드는 종종 모델 제공업체의 API 수준 보장과 함께 유효한 JSON 출력을 강제하는 더 엄격한 변형입니다.

모든 LLM이 JSON 모드를 지원합니까?

아닙니다. OpenAI GPT-5.6, Anthropic Claude Sonnet 5 및 Google Gemini는 기본 JSON 모드를 지원합니다. 이전 모델 및 오픈 소스 LLM은 프롬프트 기반 적용이 필요할 수 있습니다(예: 지시사항과 예시에 스키마 지정).

기본 JSON 모드 없이 JSON 전용 응답을 강제하는 방법은 무엇입니까?

프롬프트 엔지니어링을 사용하십시오: (1) "유효한 JSON만 출력"을 명시적으로 선언, (2) 상세한 스키마와 예시 제공, (3) "JSON 외부에 텍스트를 포함하지 마십시오"와 같은 지시사항 추가. 좋은 예시로 성공률이 크게 향상됩니다.

모델이 유효하지 않은 JSON을 반환하면 어떻게 됩니까?

파서를 사용하여 JSON을 검증하십시오. 실패하면 더 명확한 프롬프트로 요청을 재시도하거나 수동 추출로 되돌아가십시오. 강력한 프롬프트 엔지니어링과 스키마 예시로 실패율이 낮습니다(잘 설계된 프롬프트에서 일반적으로 <5%).

복잡한 문서에 구조화된 출력을 사용할 수 있습니까?

예. 복잡한 작업을 단계로 나누십시오: 먼저 핵심 필드를 추출한 다음 검증하고 선택적으로 다운스트림 시스템으로 변환하십시오. 대용량 문서를 청크로 나누고 별도로 처리하면 신뢰성이 향상되고 토큰 사용량이 줄어드는 경우가 많습니다.

구조화된 출력에서 누락되거나 모호한 데이터를 처리하는 방법은 무엇입니까?

스키마에서 대체 동작을 정의하십시오: 빈 문자열, null 값 또는 "unknown"과 같은 특수 마커를 사용하십시오. 지시사항을 추가하십시오: "값이 모호하거나 누락된 경우 추측하는 대신 null을 사용하십시오."

JSON 모드가 규정 준수(GDPR, CCPA)의 영향을 받습니까?

JSON 모드 자체는 중립적입니다. 그러나 구조화된 출력은 추출, 변환 및 기록된 데이터를 체계적으로 추적할 수 있어 감사 추적 및 규정 보고에 중요하므로 규정 준수에 유익합니다.

JSON 모드 프롬프트를 테스트하는 방법은 무엇입니까?

다양한 입력으로 테스트하십시오: 에지 케이스, 모호한 데이터 및 실제 예시. 출력을 파싱하고 확인하십시오: (1) 유효한 JSON, (2) 올바른 스키마, (3) 예상 데이터 유형. 프로덕션 배포 전 ≥95% 성공률을 목표로 하십시오.

다양한 모델 간에 구조화된 출력 스키마를 재사용할 수 있습니까?

예, 주의를 기울이십시오. 스키마를 한 번 정의하고 모델 간에 테스트하십시오. 이전 또는 소규모 모델에 대한 프롬프트 조정이 필요할 수 있습니다. 모델별 차이점과 성공률을 문서화하십시오.

JSON 모드의 성능 비용은 얼마입니까?

최소한입니다. 기본 JSON 모드(OpenAI, Anthropic, Google)는 성능에 미치는 영향이 미미합니다. 프롬프트 전용 적용은 스키마 설명 오버헤드로 인해 5–10% 지연 시간이 추가될 수 있지만 안전성 향상이 일반적으로 정당화됩니다.

출처

Apply these techniques with a local LLM or your own API keys — PromptQuorum works with any backend.

Try PromptQuorum free →

← Back to Prompt Engineering