[Develop]/[Android]

[Android] 개발 시작하기 - RoomDB 사용하기 (2)

lg2ivl3 2025. 8. 26. 20:33
 

Room을 사용하여 로컬 데이터베이스에 데이터 저장  |  App data and files  |  Android Developers

Room 라이브러리를 사용하여 데이터를 유지하는 방법 알아보기

developer.android.com

 

 

[Android] 개발 시작하기 - RoomDB 사용하기 (1)

Room DB란?Room DB는 안드로이드 앱에서 SQLite 데이터베이스를 사용하기 위한 ORM(Object-Relational Mapping) 라이브러리입니다. 쉽게 말해, Room은 SQLite 데이터베이스와 앱 코드(주로 코틀린 또는 자바) 사이

lg2ivl3.tistory.com

이전의 포스트에 이어서 "데이터베이스 클래스", "데이터 항목", "데이터 액세스 객체(DAO)"에 대해 알아보자.

RoomDB의 구조

먼저 각 구성요소에 대한 공식 홈페이지에서의 설명은 아래와 같다.

* 데이터베이스 클래스: 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 합니다.
* 데이터 항목: 앱 데이터베이스의 테이블을 나타냅니다.
* 데이터 액세스 객체(DAO): 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공합니다.

 

데이터 항목

가장 먼저 데이터 항목에 대해 알아보자. 데이터 항목에 대한 예시는 아래와 같다.

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

먼저 Entity와 PrimaryKey라는 용어를 보아하니, "ER 모델"의 Entity와 Entity의 Attribute를 정의하는 기능을 갖는 것을 "데이터 항목"이라고 한 듯 한다.
PrimaryKey와 Entity를 설명하는 것은 본 포스트의 주된 목적이 아님으로 좀 더 자세한 설명은 아래 링크를 참고하길 바란다.

 

Room 항목을 사용하여 데이터 정의  |  App data and files  |  Android Developers

Room 라이브러리의 일부인 항목을 사용하여 데이터베이스 테이블을 생성하는 방법 알아보기

developer.android.com

 

데이터 액세스 객체(DAO)

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}

데이터 항목이 Entity의 정의라면, DAO는 데이터를 검색, 삽입, 업데이트, 삭제하는 등의 데이터와의 상호작용을 보조하는 듯 하다. 기본적으로 검색은 SQL을 사용하여 사전에 정의해두고 함수 호출시 SQL query의 실행 결과를 반환하고, 수정과 삭제는 @Insert, @Delete, @Update로 수행하는 것으로 보인다.
좀 더 자세한 사용 방법은 아래 링크에서 확인 가능하다.
 

 

Room DAO를 사용하여 데이터 액세스  |  App data and files  |  Android Developers

Room 라이브러리의 일부인 DAO(데이터 액세스 객체)를 사용하여 데이터베이스 테이블을 수정하는 방법 알아보기

developer.android.com

 

데이터베이스

앞서서 데이터 항목을 정의하는 방법과 해당 데이터와의 상호작용을 위한 데이터 액세스 개체(DAO)가 있었다면, 이번에는 사전에 정의한 데이터 항목으로 이루어진 데이터베이스를 갖는 클래스를 정의하는 예시이다.

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}


이번 포스트에서는 RoomDB에서 데이터베이스를 구현하는 방법을 간단하게 알아보았다.

실제 앱에서 데이터베이스 클래스를 사용하고, 앱에서 결과를 확인하는 디테일은 다음 포스트에서 이어서 하도록 하겠다.