본문으로 건너뛰기
yutils
예시

입력 (스키마 + 데이터)

스키마:
{ "type": "object", "required": ["name", "age"], "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } } }

데이터:
{ "name": "Ada", "age": -3 }

검증 결과

❌ 검증 실패 — 1건
- /age: must be >= 0 (현재 값: -3)

참고

Draft 2020-12 + format(email, uri, date 등) 모두 지원. 에러 위치는 JSON Pointer 경로(/a/b)로 표시됩니다.

사용법 / 자주 묻는 질문

이런 경우 사용하세요

  • API 응답 페이로드가 정의된 스키마를 따르는지 검증
  • form 입력 데이터가 백엔드 스키마와 일치하는지 사전 체크
  • OpenAPI / AsyncAPI 정의의 schema 컴포넌트 단독 테스트
  • Draft 4 / 6 / 7 / 2019-09 / 2020-12 — 스펙별 동작 비교
  • ajv 와 동일한 규칙으로 검증 결과 사전 확인

자주 묻는 질문

Q.어떤 JSON Schema draft 를 따르나요?
A.기본은 Draft 2020-12 입니다. 스키마에 `$schema` 가 명시되어 있으면 해당 draft 로 검증합니다(ajv 기반).
Q.format 검증(email · uri · date)이 동작하나요?
A.예. ajv-formats 로 표준 format 들이 활성화돼 있습니다. 단, format 은 스펙상 권장 사항(must-check 가 아닌 SHOULD-check)이므로 엄격 검증이 필요하면 추가 규칙을 직접 정의하세요.
Q.에러 메시지의 `/a/b` 는 무엇인가요?
A.JSON Pointer 경로입니다. `/a/b` 는 데이터의 `data.a.b` 위치를 가리킵니다. 배열은 `/0`, `/1` 처럼 인덱스로 표기.
재미있는 사실
  • JSON Schema 는 2009년 Kris Zyp 가 처음 Draft 1 을 IETF 에 제출했습니다 — JSON 데이터의 구조·타입·제약조건을 JSON 자체로 기술하는 메타 스키마. 2024년 현재 여전히 IETF Internet Draft 상태 (RFC 정식화 진행 중) — 15년째 'draft' 인 살아있는 표준입니다.

    JSON Schema — Official
  • 버전 명명이 시간에 따라 바뀌었어요 — Draft 1~7 (숫자), 그 후엔 Draft 2019-09, Draft 2020-12 (연-월). 호환성 단절을 표시하기 위한 의도적 명명 — 2020-12 가 현재 modern API tooling 의 사실상 표준 (OpenAPI 3.1 도 이 버전 사용).

    JSON Schema — Specification
  • Node.js 진영의 ajv 는 JSON Schema 의 가장 빠른 구현체로 잘 알려져 있습니다 — 스키마를 미리 JavaScript 함수로 컴파일해 두고 (`compile()` 한 번, `validate()` 무한 호출) 매 요청 검증을 수십 μs 단위로 처리. Fastify·OpenAPI tooling 표준 의존성.

    Ajv — JSON Validator