본문 바로가기
Category/Flutter

Flutter 로컬 데이터베이스

by Corinee 2024. 9. 25.
728x90
반응형

Flutter에서 로컬 데이터베이스를 사용할 때 주로 사용하는 옵션들은 몇 가지가 있습니다. 각 데이터베이스는 저장해야 할 데이터의 종류와 규모에 따라 선택할 수 있습니다. 아래는 Flutter에서 주로 사용되는 로컬 DB 솔루션입니다.

1. SQLite (sqflite 패키지)

  • 가장 많이 사용되는 로컬 DB 솔루션입니다. Flutter 애플리케이션에서 관계형 데이터베이스가 필요한 경우 많이 사용됩니다.
  • sqflite 패키지는 SQLite의 Flutter용 바인딩이며, SQL 문을 사용해 데이터를 조회, 삽입, 수정, 삭제할 수 있습니다.
  • 특징:
    • 관계형 데이터베이스로, 테이블, 행, 열 등의 구조를 가진 데이터베이스.
    • SQL 문을 사용해 복잡한 쿼리 작성 가능.
    • 앱에서 구조화된 데이터를 다룰 때 적합.
  • 사용 방법:
    • sqflite 패키지를 pubspec.yaml에 추가하여 사용할 수 있습니다.
    dependencies:
      sqflite: ^2.0.0+4
      path: ^1.8.0 # DB 경로 설정에 필요
    • 기본적인 CRUD 작업을 지원합니다.

2. Hive

  • 경량화된 NoSQL 데이터베이스로, 키-값 저장소 방식입니다.
  • 특징:
    • 빠른 속도: Hive는 매우 빠르고, 많은 양의 데이터를 처리하는 데 적합합니다.
    • 스키마리스: 미리 스키마를 정의할 필요가 없으며, 유연하게 데이터를 저장할 수 있습니다.
    • 복잡한 관계형 데이터보다는 간단한 구조화 데이터를 저장하는 데 적합합니다.
    • 바이너리 데이터 처리 가능.
  • 사용 방법:
    • hive 패키지를 추가하고, 데이터베이스를 열어서 사용.
    dependencies:
      hive: ^2.0.4
      hive_flutter: ^1.1.0
    • Flutter에서 사용하기 위해서는 hive_flutter와 함께 hive_generator로 모델 클래스를 생성할 수 있습니다.

3. Moor (Drift)

  • SQLite를 쉽게 사용할 수 있게 해주는 ORM 패키지입니다. SQL 문을 작성할 필요 없이 Dart 코드로 데이터베이스 작업을 할 수 있습니다.
  • 특징:
    • 관계형 데이터베이스인 SQLite를 사용하지만, 더 코드 중심적으로 데이터베이스 작업을 할 수 있습니다.
    • ORM(Object-Relational Mapping) 방식으로, 객체 지향적인 방식으로 데이터베이스 작업을 할 수 있습니다.
    • 자동 생성된 코드를 활용해 유지보수가 용이합니다.
  • 사용 방법: 
    • drift 패키지를 추가하고, 데이터베이스 모델과 테이블을 정의할 수 있습니다.
dependencies:
  drift: ^1.6.3
  sqlite3_flutter_libs: ^0.5.6 # SQLite와 함께 사용

4. ObjectBox

  • 고성능 NoSQL 데이터베이스로, ORM(Object-Relational Mapping)을 지원합니다.
  • 특징:
    • 매우 빠른 퍼포먼스.
    • 관계형 데이터보다 객체 중심 데이터를 다룰 때 유용.
    • 간편한 사용: 복잡한 설정 없이 쉽게 사용 가능.
  • 사용 방법:
    dependencies:
      objectbox: ^1.0.0
    • 데이터를 객체로 저장하고 쿼리할 수 있어, ORM으로 쉽게 사용할 수 있습니다.

5. Shared Preferences

  • 작은 양의 데이터를 저장할 때 많이 사용되며, 보통 앱 설정이나 사용자 기본 정보 같은 데이터를 저장하는 데 적합합니다.
  • 특징:
    • key-value 형태로 간단하게 데이터 저장.
    • 복잡한 데이터대량의 데이터를 저장하기엔 부적합.
    • 앱의 설정이나 간단한 상태 저장에 많이 사용.
  • 사용 방법:
dependencies:
  shared_preferences: ^2.0.6

6. Realm

  • 모바일에서 사용하기 위한 NoSQL 데이터베이스로, 매우 빠른 퍼포먼스와 객체 지향적인 접근 방식을 제공합니다.
  • 특징:
    • 실시간 데이터 동기화 기능이 제공됨.
    • 스키마 기반 데이터베이스로, 데이터를 객체로 저장하고 불러오는 방식.
    • 대량의 데이터를 빠르게 처리할 수 있으며, 모바일 환경에 최적화됨.
  • 사용 방법:
    • realm 패키지를 Flutter에 추가하여 사용 가능.
dependencies:
  realm: ^1.0.0

 

각 데이터베이스 비교

  • SQLite (sqflite): 관계형 데이터베이스가 필요할 때 적합, SQL 사용.
  • Hive: 빠르고 가벼운 NoSQL, 키-값 저장 방식, 스키마리스.
  • Moor (Drift): ORM 기반으로 SQLite를 쉽게 사용 가능.
  • ObjectBox: 고성능 NoSQL DB, 객체 지향적 데이터 처리에 적합.
  • Shared Preferences: 간단한 Key-Value 저장, 설정 같은 작은 데이터에 적합.
  • Realm: 모바일 환경에 최적화된 고성능 NoSQL DB, 실시간 동기화 기능 제공.

추천

  • 복잡한 구조의 데이터를 저장하고 관계형 데이터베이스가 필요하다면 SQLite(sqflite) 또는 Moor(Drift)를 사용하세요.
  • 빠르고 가벼운 DB가 필요하고, 간단한 데이터 구조를 사용한다면 HiveObjectBox를 추천합니다.
  • 간단한 설정이나 작은 데이터 저장이 필요하다면 Shared Preferences가 적합합니다.