C.W.K.
Stream
Lesson 05 of 08 · published

접착제로서의 schema — 포맷 가로지르는 JSON Schema

~10 min · interop, json-schema, validation

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

한 schema, 세 포맷

YAML, TOML, JSON 이 모두 같은 데이터 모델로 파싱. 그래서 JSON Schema 가 셋 다 검증, 변경 없이. schema 한 번 작성; validator 가 셋 중 어느 거든 가리킴; 규칙이 일관되게 적용.

포맷 가로지르는 validator

  • check-jsonschema — Python 도구, pip install check-jsonschema, JSON Schema 로 JSON, YAML, TOML 검증.
  • ajv-cli + YAML loader — JSON 의 가장 빠른 validator; YAML 지원은 --data-stream + js-yaml.
  • spectral — OpenAPI 전용; YAML 또는 JSON spec 에 JSON Schema 규칙 실행.
  • 에디터 schema 통합 — VS Code 의 YAML / JSON / TOML 확장이 다 Schema Store 에서 schema 읽어 autocomplete + 인라인 validation 제공, 포맷 무관.

규율로서의 schema-first

팀이 선호하는 포맷 골라, 단 schema 는 JSON Schema 로 작성. schema 가 single source of truth. 필요 시 변환. schema 가 또한 문서, autocomplete, 타입 생성기, mock 데이터 생성기 — 얼마나 멀리 갈지에 따라.

원칙: 경계에서 검증, 내부에서 신뢰. 경계가 타입 없는 데이터가 시스템 들어오는 곳 — config load, API 요청, 파일 업로드. 거기서 JSON Schema 로 검증; downstream 코드가 모양 정확하다 가정 가능.

Code

한 schema, 다 검증·bash
# 설치
pip install check-jsonschema

# JSON 검증
check-jsonschema --schemafile config.schema.json config.json

# 같은 schema, YAML 검증
check-jsonschema --schemafile config.schema.json config.yaml

# 같은 schema, TOML 검증
check-jsonschema --schemafile config.schema.json config.toml

# URL 의 schema 로 검증 (Schema Store)
check-jsonschema --schemafile https://json.schemastore.org/github-action.json action.yaml
Schema 예시 — 다 같은 규칙 적용·json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "port":     { "type": "integer", "minimum": 1024, "maximum": 65535 },
    "host":     { "type": "string" },
    "log_level": { "enum": ["debug", "info", "warn", "error"] },
    "database": {
      "type": "object",
      "properties": {
        "url":       { "type": "string", "format": "uri" },
        "pool_size": { "type": "integer", "minimum": 1, "maximum": 100 }
      },
      "required": ["url"]
    }
  },
  "required": ["host", "port", "database"]
}
VS Code — 파일명으로 자동 적용 schema·json
// .vscode/settings.json
{
  "json.schemas": [
    { "fileMatch": ["my-config.json"], "url": "./config.schema.json" }
  ],
  "yaml.schemas": {
    "./config.schema.json": ["my-config.yaml", "my-config.yml"]
  }
  // TOML 은 Even Better TOML 확장 사용; 자체 설정으로 구성.
}

External links

Exercise

유지하는 config 묘사하는 JSON Schema 작성. 같은 schema 로 YAML 버전, TOML 버전 (있으면), 일부러 깨진 JSON 버전 검증. validation 단계를 CI 에 추가. schema 가 모두 — 사람, 포맷, validator — 동의하는 계약 됨.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.