Article
Drift를 이용한 Flutter 로컬 데이터베이스 구축
Drift 소개
Drift는 Dart와 Flutter 애플리케이션에서 SQLite를 ORM으로 사용할 수 있게 해주는 강력한 반응형 데이터베이스 라이브러리입니다. 타입 안전성을 제공하면서도 직관적인 API로 데이터베이스 작업을 단순화합니다.
자세한 정보는 Drift 공식 문서를 참조하세요.
설치
flutter pub add drift
flutter pub add sqlite3_flutter_libs
flutter pub add path_provider
flutter pub add path
flutter pub add --dev drift_dev
flutter pub add --dev build_runner
Todo 테이블 정의
Drift에서 테이블을 정의하려면 Table 클래스를 상속받아야 합니다.
import 'package:drift/drift.dart';
class Todo extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get title => text()();
TextColumn get context => text().nullable()();
TextColumn get status => text()();
}
데이터베이스 헬퍼 클래스 작성
데이터베이스 연결을 관리하는 헬퍼 클래스를 생성합니다 (db_helper.dart).
import 'dart:io';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
part 'db_helper.g.dart';
(tables: [Todo])
class DbHelper extends _$DbHelper {
DbHelper() : super(_openConnection());
int get schemaVersion => 1;
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'todo.sqlite'));
return NativeDatabase.createInBackground(file);
});
}
빌드
자동 코드 생성을 위해 build_runner를 실행합니다.
flutter pub run build_runner build
기능 구현
CRUD 작업을 구현합니다. 데이터베이스 헬퍼 클래스에 다음 메서드들을 추가합니다.
(tables: [Todo])
class DbHelper extends _$DbHelper {
// 데이터 추가
Future<int> addTodo(TodoData todoData) {
return into(todos).insert(todoData);
}
// 모든 데이터 조회
Future<List<TodoData>> findAll() {
return select(todos).get();
}
// 데이터베이스 초기화
Future resetDB() {
return delete(todos).go();
}
// 특정 데이터 조회
Future<TodoData?> find(TodoData todoData) {
return (select(todos)..where((t) => t.id.equals(todoData.id)))
.getSingleOrNull();
}
}
핵심 요약
Drift는 Flutter 애플리케이션에서 로컬 데이터베이스를 효과적으로 관리할 수 있는 강력한 도구입니다. 타입 안전성, 반응형 스트림, 자동 코드 생성 등의 기능으로 복잡한 데이터 관리도 간단하게 처리할 수 있습니다.
댓글