본문으로 건너뛰기
yutils
예시

입력 (샘플 JSON)

{
  "id": 1,
  "name": "Alice",
  "active": true,
  "tags": ["admin", "user"]
}

출력 (Draft 2020-12 Schema)

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

참고

샘플 1건에서 추론한 schema. 단일 sample 기반이라 모든 필드가 required 로 마크됨. optional 필드는 결과에서 수동으로 제거하거나 여러 sample 로 generate 후 합치세요.

사용법 / 자주 묻는 질문

이런 경우 사용하세요

  • API 응답 sample → schema 자동 추출 — Swagger / OpenAPI 정의 초안
  • 기존 JSON 데이터의 schema 화 — 검증 인프라 도입 시 출발점
  • JSON Schema 학습 — 입력과 결과를 좌우로 비교
  • 테스트 fixture 의 schema 자동 생성
  • JSON → ts → schema 워크플로의 첫 단계 (json-to-ts 와 함께 쓰기)

자주 묻는 질문

Q.어떤 Draft 를 출력하나요?
A.Draft 2020-12 — JSON Schema Validator 짝 도구와 동일. `$schema` URL 이 결과에 포함됩니다.
Q.모든 필드가 required 로 표시되는 이유는?
A.단일 sample 기반 추론이라 어느 필드가 optional 인지 알 수 없음. 모든 존재하는 필드를 required 로 표시 — 실제 schema 에서는 수동으로 일부 필드 제거해야 합니다.
Q.format(email, uri, date) 도 추출되나요?
A.현재는 type 추론만 — string 값이 email/uri/date 인지 패턴 매칭은 안 함. 결과 schema 에 수동 추가 후 JSON Schema Validator 짝 도구로 검증.
재미있는 사실
  • 샘플 JSON 에서 schema 를 추론할 때 가장 어려운 건 'optional vs required' 결정입니다. 단일 샘플에서는 모든 키가 required 처럼 보이지만 — 실제로는 nullable / optional 인 경우 많음. 좋은 generator 는 여러 샘플을 받아 키의 등장 빈도로 optional 추론.

    JSON Schema — Getting started
  • JSON Schema 2020-12 부터 `prefixItems` 가 추가돼 tuple-like 배열 (각 인덱스 다른 type) 표현 가능. 이전 Draft 7 까지는 `items` 가 array 면 그 역할이었지만 ambiguous — 2020-12 가 의도를 명확히 분리했어요.

    JSON Schema 2020-12
  • OpenAPI 3.1 (2021) 부터 JSON Schema 2020-12 와 100% 호환됩니다. 이전 3.0 까지는 OpenAPI 자체 schema 였는데 — 3.1 에서 'JSON Schema 표준 그대로 채용' 결정으로 tooling 통합. ajv 같은 JSON Schema validator 가 OpenAPI 도 그대로 검증.

    OpenAPI 3.1