본문으로 건너뛰기
Ink·tab

ajv 검증 · JSONPath 발췌

API 응답을 schema 로 검증하거나, 큰 JSON 에서 원하는 부분만 골라냅니다.

모드

브라우저 안에서만 처리됩니다. 네트워크 전송 없음.

언제 쓰나

API 응답이 schema 명세를 만족하는지 통합 테스트 직전 확인할 때, 큰 JSON 응답에서 특정 필드만 발췌해 디버깅할 때, 백엔드 schema 변경 후 프론트가 받게 될 데이터를 시뮬레이션해 어디가 깨질지 미리 볼 때.

두 모드, 한 도구

상단 segmented 로 전환:

  • Schema 검증 — JSON Schema (draft-07) 로 데이터 검증. 모든 위반을 한 번에 표시 (allErrors). instance path · keyword · 메시지 3 칼럼.
  • JSONPath 추출 — 큰 JSON 에서 path 로 매치 노드만 발췌. jsonpath-plus 의 superset 문법.

서로 직교 — schema 는 전체 검증, JSONPath 는 부분 추출. 둘 다 자주 필요한데 별도 사이트 왔다갔다 하기 번거로워 한 도구로.

라이브러리 lazy

  • ajv 8.x (~80KB gz) — JSON Schema 검증의 사실상 표준.
  • jsonpath-plus 10.x (~5KB gz) — JSONPath 평가.

둘 다 dynamic import. 페이지 client 번들은 ~10KB, 사용자가 schema / path 입력 시작할 때 chunk fetch.

JSONPath 문법 cheatsheet

$.store.books[*].title         # 모든 책 제목
$..books[?(@.price < 10)]      # 가격 10 미만 책
$..author                      # 모든 author 키 (재귀)
$..books[0:2]                  # 첫 두 권
$..books[-1:]                  # 마지막 권
$.store.books[*].price         # 모든 가격

RFC 9535 표준에 가깝지만 jsonpath-plus 가 살짝 superset (script expression ?(@...) 같은 것은 RFC 외).

검증 모드 keyword

ajv 8.x 의 draft-07 keyword 전체 동작:

  • type (string · number · integer · boolean · object · array · null)
  • required · enum · const
  • properties · additionalProperties · patternProperties
  • items · minItems · maxItems · uniqueItems
  • pattern · minLength · maxLength
  • minimum · maximum · exclusiveMinimum · exclusiveMaximum
  • multipleOf
  • if / then / else · allOf / anyOf / oneOf / not

format (email · uuid · date-time 등) 은 무시 — V1 은 ajv-formats 미포함. format 검증이 필요하면 V2.

안 맞는 경우

  • API 모킹 / fake server — schema 만족하는 fake 데이터 생성은 별개. 본 도구는 검증만, 생성 안 함. faker / json-schema-faker 등 별도.
  • schema 자체의 의미 검토 — required 누락 / 잘못된 type 같은 schema 디자인 문제는 자동 감지 안 됨. 본 도구는 schema 형식적 정합성만.
  • OpenAPI / Swagger 직접 — OpenAPI 안에 들어 있는 component schema 를 빼서 붙여넣어야 함. 본 도구는 raw JSON Schema 만 입력.

보안

API 응답에 인증 토큰 · 사용자 ID · 결제 정보가 섞여 있어도 안전. ajv 와 jsonpath-plus 모두 클라이언트 번들로 동적 로드되며, schema · 데이터 · path 모두 외부로 전송되지 않습니다.

JSON 은 페이지 안에서만

API 응답에 인증 토큰 · 사용자 ID · 결제 정보가 섞여 있어도 안전. ajv 와 jsonpath-plus 모두 클라이언트 번들로 동적 로드되며, schema · 데이터 · path 모두 외부로 전송되지 않습니다.

자주 묻는 질문

JSON Schema 어느 draft 를 지원하나요?
ajv 8.x 기본 — draft-07. 가장 광범위 호환. 2020-12 (draft 2020-12 keyword: prefixItems · unevaluatedProperties 등) 는 ajv/dist/2020 빌드 필요 — V2 옵션화 검토.
validateFormats 옵션은 무엇인가요?
본 도구는 false. ajv-formats 패키지 없이 동작 — `format: "email"` · `format: "uuid"` 같은 string format 검증은 무시됩니다. format 검증이 필요하면 V2 에서 ajv-formats 추가 검토. format 이 아닌 다른 keyword (type · required · pattern · enum · minimum · ...) 는 정상 동작.
JSONPath 문법은?
jsonpath-plus 의 superset. 기본: $.store.books[*].title (모든 책 제목). 필터: $..books[?(@.price < 10)] (가격 10 미만). 재귀: $..author (모든 author 키). 슬라이스: $..books[0:2] (첫 두 권). RFC 9535 표준에 가까운 구문.
큰 JSON 에서도 빠른가요?
10MB 까지 메인 스레드에서 무리 없이 처리. ajv 컴파일은 schema 변경 시마다, JSONPath 평가는 path 변경 시마다 재계산 — 150ms debounce 로 입력 폭주 흡수. 100MB 이상은 권장 안 함 (브라우저 메모리).
이 결과를 그대로 production 에서 신뢰해도 되나요?
schema 검증 자체는 ajv 표준이라 신뢰 가능. 단 schema 자체의 정확성은 별개 — 본 도구는 입력 schema 의 의미적 옳음을 판단 못 함 (예: required 누락 / type 잘못). schema 작성 자체는 별도 검토.