ToolActToolAct

JSON Schema 생성기

JSON 데이터에서 표준 준수 JSON Schema 정의를 자동으로 생성

JSON 입력
행 수: 1 | 문자 수: 0
JSON Schema 출력
// JSON Schema가 자동으로 생성됩니다
속성: 0 | 행 수: 1

구성 옵션

Schema ID
Schema의 고유 식별자를 설정합니다. 일반적으로 URI 형식을 사용하며 대규모 시스템에서 Schema를 참조하고 식별하는 데 사용됩니다
모든 필드 필수
활성화하면 모든 속성이 required 배열에 추가되어 이 필드들이 데이터에 반드시 존재해야 합니다
기본값 추가
샘플 JSON의 실제 값을 기반으로 default 속성을 자동 생성합니다. 기본값이 필요한 설정 파일에 유용합니다
필드 설명 추가
각 속성에 description 필드를 자동으로 추가하여 데이터 타입과 출처를 설명합니다. 문서 생성에 도움이 됩니다
엄격 모드
additionalProperties: false를 활성화하여 Schema에 정의되지 않은 추가 속성을 금지하고 데이터 구조의 엄격한 일관성을 보장합니다

JSON Schema란 무엇인가요?

JSON Schema는 JSON 데이터 구조를 설명하고 검증하기 위한 사양입니다. 구조, 데이터 타입, 제약 조건에 대한 규칙을 정의하며 API 검증, 폼 검증, 설정 파일 검증 등에 널리 사용됩니다.

JSON Schema로 할 수 있는 것:

  • 데이터 검증: JSON 데이터가 예상 형식과 제약 조건에 맞는지 확인
  • 문서 생성: API 문서와 타입 정의 자동 생성
  • 코드 인텔리전스: IDE에서 스마트 완성 및 타입 검사 획득
  • 자동화 테스트: 테스트에서 응답 데이터 형식 자동 검증

이 도구는 JSON Schema Draft-07 사양을 지원하며 중첩 객체, 배열 타입, 열거값 등 복잡한 구조를 지능적으로 추론합니다.

사용 방법

사용 방법

  1. 왼쪽 입력 상자에 JSON 데이터를 붙여넣거나, 샘플을 클릭하여 예제 데이터를 불러오세요
  2. 옵션을 설정하세요: Schema ID 설정, 모든 필드 필수 여부 선택, 기본값 추가 등
  3. 오른쪽에 해당 JSON Schema 정의가 자동으로 생성됩니다
  4. 복사를 클릭하여 생성된 Schema를 클립보드에 복사하세요
  5. API 검증, 폼 검증 또는 구성 파일 검증에 Schema를 사용하세요

Schema 팁

  • 생성된 스키마는 제공한 샘플 JSON을 반영하므로, 결과를 복사하기 전에 대표적인 선택적 필드, null 값, 배열 및 엣지 케이스를 포함하세요.
  • 필수 필드와 숫자/문자열 형식을 수동으로 검토하세요. 샘플 기반 추론은 항상 비즈니스 규칙을 알 수 없습니다.

활용 사례

실제 API 샘플에서 초안 스키마 작성하기대표적인 JSON 응답을 붙여넣으면 객체 속성, 기본 타입, 중첩 배열, 기본값, 필수 필드를 포함한 draft-07 스키마를 생성합니다. 백엔드와 프론트엔드 팀이 엣지 케이스를 수동으로 다듬기 전에 구체적인 출발점을 얻을 수 있습니다. 실제 샘플은 required와 optional 구분, 열거값 멤버십을 데이터에서 직접 추론하므로 추측보다 정확합니다.
설정 파일 문서화하기내부 설정 예제의 경우 기본값과 설명을 활성화하면 에디터와 문서에서 바로 유용한 스키마가 생성됩니다. strict 모드를 사용하면 additionalProperties: false가 추가되어 의도치 않은 키를 쉽게 잡을 수 있습니다. 스키마를 CI 검사와 연결하여 설정 파일이 계약을 벗어날 때 실패하도록 만드세요.
검증 작업 전에 데이터 구조 파악하기생성기는 속성 수를 보고하고 샘플 항목에서 배열을 추론하여 페이로드의 대략적인 범위를 빠르게 파악할 수 있게 해줍니다. 실시간 샘플은 있지만 공식 계약이 아직 작성되지 않은 첫 번째 스키마 작성에 특히 실용적입니다. 구조가 파악되면 타입 생성기에 스키마를 전달하여 더 강력한 타입 바인딩을 얻으세요.
nullable 및 required 힌트로 추론 타입 보완하기strict와 nullable 옵션을 사용하면 생성된 draft-07 스키마가 모든 키가 항상 존재한다고 가정하지 않고 선택 필드를 올바르게 표시합니다. 결과 required 배열은 수동으로 검토하세요. 하나의 샘플 값만 누락되어도 서버에서 실제로 필수인 필드가 숨겨질 수 있습니다. nullable 처리를 required와 별도로 토글하면 null을 허용하지만 여전히 기대되는 필드를 정확하게 모델링할 수 있습니다.
draft-07과 2020-12 구분 및 열거값 추론 확인하기이 생성기는 기본적으로 JSON Schema draft-07을 출력하며, 이는 Ajv, jsonschema, 폼 라이브러리에서 여전히 가장 널리 지원됩니다. 새 프로젝트는 if/then/else, prefixItems, const 키워드를 사용하기 위해 수동으로 2020-12로 업그레이드할 수 있습니다. 열거값 추론은 휴리스틱 기반으로, 문자열 필드가 샘플에서 약 10개 미만의 고유 값을 가질 때 자동으로 enum으로 승격됩니다. status처럼 자유 형식이어야 하는 필드는 반드시 확인하세요. 생성된 draft-07 스키마를 초안으로 취급하고, 소비 라이브러리가 지원하면 변환기로 2020-12로 변환하세요.

