[flutter] 플러터 objectbox에서 데이터 모델의 변경에 대응하는 방법은?

플러터(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 문서를 참조하시기 바랍니다.