[flutter] 플러터(sqflite)에서의 데이터베이스 버전 관리 방법

플러터 앱에서 데이터베이스를 사용할 때 데이터베이스 스키마를 업데이트 해야할 때가 있습니다. 이때 데이터베이스 버전을 관리하는 것이 중요합니다. 이번 포스트에서는 sqflite를 사용하는 플러터 앱에서의 데이터베이스 버전 관리 방법에 대해 알아보겠습니다.

데이터베이스 버전 관리의 중요성

앱을 업데이트하거나 추가 기능을 개발하는 과정에서 데이터베이스 스키마에 변경이 발생할 수 있습니다. 이때 데이터베이스 버전을 업데이트하고, 기존 데이터를 적절히 변환해야 합니다. 새로운 기능에 필요한 새로운 테이블이나 컬럼을 추가하거나 이전 버전의 데이터를 마이그레이션하는 과정이 필요할 수 있습니다.

sqflite를 사용한 데이터베이스 관리

sqflite는 플러터에서 SQLite를 사용하기 편리하게 만들어주는 라이브러리입니다. 데이터베이스 버전을 관리하기 위해서는 openDatabase 메서드를 사용하여 데이터베이스를 열 때, version 매개변수를 설정해야 합니다.

var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'my_database.db');
Database database = await openDatabase(
  path,
  version: 2,
  onCreate: (Database db, int version) async {
    // 새로운 테이블 생성 및 초기 데이터 삽입
  },
  onUpgrade: (Database db, int oldVersion, int newVersion) async {
    // 기존 테이블의 변환 또는 새로운 테이블/컬럼 추가
  },
  onDowngrade: (Database db, int oldVersion, int newVersion) async {
    // 데이터베이스 다운그레이드 시 실행되는 로직
  },
);

위 예제 코드에서 version 매개변수를 2로 설정하여 데이터베이스를 생성하였습니다.

마이그레이션 작업

데이터베이스 버전이 업데이트될 때, onUpgrade 콜백이 호출됩니다. 여기서 기존 테이블을 변환하거나 새로운 테이블이나 컬럼을 추가할 수 있습니다. 이를 통해 이전 버전의 데이터를 적절히 새로운 스키마에 맞게 변환할 수 있습니다.

onUpgrade: (Database db, int oldVersion, int newVersion) async {
  if (oldVersion == 1) {
    await db.execute('ALTER TABLE my_table ADD COLUMN new_column TEXT');
  }
},

위 예제 코드에서는 버전 1에서 버전 2로 업데이트될 때, my_tablenew_column 컬럼을 추가하는 작업을 수행하고 있습니다.

결론

플러터(sqflite)에서 데이터베이스를 사용할 때, 데이터베이스 버전을 올바르게 관리하는 것이 중요합니다. sqflite를 사용하여 데이터베이스를 생성할 때 적절한 버전을 설정하고, 데이터베이스 업데이트 시에는 onUpgrade 콜백을 이용하여 마이그레이션 작업을 수행할 수 있습니다.

참조: sqflite 라이브러리 문서