기술 원리

JSON Schema는 여러 IETF 초안(Draft 4 / 6 / 7 / 2019-09 / 2020-12)에 걸쳐 정의된 JSON 문서 주석 및 검증을 위한 선언적 어휘입니다. 최신 버전은 Draft 2020-12로, 7가지 기본 타입(string, number, integer, boolean, array, object, null), 개방형 형식 어휘(email, uri, date-time, uuid, ipv4, hostname 등), 그리고 수십 가지 제약 키워드를 정의합니다. 제약 키워드에는 pattern(정규식), minimum/maximum/exclusiveMinimum/exclusiveMaximum(숫자 범위), minLength/maxLength(문자열 길이), minItems/maxItems/uniqueItems(배열 제약), required(객체 수준의 필수 배열), additionalProperties(추가 필드 허용 여부), enum과 const(허용 값), $ref(하위 스키마 재사용) 등이 있습니다. 이 페이지는 기본적으로 Draft 2020-12 출력을 생성하며, 드롭다운에서 구 Draft-07(프로덕션 스키마에서 여전히 가장 일반적)을 선택할 수 있습니다. 생성기의 추론은 사용자가 제공한 JSON을 한 번 순회하며 스키마 객체를 재귀적으로 구축합니다. 추론의 핵심 매핑은 다음과 같습니다: 정수(Number.isInteger이고 소수부 없음) -> {type: 'integer'}, 실수 -> {type: 'number'}, 문자열 -> {type: 'string'}, 불리언 -> {type: 'boolean'}, 배열 -> {type: 'array', items: <첫 번째 요소에 재귀>} 또는 Draft 2020-12의 튜플을 위한 {type: 'array', prefixItems: [...]}, 객체 -> {type: 'object', properties: <각 키에 재귀>}, null -> {type: 'null'}. 혼합 요소 타입의 배열에 대해 생성기는 관찰된 각 타입을 포함하는 oneOf 하위 스키마를 출력합니다. 여러 샘플 객체의 경우, 생성기는 비교하여 required 목록을 조립합니다. 모든 샘플에 존재하는 키는 필수, 어떤 샘플에서든 누락된 키는 선택 사항입니다. 샘플이 특정 값에 집중될 때 패턴과 제약이 추론됩니다. 필드의 모든 숫자가 [1, 100] 범위에 있으면 {type: 'integer', minimum: 1, maximum: 100}을 출력하고, 문자열 필드가 항상 UUID이면 format: 'uuid' 태그와 pattern: '^[0-9a-f]{8}-...' 정규식을 출력합니다. 열거형 휴리스틱은 문자열 필드가 샘플 전반에 걸쳐 10개 이하의 고유 값을 가질 때 작동합니다(예: role: 'admin' | 'editor' | 'viewer' 모두 관찰됨). 이 경우 생성기는 enum 배열을 출력합니다. 깊이 중첩된 객체와 재귀 구조는 $defs 섹션(Draft 2020-12; 구 $definitions는 Draft-07 키워드)으로 추출되고 $ref를 통해 참조됩니다. 재귀 구조(예: 'children' 필드가 트리 노드 타입인 트리 노드)는 부모의 $defs 항목을 가리키는 스텁 $ref를 가지며, 검증기는 검증 시 이를 해석합니다. 생성기는 자동으로 적절한 ref-vs-inline 트레이드오프를 선택합니다. 얕은 스키마는 인라인으로 유지되고, 깊은 스키마는 출력의 가독성을 유지하기 위해 정의로 분리됩니다. 생성된 스키마는 주어진 입력에 대해 결정론적입니다. 동일한 JSON 샘플은 항상 동일한 스키마를 생성하며, 생성기는 원격 호출 없이 순수 JavaScript로 구현됩니다.

  • 타입 추론 규칙: 정수 -> integer, 실수 -> number, 문자열 -> string, 불리언 -> boolean, 배열 -> array + items, 객체 -> object + properties. JSON null -> type: null(Draft 6+) 또는 type: 'null' 문자열.
  • 필수 필드 감지: 모든 샘플 객체를 비교하여 모든 객체에 존재하는 필드는 필수로 취급되어 required 배열에 추가. 누락된 필드는 선택 사항. 단일 샘플 입력은 required: []를 남김(휴리스틱에 최소 2개 샘플 필요).
  • 열거형 추론 휴리스틱: 필드가 샘플 전반에 걸쳐 적은 수의 고유 문자열 값을 가질 때(카디널리티 <= 10) 자동으로 enum 제약으로 인식. 더 큰 카디널리티는 일반 문자열 타입으로 유지.
  • 자동 감지 형식: 문자열 시그니처를 기반으로 email, uri, date-time, uuid 같은 형식 힌트가 문서화와 검증을 위해 태그됨. format 키워드는 Draft 2020-12에서 정보 제공용이며, 검증자는 이를 강제하거나 무시할 수 있음.
  • 중첩 $ref 추출: 깊이 중첩된 객체는 내부 $defs(Draft 2020-12 키워드; 구 $definitions는 Draft 7)로 추출되고 $ref를 통해 참조되어 스키마가 너무 장황해지는 것을 방지. 재귀 구조는 부모의 $defs 항목을 가리키는 스텁 $ref를 받음.
  • 제약 확장: 기본 타입 외에도 minimum/maximum(숫자 범위), minLength/maxLength(문자열 길이), pattern(정규식) 등의 제약을 추가할 수 있음. 입력 샘플이 특정 값에 집중될 때 생성기가 이를 출력.
  • 드래프트 선택: 2020-12(최신)가 기본값이며 $defs 사용. 2019-09도 $defs 사용. Draft-07은 $definitions를 사용하며 대부분의 기존 도구가 여전히 이를 출력. Draft 6는 필수 필드를 속성의 형제 속성으로가 아닌 부모의 required 배열에 나열하는 strict-required 시맨틱스를 도입.
  • 조합 키워드(Draft 2019-09+): allOf(모든 하위 스키마에 매칭), anyOf(최소 하나), oneOf(정확히 하나), not(매칭 불가). 샘플 값이 두 개의 분리된 하위 스키마(예: integer vs string)에 맞을 때 생성기는 oneOf를 선택.

