#1 ์ด์ ๊ธ
[Android] Room - AutoMigration ๊ธฐ์ด
#1 ๊ฐ์#1-1 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง (Database Schema) [Android] Room - Entity, DAO, Database#1 ์ด์ ๊ธ [Android] Room - ๊ธฐ์ด, INSERT์ DELETE ์ฐ์ต #1 Room ์๊ฐ Room์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ ์ฅ | Android D
kenel.tistory.com
์ ๊ฒ์๊ธ์์ ์ด์ด์ง๋ค.
#2 AutoMigrationSpec
AutoMigrationSpec | Android Developers
androidx.compose.desktop.ui.tooling.preview
developer.android.com
Column ๋๋ Table์ ์ถ๊ฐํ ๋๋ ์ด์ ๊ฒ์๊ธ์ ๋ฐฉ์๋๋ก ํ๋ฉด ๋๋ค. ๋ฐ๋ฉด, Column ์ด๋ฆ์ ๋ณ๊ฒฝ ๋๋ ์ญ์ , Table ์ด๋ฆ์ ๋ณ๊ฒฝ ๋๋ ์ญ์ ๋ฅผ ํ ๋๋ AutoMigrationSpec ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ์ํ๋ค. ๊ทธ๋ ๋ค๋ฉด AutoMigrationSpec์ ๋ฌด์์ธ๊ฐ๋ฅผ ๋ ผํ๊ธฐ์ ์์, ์ ์ด์ ๊ฒ์๊ธ์์ AutoMigrationSpec์ด ํ์์์๋๊ฐ?
AutoMigration์ ๋น๊ต(์ด์ ๊ฒ์๊ธ ์ฐธ์กฐ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋๋๋๋ฐ, Column ๋๋ Table์ด ์ถ๊ฐ๋ ๊ฒฝ์ฐ ์ด์ ์คํค๋ง์ ๋น๊ตํด ๋ฌด์์ด ์ถ๊ฐ๋์๋์ง ๋ณ๋์ ์ค๋ช ์์ด ํ์ ๋๋ค. ๋ฐ๋ฉด, Column์ด๋ Table์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์๊ฑฐ๋ ์์ ์ญ์ ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ฌด์์ด ๋ณ๊ฒฝใ์ญ์ ๋์๋์ง ์ค๋ช ์ด ํ์ํ๋ค. ์๋ฅผ ๋ค์ด, C๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๋ ์ปฌ๋ผ์ ์๋ ์ด๋ฆ์ด A์๋์ง B์๋์ง๋ ํ๋ก๊ทธ๋๋จธ๋ง์ด ์๊ณ ์๊ณ , ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๊ฐ Room์๊ฒ ๋ณ๊ฒฝ์ฌํญ์ ์๋ ค์ฃผ๋ ๋ช ์์ ์ค๋ช ์ด ํ์์ ์ผ๋ก ์๊ตฌ๋๋ ๊ฒ์ด๋ค. ๊ทธ ์๊ตฌ์ฌํญ์ ์ธํฐํ์ด์ค์ ํํ๋ก ๋ง๋ ๊ฒ์ด ๋ฐ๋ก AutoMigrationSpec์ด๋ค.
#3 AutoMigrationSpec์ ์ด์ฉํด Column ์ด๋ฆ ๋ฐ๊ฟ๋ณด๊ธฐ
#3-1 @ColumnInfo์ name ์์ฑ ์์ (User.kt)
...
@Entity(tableName = "user_data_table")
data class User(
...
@ColumnInfo(name = "user_nai", defaultValue = "-1")
var age: Int
)
@ColumnInfo์ name ์์ฑ์ "user_age"์์ "user_nai"๋ก ๋ฐ๊พผ๋ค.
#3-2 @Database์ ์์ฑ๋ค ์์ (UserDatabase.kt)
...
@Database(
entities = [User::class],
version = 3,
exportSchema = true,
autoMigrations = [
AutoMigration(from = 1, to = 2),
AutoMigration(from = 2, to = 3)
]
)
abstract class UserDatabase : RoomDatabase() {
...
}
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ณ๊ฒฝ(#3-1)์ด ๋ฐ์ํ์ผ๋ฏ๋ก, @Database ์ด๋ ธํ ์ด์ ์ version ์์ฑ๊ฐ์ 1๋งํผ ์ฌ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ version 2์์ 3์ผ๋ก๊ฐ๋ AutoMigration์ ๋ช ์์ ์ผ๋ก ํ์ฉํด์ค๋ค (autoMigrations ์์ฑ). ์ฌ๊ธฐ๊น์ง๋ง ์งํํ๊ณ ํ๋ฒ ์ฑ์ ์คํ์์ผ๋ณด๋ฉด AutoMigration Failure: Please declare an interface extending 'AutoMigrationSpec'๋ผ๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
#3-3 AutoMigrationSpec ํด๋์ค ๋ง๋ค๊ณ ์ ์ฉํ๊ธฐ
...
import androidx.room.migration.AutoMigrationSpec
@Database(
...
autoMigrations = [
AutoMigration(from = 1, to = 2),
AutoMigration(from = 2, to = 3, spec = UserDatabase.Migration2To3::class)
]
)
abstract class UserDatabase : RoomDatabase() {
@RenameColumn(tableName = "user_data_table", fromColumnName = "user_age", toColumnName = "user_nai")
class Migration2To3 : AutoMigrationSpec
...
}
์์ ๊ฐ์ ํ์์ผ๋ก ๋ด๋ถ class๋ฅผ ๋ง๋ค๊ณ , AutoMigration์ spec ํ๋กํผํฐ์ ํ ๋นํ๋ค.
#4 ์๋ ํ์ธ

"user_age"๋ผ๋ ์ด๋ฆ์ด์๋ Column์ด "user_nai"๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊ผ๋ค.
#5 ๋๋จธ์ง ์ด๋ ธํ ์ด์
Room ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ | Android Developers
Room ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ ํ๊ฒ ์ด์ ํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
developer.android.com
AutoMigrationSpec์ ๊ตฌํํ๋ ํด๋์ค์ ๋ฌ ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๋ณธ ๊ฒ์๊ธ์์ ์ฐ์ธ @RenameColumn ์ธ์ @DeleteColumn, @RenameTable, @DeleteTable์ด ์๋ค. ์ ๋งํฌ์์ ๊ฐ ์ด๋ ธํ ์ด์ ์ ์ฐ์ ์์๋ฅผ ๋ณผ ์ ์๋ค.
#6 ์์ฝ
Room์ ์ ์ ์์ง๋ง ํ๋ก๊ทธ๋๋จธ๋ ์๊ณ ์๋ ๋ณ๊ฒฝ์ฌํญ์, class์ ํํ๋ก Room์๊ฒ ์๋ ค์ค๋ค.
#7 ์์ฑ๋ ์ฑ
android-practice/room/AutoMigrationSpec at master · Kanmanemone/android-practice
Contribute to Kanmanemone/android-practice development by creating an account on GitHub.
github.com
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Android] Retrofit - ๊ธฐ์ด (1) | 2024.05.29 |
|---|---|
| [Android] Retrofit - ๋ฐฐ๊ฒฝ๊ณผ ๊ตฌ์กฐ (0) | 2024.05.28 |
| [Android] Room - AutoMigration ๊ธฐ์ด (0) | 2024.05.06 |
| [Android] Room - ๋ฐํ ๊ฐ์ด ์๋ INSERT (0) | 2024.02.29 |
| [Android] RecyclerView - notifyDataSetChanged() (1) | 2024.02.28 |