오늘은 Room DB의 마이그레이션에 대해 알아보자!
내가 실제로 간단한 메모앱을 만들면서 경험해 본 사례인데, 단순히 entity만 수정하여 빌드하고 앱을 업데이트하게 된다면?
Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number. 이러한 오류와 함께 앱이 종료되는 경우를 많이 보게 된다.
에러 로그만 잘 봐준다면 쉽게 해결할 수 있다!
1. 데이터베이스 버전 올리기
Database 파일의 Database Version을 올려주자
@Database(
entities = [MemoEntity::class],
version = 1, // 이 부분을 1 -> 2로 변경하면 된다.
exportSchema = true
)
룸 버전을 올려주고 앱을 다시 빌드 하면
A migration from 1 to 2 was required but not found. Please provide the necessary Migration path via RoomDatabase.Builder.addMigrations(Migraion...) 이라는 에러가 발생하면서 앱이 또 종료되게 된다.
마이그레이션이 없다는 말인데 여기서 마이그레이션이란?
데이터나 소프트웨어를 한 시스템에서 다른 시스템으로 이동하는 것을 뜻한다!
마이그레이션이 없으므로 마이그레이션 코드를 작성해 주도록 하자
2. 마이그레이션 코드 작성
memo_table에 edittable열이 추가되는 마이그레이션 코드를 작성해 보자!
// 데이터베이스의 버전이 업그레이드되는 경우 여기에 마이그레이션을 추가합니다.
private val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
// memo_table 테이블에 editable 열을 추가합니다.
database.execSQL("ALTER TABLE memo_table ADD COLUMN editable INTEGER NOT NULL DEFAULT 0")
}
}
memo_table에 edittable 열을 추가하면서 NOT NULL 제약 조건에 기본 값을 넣어주는 쿼리를 작성해서 넣어주었다.
3. 마이그레이션 추가
작성한 마이그레이션 코드를 이제 적용시켜 보자
.addMigrations(MIGRATION_1_2) // 마이그레이션 설정 추가
오늘은 안드로이드 Room DB 마이그레이션의 기본적인 부분에 대해 알아보았다!
마이그레이션 같은 처리는 실제로 매우 매우 중요한 작업이다 보니 실제 배포 전 충분한 테스트를 해보고 사용하는 것이 좋다 😀
'📱 Android' 카테고리의 다른 글
[Android] 프로가드(Proguard)에 대해 (0) | 2023.11.29 |
---|---|
[Android] invalidate()와 requestLayout()의 차이 (0) | 2023.11.21 |
[Android] 캐시에 대해 (0) | 2023.11.03 |
[Android] include, merge 태그에 대해 (0) | 2023.10.26 |
[Android] Manifest Placeholder에 대해 (0) | 2023.10.20 |