플러터(Flutter)에서 데이터베이스 라이브러리로 사용되는 ObjectBox는 데이터 모델의 변경이 필요한 경우에 대응하는 몇 가지 방법을 제공합니다. 데이터 모델 변경에 대응하는 방법은 크게 세 가지로 나눌 수 있습니다.
1. AutoMode
ObjectBox의 AutoMode를 사용하면 데이터 모델의 변경에 대한 대다수의 작업을 자동으로 처리할 수 있습니다. AutoMode는 데이터베이스를 초기화할 때 데이터 모델에 대한 스키마 정보를 생성하고 업데이트합니다. 따라서 데이터 모델이 변경되면 자동으로 스키마를 업데이트하고 적용할 수 있습니다.
AutoMode를 사용하려면 다음 코드를 ObjectBox 초기화 부분에 추가하면 됩니다.
var store = Store(getObjectBoxModel(), directory: getApplicationDocumentsDirectory().path, mode: StoreMode.Auto);
자동 모드를 사용하면 일반적인 데이터 모델 변경에 대응하는 작업을 자동으로 처리할 수 있지만, 일부 상황에서는 수동으로 스키마를 업데이트해야 할 수도 있습니다.
2. Manual Mode
수동 모드(Manual Mode)를 사용하면 데이터 모델 변경에 대한 제어를 더욱 세밀하게 할 수 있습니다. 수동 모드에서는 데이터 모델의 변경 후 ObjectBox에 스키마 업데이트를 알려주어야 합니다. 수동 모드를 통해 데이터 모델 변경에 대응하기 위해 다음 두 가지 절차를 따릅니다.
2.1. 스키마 업데이트
데이터 모델의 변경 후에는 flutter packages pub run build_runner build
명령을 실행하여 ObjectBox의 스키마를 업데이트해야 합니다. 이 명령을 통해 변경된 데이터 모델을 ObjectBox가 인식할 수 있도록 합니다.
2.2. 데이터베이스 변경 적용
스키마 업데이트 이후에는 변경된 스키마를 ObjectBox에 적용해야 합니다. 적용은 다음과 같은 방법으로 수행할 수 있습니다.
var store = Store(getObjectBoxModel(), directory: getApplicationDocumentsDirectory().path, mode: StoreMode.Manual);
store.version.withinTransaction((tx) {
var box = Box<MyObject>(tx);
// 데이터베이스 변경 작업 수행
tx.commit(); // 변경 사항 커밋
})
3. Versioned Mode (추천)
Versioned Mode는 데이터베이스 스키마 변경을 더욱 견고하게 처리할 수 있는 방법입니다. Versioned Mode에서는 변경된 데이터 모델의 스키마 변경 사항을 명시적으로 선언하고, 이를 통해 데이터베이스 업데이트를 수행합니다.
Versioned Mode의 사용을 위해 다음과 같은 절차를 따릅니다.
3.1. 데이터 모델 버전 표시
각 데이터 모델에 @Entity()
어노테이션을 사용하여 버전을 표시합니다.
@Entity()
class MyObject {
@Id()
int id;
// 데이터 모델 버전
@Property(uid: 1) // 변경될 수 있는 속성에 uid를 부여
String name;
}
3.2. Versioned 모드로 데이터베이스 초기화
Versioned 모드로 데이터베이스를 초기화하면 ObjectBox는 데이터 모델의 버전을 추적하고, 버전이 변경되면 자동으로 데이터베이스 업데이트를 수행합니다. Versioned 모드로 데이터베이스를 초기화하는 방법은 다음과 같습니다.
var store = Store(getObjectBoxModel(), directory: getApplicationDocumentsDirectory().path, mode: StoreMode.Versioned);
결론
ObjectBox에서 데이터 모델의 변경에 대응하는 방법은 AutoMode, Manual Mode, 그리고 Versioned Mode를 사용하는 세 가지 방법이 있습니다. AutoMode는 대부분의 경우 자동으로 변경을 처리할 수 있지만, 일부 상황에서는 Manual Mode나 Versioned Mode를 사용하여 데이터 모델 변경에 대응하는 것이 바람직할 수 있습니다.
더 자세한 내용은 ObjectBox 문서를 참조하시기 바랍니다.