예시

단순 객체 -> Schema

{"name": "Alice", "age": 25}
->
{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" }
  },
  "required": ["name", "age"]
}

배열을 포함한 Schema

{"tags": ["js", "ts"]}
->
{
  "type": "object",
  "properties": {
    "tags": {
      "type": "array",
      "items": { "type": "string" }
    }
  }
}

Enum을 포함한 Schema

{"role": "admin"}
->
{
  "type": "object",
  "properties": {
    "role": { "type": "string", "enum": ["admin", "user", "guest"] }
  }
}

자주 묻는 질문

JSON Schema가 뭔가요?

JSON Schema(현재 2020-12 드래프트)는 JSON 문서를 검증하기 위한 어휘입니다. 어떤 필드가 있는지, 그 타입, 범위, 패턴은 어떤지 등 문서의 기대 형태를 기술하며, XML Schema나 TypeScript 타입과 비슷한 역할을 합니다. Ajv, Hyperjump를 비롯한 대부분의 API 프레임워크가 런타임 검증에 활용합니다.

생성기는 어떤 JSON Schema 드래프트로 출력하나요?

최신 드래프트(보통 2020-12 또는 draft-07)를 사용합니다. 출력은 버전을 선언하는 $schema, 필요 시 $id, type, 그리고 객체/배열/문자열/숫자/불리언/null에 맞는 키워드로 시작합니다. 검증기가 특정 구버전을 요구한다면 드래프트 옵션을 바꿔 주세요.

JSON 샘플에서 타입은 어떻게 추론하나요?

샘플을 순회하며 각 속성의 타입을 기록합니다. 배열의 경우 한 개 이상의 요소에서 items 스키마를 추론하며(요소 타입이 다르면 합집합), 여러 타입이 섞인 속성은 oneOf나 anyOf로 표현합니다. 결과는 너그러운 출발점이므로, required, minLength, pattern 같은 제약은 직접 다듬어야 합니다.

모든 속성이 required로 표시되나요?

설정에 따라 달라집니다. 기본값은 관찰된 모든 속성을 required로 표시하는 것입니다. 샘플이 단지 한 예시일 뿐이고 다른 인스턴스에서는 일부 필드가 빠질 수 있다면 'all optional' 옵션을 켜세요. 생성 후 required 배열을 직접 수정해도 됩니다.

중첩된 객체와 배열은 어떻게 처리되나요?

중첩 객체는 중첩된 'properties' 블록이 되고, 배열은 'items' 정의가 됩니다. 깊은 중첩도 잘 동작합니다. 같은 형태가 반복적으로 나타난다면 이후에 $defs / $ref로 리팩터링할 수 있지만, 생성기는 자동으로 중복을 제거하지는 않습니다.

추론할 수 없는 항목은요?

포맷 제약(date-time, email, uuid), enum 멤버십, 정규식 패턴, minimum/maximum, minItems/maxItems, 의존 관계 등은 단일 샘플로는 알 수 없으므로 직접 추가해야 합니다. 생성된 스키마는 골격으로 삼고 거기서부터 다듬으세요.

JSON이 업로드되나요?

아니요. 추론은 로컬에서 동작합니다. 붙여 넣은 JSON은 브라우저 밖으로 나가지 않습니다.