15.5.1. 하위 호환성(Backward Compatibility)을 고려한 스키마 버전 관리(Schema Versioning)

15.5.1. 하위 호환성(Backward Compatibility)을 고려한 스키마 버전 관리(Schema Versioning)

생성형 AI 생태계에서 구조화된 출력(Structured Outputs) 스키마는 한 번 배포되면 불변하는(Immutable) 화석이 아니다. 새로운 인텐트(Intent) 분석 요구사항의 추가, 기존 데이터 타입의 세분화, 혹은 레거시 필드의 폐기와 같은 스키마의 진화는 현대 소프트웨어 개발의 필연적인 생명주기이다.

그러나 오라클(Oracle) 관점에서 스키마의 무분별한 업데이트는 테스트 환경을 붕괴시키는 지진과 같다. 만일 새로운 필수(Required) 필드가 스키마에 추가되었는데 기존의 수많은 골든 데이터셋(Golden Dataset) 정답지에는 이 필드가 누락되어 있다면, 그 즉시 모든 회귀 테스트(Regression Test)는 오작동을 일으키며 실패(Fail) 장벽에 가로막힌다. 본 절에서는 기존 시스템과 축적된 데이터 자산의 연속성을 파괴하지 않고도 구조적 진화를 달성하는, 하위 호환성 중심의 버전 관리 기법을 상술한다.

1. 스키마 변경의 유형과 호환성 규명

모든 스키마 설계 변경이 호환성을 파괴하는 것은 아니다. 오라클의 평가 모델과 관련된 스키마 변경은 그 영향도에 따라 크게 세 가지 클래스로 분류된다.

  1. 상위 호환(Forward Compatible) 변경: 예컨대, 새로운 optional 필드의 추가이다. 구형 데이터는 이 필드를 가지고 있지 않지만, 스키마 검증기 입장에서는 선택 사항이므로 기존 결괏값을 무효화시키지 않는다. 오라클 파이프라인 패스가 유지되는 가장 안전한 범주이다.
  2. 하위 호환(Backward Compatible) 변경: 기존에 필수(Required)였던 필드를 선택(Optional)으로 완화하거나 완전히 폐기(Deprecate)하는 조치다. 구형 골든 데이터는 이 필드를 꽉 쥐고 있지만 신형 스키마 구조상 제약조건이 느슨해졌으므로 역시 테스트 통과가 보장된다.
  3. 호환성 파괴(Breaking Changes) 변경: 기존의 optional 필드를 필수(Required)로 승격시키거나, 변수 이름 자체를 롤오버(Rollover)하는 경우다(예: amount \to total_price). 이 경우 직전에 커밋된 골든 데이터셋의 99%는 스키마 불합치 에러를 뱉게 되며, 오라클 시스템의 즉각적인 개입과 데이터 일괄 마이그레이션이 요구된다.

2. Pydantic을 활용한 명시적 스키마 버전 제어 체계

Breaking Changes를 우아하게 다루기 위해서는, 단일 클래스 내에서 조건문을 통해 덕지덕지 수선(Patch)하는 안티 패턴을 경계해야 한다. 대신, 객체 지향의 상속(Inheritance)이나 명시적 버전 라우팅(Version Routing) 아키텍처를 도입해야 한다.

graph TD
    A[골든 데이터셋 로드] --> B{데이터의 버전 태그 파싱}
    
    B -- "version: 1.0" --> C[SchemaV1_Validator]
    B -- "version: 2.0" --> D[SchemaV2_Validator]
    B -- "version 미지정 시" --> C
    
    subgraph Pydantic_Architecture
    C -.->|Legacy 속성 검사| E[class ExtractResponseV1]
    D -.->|New 속성 검사| F[class ExtractResponseV2]
    end
    
    E --> G[구형 테스트 로직 통과 여부 검증]
    F --> H[신형 테스트 로직 통과 여부 검증]
    
    G --> I[테스트 결과 통합 리포트]
    H --> I
    
    style C fill:#f9e7e7,stroke:#ff6b6b
    style D fill:#e6ffe6,stroke:#2ca02c
    style I fill:#f0f8ff,stroke:#4a90e2,stroke-width:2px

이 다이어그램이 뜻하는 엔지니어링 원칙은 명확하다. v2 스키마가 도입되었다 하더라도, 과거 모델이 작성한 1,000개의 v1 기준 골든 데이터셋을 굳이 폐기하거나 무리하게 v2 템플릿으로 끼워 맞출 필요가 없다는 것이다. 오라클은 메타데이터 기반다형성(Polymorphism)을 활용해 “데이터가 쓰여진 당시의 시대적 법률(Schema)“을 적용하여 채점한다. 이를 통해 테스트의 **과거 보존성(Historical Preservation)**이 달성된다.

3. 스키마 폐기(Deprecation)와 일괄 변환 파이프라인

새로운 버전을 무한히 누적시키는 것은 유지보수 관점에서 또 다른 기술 부채가 된다. 보통 신형 스키마 배포 후 시스템이 안정화되면(약 2~4주 경과), v1 데이터셋을 모두 v2 데이터셋으로 일괄 변환식(Migration)을 거쳐 덮어쓰고 v1 파서(Parser) 코드를 삭제하는 EoL(End-of-Life) 처리가 필요하다.

이때 LLM 자체를 ’데이터 트랜스포머(Data Transformer)’로 활용하는 기법이 선호된다. “다음의 v1 골든 데이터 레코드를 읽고, 누락된 필수 필드를 추론하여 v2 구조로 재작성해라“와 같은 이주 스크립트(Migration Prompt)를 백그라운드 CI 잡(Job)으로 실행시키면, 수동 개입 없이 대규모의 오라클 전환을 수행할 수 있다.

4. 소결

JSON Schema는 AI 시스템과 세계관 외곽 경계선 간의 통신 프로토콜이다. 이 프로토콜의 진화 관리는 결코 단순한 rename 리팩토링으로 축소 해석되어선 안 된다. 하위 호환성을 보장해 구형 테스트 케이스 패닉을 면하는 버전 제어기(Version Controller), 그리고 데이터베이스 마이그레이션 도립원칙(Downtime-free Migration)을 오라클 시스템 위로 이식(Graphing)해야만 우리는 중단 없는 혁신을 담보하는 자동화된 AI 생태계를 거머쥘 수 있다.