제10장: Schema 정의 사양

10.1 개요

프로토콜은 3가지 형식의 Schema 정의 파일을 통해 개발자에게 기계 판독 가능한 사양을 제공하며, 자동화된 검증과 코드 생성을 지원합니다.

10.2 산출물

파일형식용도
schema.jsonJSON Schema Draft 2020-12자동화 검증, 코드 생성
schema.tsTypeScript 타입 정의개발 시 타입 검사, IDE 지원
schema.mdxMDX 인터랙티브 문서사람이 읽을 수 있는 문서, 인터랙티브 예시

10.3 JSON Schema 사양

기본 구조

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://skill-sharing.org/schema/draft/schema.json",
  "title": "Skill Sharing Protocol Schema",
  "description": "Skill Sharing Protocol의 완전한 Schema 정의",
  "$defs": {
    "CapabilityType": { ... },
    "AccessPolicy": { ... },
    "AuthType": { ... },
    "ParameterDefinition": { ... },
    "SkillDescriptor": { ... },
    "SkillIndex": { ... },
    "InvocationRequest": { ... },
    "InvocationResponse": { ... }
  }
}

TypeScript에서 JSON Schema로의 매핑 규칙

TypeScriptJSON Schema
string{ "type": "string" }
number{ "type": "number" }
boolean{ "type": "boolean" }
유니온 타입 "a" | "b"{ "enum": ["a", "b"] }
interface{ "type": "object", "properties": {...} }
선택 필드 field?required 배열에 포함되지 않음
Record<string, T>{ "type": "object", "additionalProperties": {...} }
unknown{}(제약 없음)

10.4 TypeScript 타입 정의

TypeScript 타입 정의 파일(schema.ts)은 JSON Schema와 의미적 일관성을 유지하며 다음을 제공합니다:

  • 모든 열거형 타입 정의
  • 모든 인터페이스 정의
  • 완전한 타입 내보내기
  • JSDoc 주석 설명

10.5 MDX 인터랙티브 문서

MDX 문서(schema.mdx)에는 다음이 포함됩니다:

  • Schema 개요 및 사용 가이드
  • 각 데이터 모델의 필드 설명 테이블
  • 유효한 Descriptor 예시
  • 무효한 Descriptor 예시(일반적인 오류 표시)
  • JSON Schema와 TypeScript 타입의 대조표

10.6 버전화 디렉토리 구조

schema/
├── draft/                    # 개발 중인 초안 버전
│   ├── schema.json
│   ├── schema.ts
│   └── schema.mdx
└── 2025-10-25/              # 게시된 안정 버전
    ├── schema.json
    ├── schema.ts
    └── schema.mdx

규칙:

  • draft/ 디렉토리는 항상 최신 개발 버전을 포함
  • 새 버전 게시 시, draft 내용을 날짜 이름의 버전 디렉토리로 복사
  • JSON Schema 업데이트 시, TypeScript 타입 정의와 MDX 문서도 동기 업데이트 필수

10.7 Schema Validator

Schema Validator는 schema.json에 기반하여 임의의 Skill Descriptor 문서에 대한 준수성 검증을 수행합니다:

  • ajv 라이브러리를 사용하여 JSON Schema 로드
  • 문서의 구조적 완전성 검증
  • 열거형 필드 값 범위 검사
  • 상세한 오류 정보 반환(필드 경로, 기대값, 실제값)
  • 파싱(JSON → 객체) 및 직렬화(객체 → Pretty Print JSON) 지원