[flutter] 플러터와 데이터베이스 연동 방법

이제는 대부분의 모바일 어플리케이션들이 서버에서 데이터를 가져와야 하며, 사용자 로컬에 데이터를 저장해야 합니다. Flutter 앱을 개발 할 때, 사용자의 데이터를 저장하기 위해서는 로컬 데이터베이스를 사용해야 합니다.

이 글에서는 Flutter 어플리케이션에서 SQLite 데이터베이스를 다루는 방법을 알아보겠습니다.

SQLite 데이터베이스와 Flutter

SQLite는 관계형 데이터베이스로, 파일 기반 데이터베이스 관리 시스템입니다. Flutter는 내장 SQLite를 사용하여 데이터베이스에 접근하고 관리할 수 있도록 합니다.

Flutter에서의 SQLite 사용하기

Flutter에서 SQLite 패키지를 사용하여 데이터베이스를 다룰 수 있습니다. sqflite 패키지는 Flutter에서 SQLite 데이터베이스에 접근하기 위한 API를 제공합니다.

먼저 pubspec.yaml 파일에 sqflite 패키지를 추가합니다.

dependencies:
  sqflite: ^2.0.0+4

그 다음 pubspec.yaml 파일을 업데이트 한 후 터미널에서 flutter pub get을 실행하여 패키지를 설치합니다.

flutter pub get

그런 다음 간단한 CRUD(Create, Read, Update, Delete) 연산을 위한 SQLite 도우미 클래스를 작성할 수 있습니다.

예시:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

class DBHelper {
  DBHelper._();

  static final DBHelper instance = DBHelper._();
  static Database? _database;

  Future<Database> get database async {
    if (_database != null) return _database!;

    _database = await _initDB();
    return _database!;
  }

  Future<Database> _initDB() async {
    String path = join(await getDatabasesPath(), 'app_database.db');
    return await openDatabase(path, onCreate: _createDB, version: 1);
  }

  Future<void> _createDB(Database db, int version) async {
    await db.execute('''
      CREATE TABLE tasks(
        id INTEGER PRIMARY KEY,
        title TEXT,
        description TEXT,
        completed INTEGER
      )
    ''');
  }

  Future<int> insertTask(Task task) async {
    final db = await database;
    return await db.insert('tasks', task.toMap());
  }

  Future<List<Task>> fetchTasks() async {
    final db = await database;
    final List<Map<String, dynamic>> tasks = await db.query('tasks');
    return tasks.map((e) => Task.fromMap(e)).toList();
  }

  // 나머지 Update, Delete 메소드들을 추가할 수 있습니다.
}

이제 성공적으로 데이터베이스를 다루기 위한 도우미 클래스를 작성했습니다.

결론

Flutter에서 SQLite 데이터베이스를 사용하는 방법에 대해 알아보았습니다. 앞으로 이를 응용하여 실제 프로젝트에 적용하여 영구적인 데이터를 저장하고 다룰 수 있습니다.

참고 자료:

이상으로 SQLite 데이터베이스와 Flutter의 연동 방법에 대해 알아보았습니다.