새 글을 빠르게 보려면?
이 블로그 목록을 북마크하고 홈·도구 허브의 가이드 영역도 확인하세요. 글 읽기에 가입이나 메일 구독이 필요 없습니다.
JSON 구문 검증, Lint 규칙, JSON Schema 데이터 계약의 차이를 하나의 API 예제로 비교하고 세 단계를 함께 사용하는 방법을 설명합니다.
JSON이 정상적으로 파싱되어도 API가 거부할 수 있고, Validator가 유효하다고 해도 Linter가 경고할 수 있습니다. 세 도구가 서로 다른 질문에 답하기 때문입니다.
JSON Validator는 텍스트가 올바른 JSON인지, JSON Linter는 품질과 일관성 규칙을 지키는지, JSON Schema는 데이터가 따라야 할 구조와 제약을 정의합니다.
| 도구 | 핵심 질문 | 대표 결과 |
|---|---|---|
| JSON Validator | 올바른 JSON 텍스트인가? | 통과 또는 구문 오류 위치 |
| JSON Linter | 품질·스타일·팀 규칙을 지키는가? | 경고와 개선 제안 |
| JSON Schema | 애플리케이션이 허용하는 데이터 구조는? | 기계가 읽을 수 있는 데이터 계약 |
> 권장 순서: 구문 검증 → Lint → Schema 검증.
JSON Validator는 두 종류를 가리킬 수 있습니다. 구문 Validator는 JSON.parse 같은 파서로 JSON 문법을 확인합니다. JSON Schema Validator는 Schema와 JSON Instance를 입력받아 Instance가 계약을 충족하는지 확인합니다.
Json Work의 JSON Validator는 주로 첫 번째 유형입니다. JSON Schema 공식 문서에서 Validator는 보통 두 번째 유형입니다. 문서에서는 syntax validator와 schema validator를 구분해 쓰는 것이 안전합니다.
null을 포함한 JSON 문법을 정의합니다. 아래 예시는 쉼표가 없어 유효하지 않습니다.{
"id": 101
"name": "Alice"
}구문 Validator는 쉼표 누락, 닫히지 않은 따옴표나 괄호, 잘못된 이스케이프, 따옴표 없는 키, undefined나 NaN 같은 허용되지 않는 값을 찾습니다.
그러나 다음 데이터는 구문상 완전히 유효합니다.
{
"id": "one hundred",
"email": "not-an-email",
"active": "yes"
}Validator는 id가 정수여야 하는지, active가 불리언이어야 하는지 모릅니다. “올바른 JSON 텍스트인가”만 답합니다. JSON Validator로 오류 위치를 찾고, JSON과 비슷한 손상된 입력은 JSON Repair로 후보를 만든 뒤 의미를 검토하세요.
Lint는 규칙 기반 정적 분석입니다. JSON 문법과 달리 모든 Linter가 공유하는 단일 규칙 표준은 없습니다. 도구나 팀이 유지보수성과 위험에 맞춰 규칙을 정합니다.
{
"user_id": 101,
"userName": "Alice",
"isActive": "true"
}이 JSON은 유효하지만 Linter는 snake_case와 camelCase 혼용, 불리언처럼 보이는 문자열, 같은 필드의 타입 불일치, 과도한 중첩을 지적할 수 있습니다.
경고가 곧 데이터 오류라는 뜻은 아닙니다. 상위 계약이 문자열 "true"를 요구할 수도 있습니다. JSON Linter는 암묵적인 규칙을 드러내지만 계약 없이 비즈니스 의도를 증명하지는 못합니다.
JSON Schema는 타입, 필수 속성, 배열 항목, 길이, 숫자 범위, enum과 조합 조건을 표현하는 표준화된 어휘입니다. 공식 사이트는 검증, 상호운용과 문서화를 주요 용도로 설명합니다.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"active": { "type": "boolean" }
},
"required": ["id", "name", "email"],
"additionalProperties": false
}Schema는 규칙 문서이지 실행 프로그램이 아닙니다. Ajv나 Python jsonschema 같은 Schema Validator가 이를 실제 Instance에 적용합니다. 공식 단계별 가이드도 Schema와 Instance를 구분합니다.구현 설정도 중요합니다. format은 Validator와 옵션에 따라 강제 조건이 아니라 주석으로 동작할 수 있습니다. 공식 format 설명을 확인하고 Draft, Validator와 옵션을 고정하세요.
{
"id": "101",
"name": "Alice",
"email": "alice@example.com",
"active": "true"
}id와 active의 타입이 의심스럽지만 의도를 단정할 수 없습니다.id가 integer, active가 boolean이어야 합니다.유효한 구문 ≠ 일관된 스타일 ≠ 유효한 데이터 계약
| 기능 | Validator | Linter | JSON Schema |
|---|---|---|---|
| JSON 구문 검사 | 예 | 보통 유효한 구문이 전제 | Schema 자체도 유효한 JSON이어야 함 |
| 필드 타입 제약 | 아니요 | 의심 타입 제안 가능 | 공식 제약 가능 |
| 필수 필드 | 아니요 | 계약 없이 판단 어려움 | 정의 가능 |
| 이름 규칙 | 대상 아님 | 검사 가능 | 주 목적 아님 |
| API 계약 | 단독으로 부족 | 단독으로 부족 | 적합 |
“종료 시간이 시작 시간보다 늦어야 한다”거나 접근 권한을 확인하는 규칙은 Schema만으로 충분하지 않을 수 있습니다. Schema 통과를 비즈니스 작업의 안전성과 동일시하면 안 됩니다.
import Ajv from "ajv";
const schema = {
type: "object",
properties: {
id: { type: "integer" },
name: { type: "string" },
active: { type: "boolean" }
},
required: ["id", "name"],
additionalProperties: false
};
const data = { id: "101", name: "Alice", active: true };
const ajv = new Ajv({ allErrors: true });
const validate = ajv.compile(schema);
if (!validate(data)) console.log(validate.errors);Ajv는 id가 integer가 아니라고 보고합니다. 공식 가이드는 Schema를 한 번 컴파일하고 검증 함수를 재사용할 것을 권장합니다. 입력이 네트워크 원문이라면 Schema 검증 전에 JSON 파싱이 필요합니다.
Validator는 올바른 구문, Linter는 품질과 일관성, JSON Schema는 구조와 데이터 계약을 지킵니다. 하나만 고르는 대신 순서대로 조합하는 것이 가장 신뢰할 수 있습니다.
JSON Validator로 구문을 확인하고 JSON Linter로 품질을 점검한 뒤 JSON Schema 생성기로 유지 가능한 계약을 만들 수 있습니다. 모든 처리는 브라우저에서 로컬로 실행됩니다.개발자에게 최고의 JSON 처리 도구를 제공하는 데 전념
더 많은 게시물이 곧 출시됩니다...
블로그로 돌아가기업데이트 확인 방법, 다루는 주제, 제안 방법입니다.
이 블로그 목록을 북마크하고 홈·도구 허브의 가이드 영역도 확인하세요. 글 읽기에 가입이나 메일 구독이 필요 없습니다.
JSON 검증, 포맷, 변환, 디버깅 흐름과 JSON Work 업데이트이며, 사이트의 무료 브라우저 도구와 맞물립니다.
가능합니다. About 페이지나 GitHub로 연락 주세요. 실제 연동·디버깅에 도움이 되는 주제를 우선합니다.