400일차 - Android Room Data Export(Backup) / Import(Recovery) (2)

2022. 2. 8. 23:50Diary/300~400

https://developer.android.com/training/data-storage/room/migrating-db-versions?hl=ko 

 

Room 데이터베이스 이전  |  Android 개발자  |  Android Developers

Room 라이브러리를 사용하여 데이터베이스를 안전하게 이전하는 방법 알아보기

developer.android.com

안드로이드 룸을 사용하면서 데이터를 백업하고 복구하는 기능이 필요해서 시행착오를 거치고 방법을 찾았다. Android Room에서 데이터를 백업하고 복구하는 방법이 변경되었고, 이는 2.2.0 버전부터 적용이 된다. 나는 2.4.0 버전을 사용 중이라서 변경된 백업, 복구 방법을 사용했다.

 

 

우선 MIGRATION_1_2 변수를 보면, database.execSQL() 메서드를 사용하는 것을 볼 수 있다. 마이그레이션 하면서 데이터를 어떻게 적용시킬것인가? 에 대한 쿼리문 작성이다. 나는 기존에 있는 데이터는 전부 날리고 새롭게 복구하는 데이터를 넣는 방식을 채택했다. 장고처럼 자연스럽게 기존에 있는 데이터와 병합하기에는 단순한 쿼리문으로는 어렵기 때문에 시간대비 코스트를 생각해서 쿼리문을 작성했다.

 

Room은 기본적으로 메인쓰레드에 관여하지 않는다. 다만, allowMainThreadQueries 메서드를 사용하면 해당 인스텐스는 메인쓰레드에 관여할 수 있게 된다. 기본 가이드에서는 allowMainThreadQueries 사용을 권장하지 않는다.

 

중요한건 addMigrations() 메서드이다. 이 메서드를 통해 데이터를 복구할 수 있다.

 

dbSave와 dbUpdate 메서드를 보면, 왜 저렇게 나뉘었는지에 대해서 의문점이 들 수 있다. 나도 직접 해보고나서 알았는데, 데이터를 백업할 때, 파일을 내보내야하는데 이 때, db파일은 db, db-shm, db-wal 이 3가지로 분할되어있다. 이 3가지 파일을 db 파일 1개로 병합해서 내보내기 위해서는 룸을 한번 내렸다가 다시 올려야한다.

그리고나서, 복구를 진행할때는 기본의 Room을 내리고 새로운 인스텐스로 다시 올려야한다.

 

 

 


오늘을 기점으로 400일의 여정이 끝이났다.

계속해서 글을 작성할지, 아니면 휴식기를 가질지 고민이 많았는데, 다가오는 10월 29일에 결혼을 하게되면서 물리적인 시간이 너무 부족해졌다. 이참에 휴식기를 가지고 여유가 생길 때마다 블로그 글을 작성하려고 한다.