Schema Evolution
프로덕션 데이터 시스템에서 스키마를 안전하게 변경하고 하위 호환성을 유지하는 패턴
핵심 개념
Schema Evolution은 프로덕션 테이블의 컬럼 추가·삭제·타입 변경 등을 기존 소비자를 깨뜨리지 않고 수행하는 전략이다. CDC 파이프라인, 카탈로그, 데이터 계약이 모두 스키마 변경에 영향받으므로, 명시적인 진화 전략이 필수다.
CDC에서의 DDL 처리
Change Data Capture 파이프라인은 스키마 변경(DDL)에 특히 취약하다:
- WAL 기반 CDC에서 컬럼 추가/삭제 시 다운스트림 스키마 불일치 발생
- Debezium의 접근: 스키마 변경 이벤트를 별도 토픽으로 전파
- 핵심 원칙: DDL 이벤트와 DML 이벤트의 순서 보장이 필수
Iceberg File Format API
Apache Iceberg의 플러그인 가능한 File Format API:
- 스토리지 포맷(Parquet, ORC, Avro)을 테이블 포맷 레이어에서 추상화
- 새로운 파일 포맷(Parquet Variant 등)을 플러그인 형태로 통합 가능
- 스키마 진화가 파일 포맷 수준까지 유연하게 확장
카탈로그 기반 스키마 관리
Delta Lake 4.1 + Unity Catalog의 Catalog-Managed Tables:
- 카탈로그가 스키마 정의의 권위 있는 소스(source of truth)
- 스키마 변경이 카탈로그를 통해 중앙화되어 추적·감사 가능
- 파일시스템 경로 의존성 제거로 스키마 리팩토링 용이
Parquet Variant Type
반정형 데이터의 스키마 진화를 효율적으로 처리:
- JSON 데이터를 바이너리로 인코딩하여 컬럼나 포맷의 성능 이점 활용
- Shredding: 자주 접근하는 경로를 전용 컬럼으로 분리하여 읽기 효율화
- 스키마가 유동적인 데이터에서 “스키마 선언 없이 쿼리” 가능
데이터 계약과 스키마 진화
50개 프로덕션 구현 분석에서 버전 관리 부재가 5대 안티패턴 중 하나:
- 파괴적 변경(breaking change)이 예고 없이 전파
- Schema-Only 계약(60% 채택)이 최소한의 방어선 — 컬럼명, 타입, nullable 정의
- Semantic 계약으로 확장하면 필드 의미까지 보호
안전한 스키마 변경 원칙
- 추가 전용(additive)이 기본: 컬럼 추가는 안전, 삭제와 타입 변경은 위험
- 기본값 명시: 새 컬럼에 반드시 기본값을 지정하여 기존 소비자 보호
- 점진적 롤아웃: 새 스키마와 구 스키마를 병행 기간 동안 동시 지원
- CDC 순서 보장: DDL 이벤트가 DML 이벤트보다 먼저 소비자에 도달해야 함
- 소프트 삭제 주의: “삭제된” 데이터가 무기한 존재하면 쿼리 복잡성과 데이터 누출 위험
연관 개념
- Change Data Capture — DDL 이벤트 처리
- Data Contracts — 스키마 계약과 버저닝
- Catalog-Managed Tables — 카탈로그 기반 스키마 관리
- Semi-Structured Data — Parquet Variant의 유연한 스키마
- Data Pipeline Fundamentals — 스키마 변경이 백필을 유발하는 패턴
Source: Change Data Capture, Apache Iceberg - Introducing the File Format API, Apache Parquet - Variant Type for Semi-Structured Data, Data Contracts in Practice - What 50 Production Implementations Actually Look Like, The challenges of soft delete