JSON 스키마를 생성하는 방법
- 대표적인 JSON 예시를 붙여넣습니다. 항목이 여러 개인 배열을 넣으면 항목들이 하나의 스키마로 병합되므로 가장 좋은 결과를 얻을 수 있습니다.
- 스키마 버전(draft 2020-12 또는 draft-07)을 고르고, 속성을 필수로 지정할지, 형식을 감지할지, 추가 속성을 허용하지 않을지 선택합니다.
- 스키마를 복사하거나 다운로드한 뒤 직접 다듬습니다. 예를 들어 설명(description), 열거값(enum), 최솟값과 최댓값을 추가할 수 있습니다.
생성기가 추론하는 항목
| JSON 예시 | 스키마 |
|---|---|
"ada@example.com" | {"type": "string", "format": "email"} |
"2026-05-01T10:00:00Z" | 형식 date-time(그 밖에 date, time, uri, uuid, ipv4 지원) |
42 / 4.5 | "integer" / "number" |
| 모든 객체에 있는 키 | required에 포함 |
| 일부 배열 항목에 없는 키 | 선택 사항(required에 포함되지 않음) |
[1, "a", null] | "items": {"type": ["string", "integer", "null"]} |
| 객체와 일반 값이 섞인 경우 | 종류별 스키마를 하나씩 담은 anyOf |
JSON 스키마(JSON Schema)란?
JSON Schema는 JSON 데이터의 구조를 기술하고 검증하기 위한 어휘입니다. 어떤 속성이 있는지, 각 속성의 타입은 무엇인지, 어떤 속성이 필수인지, 어떤 값이 허용되는지를 정의합니다. OpenAPI의 API 명세, 설정 파일, 폼 생성, AI 모델의 구조화된 출력 검증 등에 사용됩니다. 현재 버전은 2020-12이며, 많은 오래된 도구는 여전히 draft-07을 지원합니다. 명세는 json-schema.org에 공개되어 있습니다.
생성된 스키마 다듬기
title과description을 추가해 각 필드의 의미를 문서화하세요.enum,minimum,maximum,maxLength,pattern으로 값을 제한하세요.- 추가 속성 허용 안 함(
additionalProperties: false)을 선택하면 알 수 없는 키를 거부합니다. - JavaScript에서는 Ajv, Python에서는
jsonschema패키지로 데이터를 검증하세요.
자주 묻는 질문
어떤 JSON 스키마 버전을 사용해야 하나요?
새 프로젝트에는 draft 2020-12를 사용하세요. 현재 버전이며 OpenAPI 3.1의 기반입니다. 사용하는 검증기나 도구가 아직 2020-12를 지원하지 않는다면 draft-07을 선택하세요.
왜 모든 속성이 필수로 지정되나요?
예시 객체가 하나뿐이면 모든 속성이 존재하므로 전부 필수로 표시됩니다. 다양한 예시를 여러 개 담은 배열을 사용하거나 속성을 필수(required)로 지정 옵션을 끄세요.
생성기가 enum이나 값의 범위도 감지하나요?
아니요. 예시 하나만으로는 일반적으로 어떤 값이 허용되는지 알 수 없으므로 enum, 최솟값·최댓값, 패턴은 직접 추가해야 합니다.
스키마로 JSON을 검증하려면 어떻게 하나요?
JavaScript용 Ajv나 Python용 jsonschema 같은 검증 라이브러리를 사용하세요. 많은 코드 편집기도 $schema 속성에 지정된 스키마로 JSON 파일을 검증해 줍니다.