JSON 스키마 생성기

하나 이상의 JSON 샘플을 붙여넣으면 생성기가 새 페이로드를 검증하는 데 사용할 수 있는 JSON 스키마를 추론합니다. 타입을 감지하고, 모든 샘플에 등장하는 필드를 필수로 표시하며, 값이 작은 닫힌 집합에서 나올 때 열거형(enum)을 추론하고, JSON 스키마 draft 2020-12를 준수하는 출력을 생성합니다.

JSON 스키마 생성 방법

  1. 1

    샘플 문서 붙여넣기

    하나 이상의 실제 페이로드를 사용하세요. 다양할수록 추론되는 스키마가 더 정확해집니다.

  2. 2

    드래프트 선택

    draft 2020-12(현행), draft 07(널리 지원됨) 또는 draft 04(레거시 OpenAPI용).

  3. 3

    추론 조정

    enum 추론 전환, 필수 필드 전략(교집합 대 합집합), 그리고 샘플이 하나만 제공될 때 모든 필드를 `required`로 표시할지 여부를 설정합니다.

  4. 4

    생성

    스키마는 `$schema`, `title`, `type`, `properties`와 함께 출력되며, 반복되는 하위 객체에는 중첩된 `$ref`가 부여됩니다.

추론이 잘하는 것

  • 타입: string, number, integer, boolean, null, array, object.
  • null 허용 여부: 한 샘플에서는 null이고 다른 샘플에서는 문자열인 필드는 ["string", "null"]이 됩니다.
  • 배열 항목: 동질적인 배열은 단일 items 스키마를, 이질적인 배열은 prefixItems를 생성합니다.
  • 열거형(enum): 관찰된 모든 값이 작은 집합에 속하면(설정 가능, 기본값 10개의 서로 다른 값) enum을 출력합니다.
  • 필수: 샘플이 여러 개면 키의 교집합이 required가 되고, 샘플이 하나면 옵트아웃하지 않는 한 모든 키가 필수입니다.
  • 포맷: ISO-8601 날짜, 이메일, URI와 일치하는 문자열에는 format이 추론됩니다.

추론이 알 수 없는 것

  • 의도와 예시의 차이: 샘플 age: 25에서는 type: integer가 추론되지만, null도 허용하는지는 알 수 없습니다. 엣지 케이스를 포함하는 여러 샘플을 제공하세요.
  • 제약 조건: minLength, maximum, pattern 등은 직접 추가해야 합니다. 추론은 샘플에서 한계값을 추측하지 않습니다.
  • 비즈니스 로직: “이 세 필드 중 정확히 하나만 설정해야 한다”와 같은 조건에는 oneOf가 필요하며, 추론할 수 없습니다.
  • 참조: 생성기는 평면적인 스키마를 출력합니다. 반복되는 형태를 $defs로 분리하려면 생성 후에 처리하세요.

출력 예시

단일 샘플로부터:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

추론된 스키마(draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

흔한 실수

  • 하나의 샘플만으로 추론하기. 스키마가 과적합되어 모든 필드가 필수가 되고 null 허용이 사라집니다. 항상 5~10개의 다양한 샘플을 입력하세요.
  • number를 의도했는데 integer를 사용하기. 어떤 샘플에 소수가 있으면 추론된 타입은 number가 되고, 모두 정수면 integer가 됩니다. 둘 다 가능한 필드에는 소수를 포함한 샘플을 넣으세요.
  • 선택 필드를 놓치기. 5개 중 4개에 있고 1개에서 빠진 필드는 선택 필드가 됩니다(의도된 동작). 만약 5개 모두에 우연히 포함되면, 실제로는 API에서 선택 필드여도 스키마는 이를 필수로 표시합니다.

자주 묻는 질문

많을수록 좋지만, 보통 5~10개의 다양한 샘플이면 합리적인 스키마를 얻을 수 있습니다. 샘플이 하나면 모든 필드가 필수가 되고 null 허용 여부도 추론할 수 없으므로, 가능하면 항상 여러 변형을 제공하세요.

기본값은 draft 2020-12입니다. OpenAPI 3.0 호환성을 위해(OpenAPI는 draft 05/07의 부분집합을 사용) draft 07과 draft 04도 제공됩니다.

아니요. 샘플에서 제약 조건을 추론하면 스키마가 과적합됩니다. minLength, maximum, pattern 등은 생성 후 비즈니스 규칙에 따라 직접 추가하세요.

네. JSON 배열을 붙여넣으면 생성기는 각 요소를 개별 샘플로 취급하여 외부 배열이 아니라 개별 요소를 설명하는 스키마를 생성합니다. 외부 배열 자체의 형태가 필요하면 “배열 컨테이너로 취급” 옵션을 켜세요.

관련 도구

이 도구는 다른 언어로도 제공됩니다