[swift] 코어 데이터 마이그레이션

코어 데이터(Core Data)는 iOS 앱에서 데이터를 관리하고 저장하기 위해 사용되는 프레임워크입니다. 앱의 데이터 모델이 변경되는 경우, 이전 버전의 데이터와의 호환성 문제가 발생할 수 있습니다. 이때, 코어 데이터 마이그레이션을 통해 이전 데이터를 새로운 데이터 모델에 맞게 변환할 수 있습니다.

마이그레이션 종류

코어 데이터 마이그레이션은 크게 두 가지로 분류됩니다.

  1. 경량 마이그레이션(Lightweight Migration)
  2. 수동 마이그레이션(Manual Migration)

경량 마이그레이션 (Lightweight Migration)

경량 마이그레이션은 새로운 데이터 모델과 이전 데이터 모델 사이에서 속성(attribute), 엔티티(entity)의 추가 및 삭제 등과 같은 단순한 변경 사항이 있는 경우에 사용됩니다. 이 경우, 코어 데이터가 자동으로 마이그레이션을 처리합니다.

경량 마이그레이션을 사용하는 경우에는 데이터 스토어(coordinator) 설정 시 아래와 같이 NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption 옵션을 활성화하는 것이 중요합니다.

let options = [NSMigratePersistentStoresAutomaticallyOption: true,
               NSInferMappingModelAutomaticallyOption: true]
persistentStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType,
                                              configurationName: nil,
                                              at: url,
                                              options: options)

수동 마이그레이션 (Manual Migration)

수동 마이그레이션은 경량 마이그레이션으로 해결할 수 없는 복잡한 데이터 모델 변경에 사용됩니다. 이 경우, 수동으로 데이터 모델 간의 변환 매핑을 구현해야 합니다.

수동 마이그레이션을 위해선 다음과 같은 과정을 따라야 합니다.

  1. 이전 데이터 모델과 새로운 데이터 모델 사이의 변환 매핑 파일 생성
  2. 이전 데이터 모델에서 새로운 데이터 모델로 데이터를 이동
  3. 코어 데이터 스키마(coordinator)에 새로운 데이터 모델 설정
let sourceURL = Bundle.main.url(forResource: "OldDataModel", withExtension: "momd")!
let destinationURL = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
let mappingModel = NSMappingModel(from: [Bundle.main], forSourceModel: sourceModel, destinationModel: destinationModel)!

let migrationManager = NSMigrationManager(sourceModel: sourceModel, destinationModel: destinationModel)
try migrationManager.migrateStore(from: sourceURL, sourceType: NSSQLiteStoreType, options: nil, with: mappingModel, toDestinationURL: destinationURL, destinationType: NSSQLiteStoreType, destinationOptions: nil)

위의 예시 코드에서 sourceModel은 이전 데이터 모델의 모델 객체, destinationModel은 새로운 데이터 모델의 모델 객체입니다.

마무리

코어 데이터 마이그레이션은 데이터 모델 변경 시 호환성 문제를 해결하기 위해 중요한 기능입니다. 경량 마이그레이션은 단순한 변경 사항에 대해서는 자동으로 처리되지만, 복잡한 변경 사항에 대해서는 수동으로 처리해야 합니다. 이를 통해 앱의 데이터 관리 및 업그레이드 과정을 원활하게 수행할 수 있습니다.

더 자세한 사항은 Apple 공식 문서를 참고하세요.