JSON Schema 검증기
최종 업데이트: 2026년 10월 2일
JSON 문서를 JSON Schema로 검증하고 충족되지 않은 제약을 경로와 함께 나열합니다. 문서와 Schema 모두 브라우저에서 분석되고 검사됩니다.
검사하는 내용
JSON Schema는 문서가 가질 수 있는 형태를 기술합니다. 어떤 속성이 있고, 각각 어떤 형식이며, 어떤 범위와 패턴이 허용되는지를 말합니다. 이 페이지는 스키마에 비추어 문서를 검사하고, 충족하지 못한 곳을 모두 위치를 알 수 있도록 경로와 함께 나열합니다.
지원하는 키워드는 다음과 같습니다. type, const, enum, required, properties, additionalProperties, minProperties, maxProperties, items(단일 스키마 또는 스키마 튜플), minItems, maxItems, uniqueItems, minLength, maxLength, pattern, minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, allOf, anyOf, oneOf, not, 그리고 같은 스키마 내부를 가리키는 로컬 $ref입니다.
의도적으로 하지 않는 것
- 원격
$ref는 해석하지 않습니다. 같은 스키마 내부의 포인터(#/$defs/…,#/definitions/…)만 해석합니다. 다른 파일을 가져오는 것은 네트워크 요청을 뜻하며, 이는 이 도구가 피하려는 바로 그 일입니다. format은 검증이 아닙니다. 최근 초안에서format은 주석이며 강제되지 않습니다. 여기서도 그렇게 다루므로,email형식이 잘못된 주소를 거부하지는 않습니다.- 일부 키워드는 구현되지 않았습니다:
patternProperties,unevaluatedProperties,if/then/else,dependentSchemas,contains. 이런 키워드를 쓰는 스키마라도 다른 키워드는 검사되지만, 구현되지 않은 키워드는 강제되지 않습니다. 따라서 이들에 의존하는 스키마에서 여기의 ‘유효’를 완전한 적합성 결과로 보면 안 됩니다. - 스키마 자체를 메타 검증하지 않습니다. 문법상 유효한 JSON이지만 논리가 틀린 스키마는 그냥 아무것도 일치하지 않을 수 있습니다. 이 페이지가 검사하는 것은 문서이고, 스키마 자체의 올바름이 아닙니다.
오류 읽는 법
각 실패는 경로와 함께 보고됩니다. $는 문서 루트이고, 점은 속성으로 들어가며, 대괄호는 배열 인덱스입니다. required는 그 속성을 포함해야 했던 객체의 위치에서 보고됩니다——제약은 객체에 있고 빠진 속성에 있지 않기 때문입니다——메시지에 속성 이름이 표시됩니다. anyOf와 oneOf는 실패한 인스턴스에 한 번만 보고되며 분기마다가 아닙니다. 분기 오류로 가득 차면 진짜 문제가 보이지 않습니다.
자주 묻는 질문
어떤 JSON Schema 키워드를 지원하나요?
type, const, enum, required, properties, additionalProperties, minProperties, maxProperties, items(단일 스키마 또는 스키마 튜플), minItems, maxItems, uniqueItems, minLength, maxLength, pattern, minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, allOf, anyOf, oneOf, not, 그리고 로컬 $ref입니다.
의도적으로 지원하지 않는 것은 무엇인가요?
원격 $ref(같은 스키마 내부의 포인터만 해석합니다), 검증으로서의 format, patternProperties, unevaluatedProperties, if/then/else, dependentSchemas입니다. 이런 키워드를 쓰는 스키마라도 위에 나열한 키워드는 검증되지만, 구현되지 않은 키워드는 강제되지 않습니다. 따라서 이런 키워드에 의존하는 스키마에서 여기의 ‘유효’를 완전한 적합성 결과로 보면 안 됩니다.
검증이 서버에서 이루어지나요?
아니요. 문서와 스키마 모두 브라우저에서 JSON.parse로 분석되고 메모리에서 검사됩니다. 아무것도 업로드되지 않으며, 네트워크를 끊어도 동작합니다.
필수 속성 오류가 왜 상위 경로에서 보고되나요?
제약이 그곳에 있기 때문입니다. JSON Schema의 required는 객체에 적용되지, 빠진 속성에 적용되지 않습니다. 그래서 오류는 객체의 경로($.name이 아니라 $ 등)에서 보고되고, 메시지에 속성 이름이 표시됩니다.
anyOf와 oneOf는 어떻게 보고되나요?
실패한 인스턴스에 한 건만 보고하며 분기마다 보고하지 않습니다. anyOf는 어떤 분기도 일치하지 않을 때 실패하고, oneOf는 일치한 분기 수가 정확히 1이 아닐 때 실패하며 메시지에 일치한 수가 표시됩니다. 분기 내부 오류를 모두 나열하면 진짜 문제가 묻힙니다.
스키마 자체의 오류도 알려 주나요, 아니면 문서만 검사하나요?
문서를 스키마에 비추어 검사합니다. 스키마 자체가 유효한 JSON이 아니면 그 사실을 따로 알려 줍니다. 스키마를 JSON Schema 메타 스키마로 검증하지는 않으므로, 문법은 맞지만 논리가 틀린 스키마는 그냥 아무것도 일치하지 않을 수 있습니다.