[flutter] 플러터(sqflite)와 데이터베이스 마이그레이션

플러터(Flutter) 앱을 개발할 때 데이터베이스를 사용하는 경우가 많습니다. sqflite 패키지는 플러터에서 SQLite 데이터베이스를 사용하는 방법을 제공합니다. 이 패키지를 사용하면 앱 내에서 간단하고 효율적으로 데이터를 저장하고 관리할 수 있습니다.

그런데 만약 데이터베이스 스키마가 변경되는 경우, 기존에 저장된 데이터와의 호환성을 유지하기 위해 데이터베이스 마이그레이션이 필요합니다. 데이터베이스 마이그레이션은 새로운 스키마로 업데이트된 데이터베이스에 기존 데이터를 올바르게 이전하는 프로세스를 말합니다.

데이터베이스 마이그레이션의 필요성

앱을 계속 업데이트하면서 데이터베이스 스키마가 변경될 수 있습니다. 새로운 필드를 추가하거나 데이터 유형을 변경해야 할 수도 있습니다. 이러한 경우에, 기존에 설치된 앱의 데이터베이스와 새로운 업데이트된 데이터베이스 간의 스키마 차이를 해결하기 위해 데이터베이스 마이그레이션이 필요합니다.

sqflite를 사용한 데이터베이스 마이그레이션

  1. 버전 관리: 데이터베이스를 생성할 때 버전 번호를 지정합니다. 데이터베이스 구조가 변경될 때마다 이 번호를 증가시켜야 합니다.

     final database = await openDatabase(
       'my_database.db',
       version: 2, // 데이터베이스 버전
       onCreate: (db, version) {
         // 데이터베이스 테이블 생성 로직
       },
       onUpgrade: (db, oldVersion, newVersion) {
         // 데이터베이스 마이그레이션 로직
       },
     );
    
  2. 온 업데이트 콜백 함수: onUpgrade 콜백 함수를 사용하여 데이터베이스가 업데이트될 때 실행해야 하는 마이그레이션 로직을 정의합니다. 이곳에서는 SQL 쿼리를 사용하여 기존 데이터베이스를 새로운 스키마에 맞게 업데이트할 수 있습니다.

     onUpgrade: (db, oldVersion, newVersion) async {
       if (oldVersion < 2) {
         // 버전 2로 업데이트하는 마이그레이션 로직
         await db.execute('ALTER TABLE my_table ADD COLUMN new_column TEXT');
       }
     },
    
  3. 다중 마이그레이션: 여러 버전의 마이그레이션 로직이 필요한 경우 onUpgrade 콜백 함수 내에서 버전을 확인하고 적절한 마이그레이션 작업을 수행할 수 있습니다.

  4. 마이그레이션 테스트: 데이터베이스 마이그레이션을 구현한 후에는 충분한 테스트를 수행하여 기존 데이터가 올바르게 이전되는지 확인해야 합니다.

플러터(sqflite)를 사용하여 데이터베이스 마이그레이션을 구현하면 데이터베이스 스키마 변경에 따른 문제를 효과적으로 해결할 수 있습니다.

결론

플러터 앱에서 데이터베이스를 사용할 때는 데이터베이스 마이그레이션을 고려해야 합니다. sqflite 패키지를 이용하여 데이터베이스 스키마 변경에 대비하는 마이그레이션 로직을 구현할 수 있습니다. 데이터베이스 마이그레이션은 앱의 데이터 관리를 보다 효율적으로 할 수 있도록 도와줍니다.

참고 문헌: sqflite 공식 문서