[swift] Swift Realm과 Core Data의 데이터 마이그레이션 비교

데이터베이스는 앱 개발에서 중요한 부분입니다. 앱의 데이터를 올바르게 저장하고 저장된 데이터를 효율적으로 관리하는 것은 사용자 경험에 직결됩니다. Swift에서는 Realm과 Core Data가 데이터베이스 관리를 위한 두 가지 주요 옵션입니다.

이번 글에서는 Swift에서 Realm과 Core Data의 데이터 마이그레이션을 비교해보겠습니다. 데이터 마이그레이션은 앱의 데이터 구조나 스키마를 업데이트하는 과정으로, 이전 버전의 데이터를 새로운 데이터 모델에 맞게 변환하는 작업입니다.

Realm 데이터 마이그레이션

Realm은 NoSQL 데이터베이스 도구로, 데이터 모델의 변경이 상대적으로 간단합니다. Realm에서의 데이터 마이그레이션은 보통 세 가지 단계를 거칩니다.

  1. 데이터 클래스 모델 업데이트: 새로운 데이터 모델에 맞게 데이터 클래스를 업데이트합니다. 이전 데이터 모델에 없는 새로운 속성이나 관계를 추가할 수 있습니다.
    class Person: Object {
     @objc dynamic var name: String = ""
     @objc dynamic var age: Int = 0
    }
    
  2. 마이그레이션 블록 작성: 데이터 마이그레이션을 위한 블록을 작성합니다. 이 블록은 저장된 데이터를 새로운 데이터 모델에 맞게 변환하는 역할을 합니다. Realm에서는 migration 매개변수를 통해 이 블록을 제공합니다.
    Realm.Configuration.defaultConfiguration = Realm.Configuration(
     schemaVersion: 2,
     migrationBlock: { migration, oldSchemaVersion in
         if oldSchemaVersion < 2 {
             migration.enumerateObjects(ofType: Person.className()) { oldObject, newObject in
                 // 데이터를 변환하는 로직을 작성합니다.
                 newObject?["name"] = oldObject?["full_name"]
             }
         }
     }
    )
    
  3. 데이터베이스 마이그레이션 실행: 마지막으로, 앱의 시작 시점에 데이터베이스 마이그레이션을 실행합니다. 이렇게 하면 저장된 데이터가 새로운 모델에 맞게 변환됩니다.
    let realm = try! Realm()
    

    Realm은 간단하고 직관적인 데이터 마이그레이션 경험을 제공합니다.

Core Data 데이터 마이그레이션

Core Data는 애플이 제공하는 영구 저장소 프레임워크입니다. Core Data에서의 데이터 마이그레이션은 다소 복잡할 수 있습니다. 데이터 마이그레이션을 위해서는 세 가지 주요 단계를 거쳐야 합니다.

  1. 데이터 모델 업데이트: 새로운 데이터 모델에 맞게 데이터 모델을 업데이트합니다. Xcode의 모델 편집기를 사용하여 직접 데이터 모델을 변경할 수 있습니다.
  2. 마이그레이션 매핑 모델 생성: 마이그레이션 매핑 모델을 생성하여 이전 모델과 새로운 모델 간의 매핑을 정의합니다. 이전 모델의 속성과 새로운 모델의 속성을 연결하는 과정입니다.
  3. 데이터베이스 마이그레이션 실행: NSPersistentContainer를 사용하여 데이터베이스 마이그레이션을 실행합니다. 이 방식은 자동으로 데이터를 변환하는데, 데이터베이스에 저장된 데이터가 새로운 모델에 맞게 자동으로 변환됩니다.

Core Data의 데이터 마이그레이션은 일부 복잡한 단계를 거칠 수 있으며, 실수할 가능성이 있습니다. 그러나 Core Data는 데이터베이스 관리의 다양한 기능과 유용한 도구를 제공하기 때문에 다양한 유형의 앱에 널리 사용됩니다.

비교 요약

Realm과 Core Data는 모두 데이터 마이그레이션을 지원하지만, 두 도구 간에는 몇 가지 차이점이 있습니다.

따라서 프로젝트의 요구 사항과 개발자의 선호도에 따라 Realm이나 Core Data 중 하나를 선택할 수 있습니다.

참고 자료