liminfo

JSON Schema Validator

JSON Schema Draft 4-2020-12 문서 검증 도구

JSON Schema Validator 소개

JSON 스키마 검증기는 JSON 문서가 특정 JSON Schema 정의를 준수하는지 확인하는 브라우저 기반 도구입니다. 왼쪽 패널에 JSON 데이터를, 오른쪽 패널에 스키마를 붙여넣고 검증 버튼을 클릭하면, 문서가 유효한지 즉시 보고하거나, 각 위반 사항을 정확한 JSON 포인터 경로(예: /user/email)와 무엇이 잘못되었는지 설명하는 사람이 읽을 수 있는 오류 메시지와 함께 나열합니다.

소프트웨어 개발자, API 설계자, QA 엔지니어들은 서비스 간 데이터 계약을 적용하기 위해 JSON 스키마 검증을 사용합니다. 이 도구는 JSON Schema 명세에서 정의된 핵심 제약 키워드를 검증합니다: type(string, number, integer, boolean, object, array, null), required 속성 존재 여부, properties 재귀 하위 스키마 검증, 문자열 제약(minLength, maxLength, pattern 정규식, enum 값), 숫자 제약(minimum, maximum), 배열 제약(minItems, maxItems, items 하위 스키마). 이는 REST API와 설정 파일에서 사용되는 실제 스키마의 대부분을 다룹니다.

기술적으로, 검증기는 JSON 문서에 대해 깊이 우선 탐색을 수행하며 각 노드를 해당 스키마 조각과 대조합니다. 객체의 경우 모든 required 키가 있는지 확인한 다음 각 정의된 속성을 재귀적으로 검증합니다. 배열의 경우 길이 경계를 검증한 다음 모든 요소에 items 하위 스키마를 적용합니다. 오류는 JSON 포인터 경로와 함께 평탄한 목록으로 누적되어 어떤 중첩 필드가 왜 실패했는지 정확히 찾아낼 수 있습니다.

주요 기능

  • JSON 문서와 JSON 스키마를 나란히 편집할 수 있는 패널 (구문 강조 포함)
  • string, number, integer, boolean, object, array, null 등 모든 JSON 타입 검증
  • required 필드 검사 — 정확한 JSON 포인터 경로와 함께 누락된 required 속성 보고
  • 문자열 제약 검증: minLength, maxLength, pattern(정규식), enum(허용 값 목록)
  • 숫자 제약 검증: number 및 integer 타입에 대한 minimum 및 maximum
  • 배열 제약 검증: minItems, maxItems, 요소별 재귀 items 하위 스키마
  • 임의 깊이의 중첩 객체 재귀 검증
  • 즉시 동작을 확인할 수 있도록 사용자 객체 스키마 예제가 미리 로드되어 있음

자주 묻는 질문

JSON Schema란 무엇이고 어떤 용도로 사용하나요?

JSON Schema는 JSON 문서를 주석 처리하고 검증하기 위한 표준 어휘입니다. API 요청/응답 본문, 설정 파일, 데이터베이스 문서의 예상 구조를 정의하는 데 널리 사용됩니다. Postman, OpenAPI/Swagger 등의 도구와 많은 IDE 플러그인이 자동 완성과 인라인 검증을 위해 JSON Schema를 사용합니다.

이 도구는 어떤 JSON Schema 버전을 지원하나요?

검증기는 JSON Schema 초안 4, 6, 7, 2019-09에 공통적인 핵심 제약 키워드를 구현합니다: type, required, properties, minLength, maxLength, pattern, enum, minimum, maximum, minItems, maxItems, items. anyOf, oneOf, allOf, if/then/else, $ref 같은 고급 키워드는 현재 지원되지 않습니다.

오류에서 /user/email 같은 JSON 포인터 경로는 무슨 의미인가요?

JSON 포인터(RFC 6901)는 JSON 문서 내의 특정 값을 식별하기 위한 구문입니다. /user/email 경로는 user 객체 내의 email 필드에 오류가 있음을 의미합니다. /items/[2]/name 경로는 items 배열의 세 번째 요소(인덱스 2)의 name 필드에 오류가 있음을 의미합니다.

"number" 타입과 "integer" 타입의 차이는 무엇인가요?

JSON Schema에서 number는 소수(예: 3.14)를 포함한 모든 숫자 값을 허용하고, integer는 소수점 없는 정수(예: 42)만 허용합니다. 검증기는 JavaScript의 Number.isInteger()를 사용하여 integer 값을 확인합니다.

이메일 주소 같은 특정 형식의 필드를 어떻게 검증하나요?

스키마에서 pattern 키워드를 정규 표현식과 함께 사용하세요. 이메일 유사 검증을 위해 "^[^@]+@[^@]+$" 같은 패턴을 사용할 수 있습니다. 검증기는 문자열을 정규식에 대해 테스트하고 일치하지 않으면 오류를 보고합니다. RFC 5322 완전한 이메일 형식 검증은 정규식의 범위를 넘어 전용 라이브러리가 필요합니다.

선택적 필드를 만들되 존재할 때만 검증하려면 어떻게 하나요?

required 배열에 해당 필드 이름을 포함시키지 않으면 됩니다. properties 아래에 제약 조건과 함께 정의하면, JSON 문서에 해당 필드가 있을 때만 스키마 제약이 적용됩니다. 필드가 없으면 오류가 보고되지 않습니다.

객체가 아닌 JSON 배열을 직접 검증할 수 있나요?

네. 스키마의 최상위 type을 "array"로 설정하고 minItems, maxItems, items를 사용하여 제약 조건을 정의하세요. items 하위 스키마는 배열의 모든 요소에 적용됩니다. 각 요소는 자체 required 필드와 properties가 있는 객체 스키마가 될 수 있습니다.

검증이 시작되기 전에 JSON 파싱 오류가 나타나는 이유는 무엇인가요?

도구는 먼저 JSON.parse()를 사용하여 JSON 문서와 스키마 모두를 파싱하려고 시도합니다. 둘 중 하나에 구문 오류(따옴표 누락, 후행 쉼표, 대괄호 불일치 등)가 있으면 파싱이 실패하고 스키마 검증이 수행되기 전에 오류 메시지가 표시됩니다. 오류 메시지에 표시된 JSON 구문 오류를 먼저 수정한 다음 검증을 다시 클릭하세요.