Realm은 iOS 앱에서 데이터베이스를 쉽게 구축하고 관리하기 위한 강력한 도구입니다. 때로는 앱의 데이터 모델이 변경되거나 업데이트되어서 데이터베이스 마이그레이션을 수행해야 할 수도 있습니다. 이번 포스트에서는 Swift로 작성된 앱에서 Realm 데이터베이스 마이그레이션을 어떻게 수행하는지 살펴보겠습니다.
마이그레이션 준비하기
데이터베이스 마이그레이션을 수행하기 전에 다음과 같은 준비 작업이 필요합니다:
- 앱의 Realm 데이터 모델을 변경합니다. 새로운 속성을 추가하거나, 기존 속성을 수정, 제거하는 등의 변경 작업을 수행합니다.
- 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.Configuration
의 migrationBlock
속성을 활용하여 쉽게 마이그레이션 작업을 수행할 수 있습니다. 데이터 모델의 변경이 있을 때마다 앱에 알맞게 마이그레이션 작업을 수행하고, 데이터의 일관성과 앱의 안정성을 유지할 수 있도록 하세요.
참고 자료