[swift] Swift Realm에서의 데이터베이스 마이그레이션

Realm은 iOS 앱에서 데이터베이스를 쉽게 구축하고 관리하기 위한 강력한 도구입니다. 때로는 앱의 데이터 모델이 변경되거나 업데이트되어서 데이터베이스 마이그레이션을 수행해야 할 수도 있습니다. 이번 포스트에서는 Swift로 작성된 앱에서 Realm 데이터베이스 마이그레이션을 어떻게 수행하는지 살펴보겠습니다.

마이그레이션 준비하기

데이터베이스 마이그레이션을 수행하기 전에 다음과 같은 준비 작업이 필요합니다:

  1. 앱의 Realm 데이터 모델을 변경합니다. 새로운 속성을 추가하거나, 기존 속성을 수정, 제거하는 등의 변경 작업을 수행합니다.
  2. Realm 데이터베이스 버전을 업데이트합니다. 이는 Realm.Configuration 객체를 사용하여 수행할 수 있습니다. 예를 들어, 새로운 버전 번호를 1로 설정할 수 있습니다.

마이그레이션 수행하기

마이그레이션 작업은 Realm.Configuration 객체의 schemaVersion 속성을 이용하여 수행됩니다. 변경된 데이터 모델의 버전을 현재 데이터베이스 버전과 비교하여, 업데이트가 필요한 경우 마이그레이션을 수행합니다.

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { migration, oldSchemaVersion in
    if oldSchemaVersion < 1 {
        // 마이그레이션 작업 수행
    }
})

Realm.Configuration.defaultConfiguration = config
let realm = try! Realm()

위의 코드에서 schemaVersion은 새로운 데이터 모델의 버전 번호를 나타냅니다. migrationBlock은 이전 데이터베이스 스키마 버전과 새로운 스키마 버전을 비교하여 마이그레이션 작업을 수행하는 클로저입니다.

예를 들어, 이전 버전이 0이었고 새로운 버전이 1인 경우에는 다음과 같은 코드를 사용하여 마이그레이션 작업을 수행할 수 있습니다:

migration.enumerateObjects(ofType: MyObject.className()) { (oldObject, newObject) in
    if oldSchemaVersion < 1 {
        // 새로운 속성 추가
        newObject!["newProperty"] = "default value"
    }
}

여기서는 enumerateObjects(ofType:(_:)) 메서드를 사용하여 이전 버전의 객체를 열거하고, 필요한 마이그레이션 작업을 수행합니다.

마무리

마이그레이션은 Realm 데이터베이스를 업데이트하고 기존 데이터를 새로운 모델에 맞게 변환하는 중요한 작업입니다. Swift에서는 Realm.ConfigurationmigrationBlock 속성을 활용하여 쉽게 마이그레이션 작업을 수행할 수 있습니다. 데이터 모델의 변경이 있을 때마다 앱에 알맞게 마이그레이션 작업을 수행하고, 데이터의 일관성과 앱의 안정성을 유지할 수 있도록 하세요.


참고 자료