플러터 앱에 로컬 데이터를 저장할 때는 앱의 기능에 맞춰 필요 적합하는 도구를 선택해야 합니다. 어떤 기준과 관점으로 데이터를 저장하는 패키지를 선택해야 하는지 알아보고 알맞은 몇 가지 라이브러리를 소개하겠습니다.
내 앱에 맞는 로컬 데이터 저장 패키지 고르기
도구와 라이브러리 패키지는 시간이 흐름에 따라 변경되기도 하지만 내 앱에 맞는 도구를 선택하기 위해 아래와 같은 질문을 스스로 해볼 수 있습니다.
- 어느 플랫폼에서 사용하나?
- 어떤 종류의 데이터를 사용하나?
- SQL 혹은 NOSQL을 사용하나?
1. 어느 플랫폼에서 사용하나?
우선 플랫폼 관점으로 생각해 보겠습니다. 플러터를 사용하면 안드로이드 및 iOS와 같은 모바일 플랫폼 앱을 만들 수 있을뿐만 아니라 웹 혹은 윈도우, 맥과 같은 데스크톱 앱도 만들 수 있습니다.
Tool | iOS, Android | Web | Desktop |
SharedPreferences | ✔ | ✔ | ❕ |
Sembast | ✔ | ✔ | ✔ |
SQLite | ✔ | ❌ | ❌ |
Moor | ✔ | ✔ | ❕ |
File Storage (path_provider + share) |
✔ | ❌ | ❌ |
*✔지원, ❌지원안함, ❕일부지원
따라서 데이터 저장 라이브러리를 선택에 앞서 내가 만드려고 하는 플랫폼이 라이브러리에서 지원하는지 반드시 확인해 봐야 합니다. 사용하기 전에는 업데이트가 자주 이뤄지니 반드시 공식 사이트에서 확인해야 합니다.
2. 어떤 데이터를 사용하나?
그다음 중요한 관점은 어떤 종류의 데이터를 저장할 것인가입니다. 내 앱이 데이터베이스 내부에 미디어 파일을 저장해야 할까? 플러터 앱의 기능에 따라 Blob 또는 이진 바이너리를 저장해야 할 수도 있습니다. 하지만 모든 라이브러리에서 이를 허용하지는 않습니다.
Tool | BLOB | 대용량 | 보안 |
SharedPreferences | ❌ | ❌ | ❌ |
Sembast | ✔ | ❕ | ✔ |
SQLite (sqflite) |
✔ | ✔ | ✔ |
Moor | ✔ | ✔ | ✔ |
File Storage (path_provider + share) |
✔ | ❕ | ❌ |
*✔지원, ❌지원안함, ❕일부지원
많은 양의 데이터를 저장해야 할까? 혹은 보안을 고려해야 하나? 데이터를 안전하게 저장하려면 우리에게 익숙한 SharedPreferences는 사용하기 쉽더라도 적절한 라이브러리가 아닐 것입니다.
3. SQL 혹은 NOSQL
스토리지 솔루션을 선택하기 전에 고려해야 할 사항은 데이터 구조가 얼마나 복잡한가입니다.
Tool | SQL | NoSQL |
SharedPreferences | ✔ | |
Sembast | ✔ | |
SQLite (sqflite) |
✔ | |
Moor | ✔ |
여러 엔티티와 상호작용하는 복잡한 쿼리가 필요한 데이터인가요? 이 경우 SQL기반 관계형 데이터베이스가 최선의 선택일 것입니다. SQL을 처리할 수 있는 SQLite이 좋은 선택지가 될 것입니다. 단순히 SQL에 자신이 있는 개발자는 SQLite를 선택할 수도 있겠네요. 반면에 간단한 데이터를 저장하려면 NoSQL이 최선의 선택일 것입니다.
그 외 선택할 수 데이터를 저장할 수 있는 툴
- HIVE는 NoSQL JSON기반 데이터 저장소입니다. Sembast의 대안으로 선택할 수 있습니다.
- Floor는 SQLite를 지원하고 Moor의 대안으로 선택할 수 있습니다.
- FIrebase도 생각해 볼 수 있습니다. 굳이 로컬 데이터를 사용하고 싶지 않다면 클라우드를 이용해서 데이터를 저장하는 방법을 생각해 볼 수 있습니다.
여기까지 수고하셨습니다. 플러터 앱에서 데이터를 로컬로 저장하게 지원해 주는 툴과 라이브러리를 알아보았는데요. 몇 가지 라이브러리를 픽업해서 추가 포스팅을 해보도록 하겠습니다.
'프로그래밍 > Flutter' 카테고리의 다른 글
[flutter 상태관리] 10. 플러터 Stream 과 Sink (0) | 2022.06.14 |
---|---|
[flutter 상태관리] 9. 플러터 Provider 로 상태(모델) 공유 (0) | 2022.06.13 |
[flutter 상태관리] 8. 플러터 ScopedModel (0) | 2022.06.09 |
[flutter 상태관리] 7. InheritedWidget 으로 상태 공유하기 (0) | 2022.06.08 |
[flutter 상태관리] 6. stateful widget 실습2, 태그 필터 갤러리 만들기 (0) | 2022.06.06 |
댓글