로컬에 특정 데이터를 저장하여 서버에 매번 요청을 보내지 않고도 사용할 수 있는 방법이 Room DB이다. 안드로이드 공식 무넛에 따르면, Room 지속성 라이브러리는 SQLite를 활용하면서 추상화 계층을 제공한다고 한다.
이전 어플을 만들 때, 로컬에 데이터를 저장할 수 있는 이 Room DB에 대해 알지 못해서 개발 후반부에 이를 적용하여 심화 기능을 구현했는데, 이번 어플을 만들 때는 처음부터 유연하게 사용하려고 노력했다. 어플에서 현재 Room DB는 로그인 한 사용자의 access token과 refresh token을 저장하고, access token이 없을 경우 token 재발급 요청을 보내고 다시 로컬 DB를 업데이트 하는 방식으로 이용하고 있다.
Room DB는 data class, 데이터 액세스 개체인 DAO, Database 객체를 사용해서 정의하고, 필요한 파일에서 정의한 후 사용할 수 있다.
나는 DAO에서 insert, update, delete, query 등의 어노테이션을 사용해서 메소드를 정의했다.
@Dao
interface TokenDao {
@Insert
fun insert(token : Token)
@Update
fun update(token : Token)
@Query("SELECT * FROM TokenTable")
fun getAll() : Token
@Delete
fun deleteAll(token : Token)
}
이렇게 정의해 둔 메소드를 나중에 필요한 곳에서 가져다 쓰기만 하면 된다. 로컬 db라는 것이 처음에는 거창해보였지만, 막상 사용해보면 사용성이 아주 좋고 간단하다.
// 비동기 처리
private suspend fun dbInsert(access : String, refresh : String){
withContext(Dispatchers.IO){
tokenDB?.tokenDao()?.insert(Token(access, refresh))
}
}
실제 사용할 때는 다음과 같이 코드를 작성해서 비동기 처리로 작업을 처리했다. 코루틴을 통한 비동기 처리를 한 이유는 로컬 db에 먼저 해당 데이터가 들어가고 난 후에 다음 작업이 이어져야 어플이 로그인 된 유저임을 정확하게 식별할 수 있기 때문이다. 비동기 처리에 대한 (코루틴) 게시물을 완벽하게 정리하고 난 후에 기록할 예정이다.
다음과 같이 room db를 사용하여 로컬에 데이터를 저장하면 속도도 빨라지고 안정성 측면에서도 많은 이익을 볼 수 있다고 한다. 지금은 이 어플의 room db 에서 로그인 토큰만 관리하지만, 개발을 계속 하다 보면 더 많은 데이터를 관리하지 않을까 싶다.
'APP 프로젝트 > Toy project' 카테고리의 다른 글
7. Android toy project 다시 시작! (0) | 2022.11.09 |
---|---|
5. Android 어플 개발 - 중간 정리 (1) | 2022.10.05 |
4. Android LiveData 사용하여 데이터 처리하기 (1) | 2022.09.19 |
3. Android MVVM 패턴의 사용 (0) | 2022.09.16 |
2. Android Retrofit - GET 이용하기 (0) | 2022.09.05 |