알람 DB 구조 수정
개발 중 기존 알람 설정 기능의 반복 횟수와 간격이 쓸모가 없다는 생각이 들었다.
그와 반대로 진동과 전체화면 알람 설정과 같은 중요한 데이터가 DB에 빠져있었다.
이래서 처음에 꼼꼼하게 설계를 해야된다고 하나보다.
기존 코드의 구조를 뜯어고쳐야 한다는 것은 그리 좋은 일이 아니지만, 운좋게도 빠져야 할 컬럼의 수와 추가되어야 할 컬럼의 수가 같아서 RENAME 해주기로 했다.
기존 컬럼을 DROP하고 새 컬럼을 ADD 하는게 가장 좋겠지만, SQLite에선 컬럼을 DROP시키는 기능을 제공하지 않기 때문에 컬럼을 DROP하려면 컬럼이 빠진 새 테이블을 만들고 데이터를 전부 복사해야 한다.
이 대작업보단 이름만 바꿔주는게 훨씬 낫다 생각해서 그냥 RENAME을 사용했다.
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
Log.i(TAG, "onUpgrade: ")
for(version in oldVersion until newVersion) {
migrate(db, version)
}
}
private fun migrate(db: SQLiteDatabase?, oldVersion: Int) {
Log.i(TAG, "migrate: Migrate DB ver.$oldVersion to ver.${oldVersion + 1}")
when(oldVersion) {
1 -> { //에버그레이스 추가
db?.insert(Item.TableInfo.TABLE_NAME, null, ContentValues().apply {
put(Item.TableInfo.COLUMN_NAME_ITEM, "에버그레이스".blankRemovedString)
put(Item.TableInfo.COLUMN_NAME_ENABLE, 0)
put(Item.TableInfo.COLUMN_NAME_FK_ITEM_ALARM, "NULL")
})
}
2 -> { //Alarm에 OffTime 추가
db?.execSQL("ALTER TABLE ALARM ADD COLUMN ${Alarm.TableInfo.COLUMN_NAME_OFFTIME_START} INTEGER DEFAULT 0") //ALTER TABLE은 NOT NULL 컬럼 추가가 안된다고 함
db?.execSQL("ALTER TABLE ALARM ADD COLUMN ${Alarm.TableInfo.COLUMN_NAME_OFFTIME_END} INTEGER DEFAULT 0")
}
3 -> { //RepeatTimes를 Vibrate로, Interval을 Fullscreen으로 변경
db?.execSQL("ALTER TABLE ALARM RENAME COLUMN RepeatTimes TO ${Alarm.TableInfo.COLUMN_NAME_VIBRATE}")
db?.execSQL("ALTER TABLE ALARM RENAME COLUMN Interval TO ${Alarm.TableInfo.COLUMN_NAME_FULLSCREEN}")
}
}
}
따로 포스팅하진 않았지만, 2번의 DB 구조 수정이 있었다.
SQLite에서 VERSION CODE를 통해 현재 DB의 버전을 제공해주기 때문에, 이를 활용하여 현재 DB 버전이 낮을 경우 다음 버전으로 업그레이드 하는 함수를 작성했다.
이 구조를 사용하면 어떤 버전에서 업데이트하든 최신상태로 업그레이드 할 수 있다.
DB 버전이 3에서 4로 올라갈 때 컬럼명을 바꿔주도록 코드를 추가했다.
class Alarm {
var id: Int = -1
var filePath: String = ""
var volume: Int = 100
var vibrate: Boolean = false
var fullscreen: Boolean = false
var offTimeStart: Int = -1
var offTimeEnd: Int = -1
...
}
알람 Entity의 변수명과 타입도 수정해줬다.
알람 설정 창의 반복 항목을 제거하고 진동과 전체화면을 추가했다.
다음부터는 기능을 넣을 때 이게 정말 필요한 기능인지 생각해보고 넣는 습관을 가져야겠다.
잘못된 기능을 추가하면 추가하는데도 비용이 발생하고 제거하는데도 비용이 발생하는만큼 필요한 기능만 딱딱 추가하도록 잘 설계해야겠다.
'Projects > It's My Waye' 카테고리의 다른 글
[It's My Waye] 14. 진동, 전체화면 알람 기능 추가 (0) | 2022.05.31 |
---|---|
[It's My Waye] 13. 알람음 선택, 볼륨 조절 기능 추가 (0) | 2022.05.31 |
[It's My Waye] 11. 알람 기능 구현 - 알람 제어 (0) | 2022.04.27 |
[It's My Waye] 10. 알람 기능 구현 - 알람 켜기 (0) | 2022.04.27 |
[It's My Waye] 9. 알람 화면 기능 구현 (0) | 2022.02.09 |