피드로 돌아가기
Dev.toFrontend
원문 읽기
Custom Decoder 도입으로 4개 앱의 Schema Migration 리스크 제로화
How I rebuilt the Codable migration pattern across 4 iOS apps in 2 hours
AI 요약
Context
Swift의 synthesized Codable Decoder가 프로퍼티 기본값을 무시하고 missing key 발생 시 keyNotFound 에러를 던지는 구조적 한계 존재. 이로 인해 신규 필드 추가 시 구버전 데이터와의 호환성이 깨지며 런타임 Crash가 발생하는 Migration Trap 발생.
Technical Solution
- 모든 기본값 포함 필드에 decodeIfPresent를 적용한 Custom init(from:) 구현
- Nil 반환 시 Nil-Coalescing Operator(??)를 통해 정의된 기본값을 할당하는 Fallback 로직 설계
- 신규 필드뿐 아니라 기존의 모든 Default-valued 필드에 동일 패턴을 적용하여 미래의 스키마 변경에 대비한 Future-proofing 달성
- v1.0.0 스키마 JSON을 v1.0.1 디코더로 복원하여 데이터 정합성을 검증하는 Backwards-compatibility 테스트 케이스 추가
- 개별 앱의 고유한 Persisted Struct 특성을 반영하여 CI 단계에서 Regression을 방지하는 독립적 테스트 구조 구축
실천 포인트
1. Persisted Struct 설계 시 Swift 기본 Codable에 의존하지 않고 Custom init(from:) 구현 여부 검토
2. 모든 기본값 필드에 decodeIfPresent 및 Nil-Coalescing 적용 여부 확인
3. 구버전 JSON 스키마를 활용한 역방향 호환성 테스트 케이스를 CI 파이프라인에 포함
4. 유사한 데이터 구조를 가진 여러 프로젝트에 동일한 Migration 패턴을 전파하여 휴먼 에러 방지