0. 왜 선택했는가

이번 프로젝트에서는 백엔드와의 협업이 없다.

고로, 타이머로 공부 시간을 측정한 후 적게 되는 노트를 저장하려면 로컬만이 가능한 선택지였다. 게다가 타이머 앱이 굳이 인터넷을 요구할 필요는 없지 않은가? 오프라인 엑세스가 가능해야 하므로 더더욱.

Android에서 가장 유용하게 쓰이는 Room DB

돌이켜 생각해보니 단 한 번도 Room DB를 사용해본 적은 없었다. sharedPreference 정도만 사용해봤을 뿐.

이번 기회에 잘 공부해서 사용해보기로 했다.

Save data in a local database using Room  |  App data and files  |  Android Developers


1. Room DB

SQLite의 전체 기능을 사용할 수 있는 추상화 된 DB라고 한다. 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 ORM(Object Relational Mapping)라이브러리라고 보면 된다.

쉽게 말하면, DB 인스턴스를 Kotlin 객체로 매핑해주는 역할을 수행하는 라이브러리이다.

2. 왜 쓰는가? 그냥 SQLite 쓰지.

  1. Room은 LiveData와 RxJava를 위한 Observation으로 생성하여 동작할 수 있다.
  2. 보일러 플레이트 코드를 잡을 수 있다.
  3. SQLite와 달리, 쿼리 에러를 컴파일 타임에 잡아낼 수 있다.

⇒ Android에서 내장 DB를 다룰 때 이걸 쓰는게 좋다니까 Room DB를 쓰기로 했다.


3. Gradle 설정하며

Room DB도 annotation을 많이 사용하는 라이브러리다보니, ksp가 필요했다.

예전에 프로젝트를 진행할 때, 구 레퍼런스의 소스코드를 참고하며 kapt를 사용해서 gradle 설정을 했다가 ksp로 마이그레이션 하느라 애를 먹었던 기억이 있다.