ROOM DB를 Migration 하자

송규빈·2023년 2월 26일
2
post-thumbnail
post-custom-banner

💡 리브랜딩과 함께 카테고리 개편 작업을 하며 Room DB Migration을 했던 내용

개요


우리 앱에서는 카테고리 및 여러 로컬 데이터를 Room DB로 관리하고 있다.

Room Lib를 사용하면 DB 스키마를 쉽게 업그레이드 할 수 있지만 새로운 DB 버전으로 업그레이드 할 때마다
마이그레이션 작업이 필요하다.

카테고리 개편이 되면서 DB 스키마를 변경해야 할 일이 있어서 Room DB Version을 올렸고, 이로인해 버전 업그레이드를 위해 Migration을 수행했다.

Migration


Room에서 Mirgration을 수행할 때는 Room에서 제공하는 Migration 클래스를 사용하여 DB 스키마를 업그레이드 한다.

RoomDatabase.Builder 객체의 addMigrations() 메서드를 사용하여 Migration 객체를 하고, fallbackToDestructiveMigration() 메서드를 사용하여 DB 스키마를 업그레이드할 수 없을 때 데이터베이스를 삭제하고 다시 생성할 수 있게 했다.

시행착오


처음엔 단순하게 스키마 변경사항을 적용하고 Version만 올리면 끝인 줄 알았다,,,,
그렇게 빌드를 한 순간 아래와 같은 에러가 나왔고 카테고리 데이터가 하나도 보이지 않았다.

그래서 공식문서를 천천히 살펴본 후 작업을 진행했다. 겉보기에는 엄청 간단하고 라이트(?) 한 작업인 줄 알았으나 Van이 말씀하신 대로 큰 이슈를 초래할 수도 있는 작업이었다..!!
(섣불리 판단하지 말기,,,개발할 내용 미리 꼼꼼하게 살펴보기,,,,)

Version History 내용은 json 파일로 내보내어 관리를 하려고 했지만. 파일까지 만들어가며 관리할만한 내용은 아니라고 말씀주셔서 해당 내용은 삭제하였고 대신 버전 상수명으로 대략적으로 작업 내용을 적기로 하였다.

세부사항


DB Version

  • DB Version은 상수로 관리하고 Naming은 History를 요약하여 알 수 있게 짓기로 하였다.

Migration 클래스

Migration은 버전이 올라갈 때마다 해당 버전에 맞게 Migration 클래스를 관리해야하기 때문에 한 곳에서 관리 중이다.

RoomDatabase.Builder Callback

RoomDatabase.Callback() 은 따로 fun으로 빼서 관리하여 좀 더 깔끔한 코드를 제공하려했다.

Before

After

profile
🚀 상상을 좋아하는 개발자
post-custom-banner

0개의 댓글