안드로이드는 예전에 겉핥기 식으로 한번 배우고 하질 않다가 요번에 앱을 하나 만들어보려고 도전 하고 있다.
데이터베이스를 선택해야 하는데 Room, Realm, Firebase 중에 고민 하다가 Room을 이용해 만들어 보기로 했다.
Firebase는 가장 편해 보이긴 한데 트래픽에 따라 비용이 발생할 수도 있어서, 내장 DB 쪽을 선택했다.
Realm과 Room중에 Room을 선택한 것은 쿼리가 들어가기 때문이다.
아무래도 쿼리가 더 익숙하다 보니 이쪽을 선택했고, CRUD 하는 것도 보니 쉽게 보였기 때문이다.
그러나 이는 내 오산이었다. CRUD는 편한데 일단 데이터를 보는 방법에서 막혔다. 인터넷 찾아보니 보는 방법 두개가 나
왔고 둘 중 쫌 더 Room에 가까운 법을 선택했다.
안드로이드 Room Database Viewer 시각화 보기
먼저 이 글을 작성하는 이유는 Room을 검색하면 Room 사용법,CRUD 예제등은 많이 나오지만, 실제로 앱을 만들기 위해 필요한 데이터 보는 방법은 거의 없기 때문이다. 먼저 Room에 대해 간단히 알아보
sjhp.tistory.com
여기까지만 해도 괜찮았는데 내장 DB를 쓸때 가장 중요한 데이터 내보내기/가져오기에서 다시 막혔다.
아무리 찾아봐도 Room에서 지원해주는 기능이 없었다.
https://developer.android.com/training/data-storage/room/migrating-db-versions?hl=ko
Room 데이터베이스 이전 | Android 개발자 | Android Developers
Room 라이브러리를 사용하여 데이터베이스를 안전하게 이전하는 방법 알아보기
developer.android.com
데이터베이스 이전 글을 보면 데이터 내보내기/가져오기 가 아니라 마이그레이션 됐을 때 데이터 가져오기를 말하는 것
이다. (이것도 방식을 보면 굉장히 구식이다.)
내가 필요한 기능은 사용자가 기기를 바꾸거나 등의 일을 할 때 필요한 데이터 내보내기/가져오기 기능이다.
앱 미리 채우기 내용을 보면 .createFromAsset("database/myapp.db") 를 통해 db를 가져올 수 있다 되어있는데
Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
.createFromAsset("database/myapp.db")
.build()
정작 이 db파일이 어떤 형식인지, 어떤 규칙으로 구성되어야 가져 올수 있는지에 (예를 들어 JSON) 대한 내용이 전혀 없다.
그런데 웃긴 건 스키마 내보내기 기능이 있는 데
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments += ["room.schemaLocation":
"$projectDir/schemas".toString()]
}
}
}
}
이걸로 저장되는 것은 JSON형식으로 저장된다. 불러오는 건 db파일을 불러와야 하는데..
그리고 저장된 스키마를 보면 데이터 insert 쿼리는 빠져있다. 이게 room_master_table 이라는 곳에 저장되어 있는 건지, 아니면 순전히 뼈대만 내보내는 건지도 불러와 보질 못해서 모르겠다.
이 내용을 찾아서 글로 정리할 생각이었는데 도저히 모르겠다. 샘플코드를 봐도 순 마이그레이션 내용밖에 없다.
결국 내가 내린 결론은 이런 디테일한 기능을 사용하려면 Room 라이브러리가 아니라 SQLite를 직접 사용해야 한다는 것이다.
문서에 보면 SQLite를 직접 사용해도 되지만 권하지 않는다 하는 데 어쩔 수 없는 것 같다.

내가 잘 몰라서 못 찾은 거 일수도 있는데, 이것 때문에 진도를 너무 못나가서 일단은 건너띄려 한다.
이 글은 지금까지의 삽질 내용을 스스로 정리 하려 작성 한 글이다.
혹시 이 글을 보시고, 방법을 아신다면 저에게 공유 좀 부탁드려요.
'안드로이드 > room' 카테고리의 다른 글
안드로이드 Room Database Viewer 시각화 보기 (0) | 2020.08.08 |
---|