[android] 안드로이드 Room Database의 데이터베이스 스키마 관리

안드로이드 앱을 개발할 때 데이터베이스는 매우 중요한 부분입니다. 안드로이드 앱에서 데이터베이스를 사용하는 방법 중 하나는 안드로이드의 Room Persistence Library를 사용하는 것입니다. Room은 SQLite 데이터베이스 위에 구축된 인터페이스 레벨의 라이브러리로, 간단한 API를 제공하여 데이터베이스 액세스를 쉽게 만들어줍니다.

이 기술 블로그에서는 Room Database의 데이터베이스 스키마를 어떻게 관리하는지에 대해 설명하겠습니다.

1. 데이터베이스 엔티티 정의

Room 데이터베이스를 사용하기 위해서는 데이터베이스 테이블을 나타내는 엔티티를 먼저 정의해야 합니다. 다음은 간단한 사용자 엔티티의 예제입니다.

@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val age: Int
)

위 코드에서 @Entity 어노테이션은 이 클래스가 데이터베이스 테이블의 엔티티로 사용됨을 나타냅니다. @PrimaryKey 어노테이션은 해당 필드가 기본 키(primary key)임을 나타냅니다.

2. 데이터베이스 버전 관리

앱이 계속 업데이트되면 데이터베이스 스키마도 변경될 수 있습니다. Room 데이터베이스의 스키마 변경은 데이터베이스 버전 관리를 통해 이뤄집니다. 데이터베이스 버전을 변경하려면 RoomDatabase를 상속한 추상 클래스를 만들고, 버전을 업데이트하면서 엔티티를 추가하거나 변경할 수 있습니다.

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

위 코드에서 @Database 어노테이션을 사용하여 엔티티와 버전을 정의합니다.

3. 데이터베이스 마이그레이션

데이터베이스 버전을 업데이트하고 스키마를 변경하면 기존 데이터를 보존하기 위해 마이그레이션 작업을 수행해야 합니다. 간단한 마이그레이션 예제는 아래와 같습니다.

val MIGRATION_1_2: Migration = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE User ADD COLUMN email TEXT")
    }
}

위 코드에서 Migration 클래스를 상속한 클래스를 만들어서 업그레이드 전과 후의 스키마 변경을 정의합니다.

데이터베이스 스키마 관리는 안드로이드 Room Database를 사용할 때 중요한 부분 중 하나입니다. 데이터베이스 엔티티를 정의하고, 버전을 관리하고, 마이그레이션을 수행하여 안정적으로 데이터베이스를 유지할 수 있습니다.

참조: Android Developer - Room Persistence Library