RealmDB를 사용해서 안드로이드 앱을 만들다보면, Migration을 해야하는 경우가 생기는데요.
특히 배포가 된 앱이라면 더욱 그렇습니다.
오늘은 이 Migration작업에 대해서 정리해보도록 하겠습니다.
1. 데이터모델 Class
오늘 Migraion을 해볼 데이터 모델클래스는,
그동안 많이 사용해 왔던 Student Class입니다.
여기서 int타입의 StudentNumber를 추가해 보겠습니다.
아래와 같이 String인 StudentNumber를 넣어서 추가하였습니다.
studentNumber는 필수요소여서, Required attribute을 추가하였습니다.
2. Migration Class생성
그러면, Migration을 정의할 Class를 생성해 보겠습니다.
Migraion 클래스를 생성하면서, implement해야할 것은 RealmMigraion interface인데요.
구현해야할 method는 migrate입니다.
실제로 구현하기 전에 잠시, RealmMigration interface의 소스코드먼저 보고 가겠습니다.
친절하게도, 어떤 패턴으로 구현해야 할지를 설명해주네요.
그리고, 개발할때는 deleteRealm(RealmConfiguration)을 쓰면, migration할 필요없이 db파일을 삭제할수있다고도 친절히 알려주고 있습니다.
설명이 길어서 두 장의 이미지로 짤랐는데요.
아래에서보면 writeTransaction으로 wrap되어있으므로, 따로 transaction으로 감쌀 필요가 없다고 하네요.
그럼 이제 구현해보도록 하겠습니다.
위에서 제시해준 Pattern을 사용할텐데요.
저희는 migration이 이번이 처음이므로,
oldVersion이 0일 경우를 구현해보겠습니다.(즉 Version0 => Version1 로 마이그레이션 한 경우이겠죠.)
get()메소드에 인자로 migration할 데이터모델클래스명을 넣어주고요.
(만약 데이터 클래스를 생성한다면, create()메소드를 사용하면 됩니다.)
addField()메소드로 추가한 필드를 넣어주는데요.
기존의 데이터를 수정해야 할때는 transform()메소드를 사용하면 됩니다.
새로 들어가는 studentNumber는 필수사항이므로, 기존의 데이터에도 random하게 넣어주도록 하였습니다.
3. RealmConfig 빌드
이제 Realm 환경설정을 빌드해서, getInstance에 넘겨주기만 하면 되겠습니다.
아래와 같이 schemaVersion은 1로 버전을 올릴때마다 수정해주어야 하구요,
migration에는 위에서 작성했던 Migration의 객체를 생성해서 넘겨줍니다.
이제 다 준비가 다 되었으니, 한번 UI에서 테스트 해보겠습니다.
아래와 같이, 잘 적용되어서 기존 학생들의 학번도 random하게 잘 들어갔습니다.
5. 개발중일때는 deleteRealm
Migration이 중요하지만, 개발중일때는 역시 DB파일을 지우는 것이 가장 효율적이고 빠른데요.
마지막으로 deleteRealm을 하는 방법도 정리하겠습니다.
메소드 명이 매우 직관적인데요. deleteReamIfMigrationNeeded입니다.
아래와 같이 사용하면, 개발하면서 이렇게 저렇게 수정해 볼 때 매우 편리합니다.
추가적으로 마이그레이션이 필요할때 뿐만이 아니라,
DB파일을 아에 삭제하고 새롭게 시작할 때는 아래와 같이 deleteRealm메소드를 사용해주면 됩니다.
그럼, 이 메소드의 소스코드를 보면서 글을 마무리 하겠습니다.
소스코드의 설명에는 인자로 받은 configuration에 정의된 Realm파일을 삭제한다고 나와있구요.
이 메소드를 부르기 전에 Realm객체가 곡 closed된 상태여야한다고 합니다.
'Android 개발 > Room, Realm, Databases' 카테고리의 다른 글
RoomDB 에서 One to Many 관계 구현하기 # 채팅 DB 구현 (0) | 2023.04.07 |
---|---|
Room DB 사용방법 총정리 # Android SQLite (0) | 2023.04.04 |
Room DB 에 DB파일 넣어서 사용하기 # 로컬데이터베이스 SQLite (0) | 2022.11.04 |
Room을 이용해서 Offline Cache 구현하는 방법 정리 #Android (0) | 2020.05.14 |
미리 작성된 Realm 데이터베이스를 앱에 넣어서 사용하기 (0) | 2017.06.19 |
Hot Observable 과 Cold Observable은 무엇인가요? (0) | 2017.03.19 |
Realm 에서 Thread Error 없이 데이터 조회후 삭제하기 (0) | 2017.03.08 |
Realm Module 을 이용해서 멀티 Schema 활용하기 (0) | 2017.02.25 |
Android의 Realm 데이터베이스 파일 은 특별한 곳에 있지 않다 (0) | 2017.01.10 |
안드로이드 에서 쓰는 핫한 DB, Realm Part1 (2) | 2016.12.24 |
댓글