TIL) 12/03 데이터 저장은 어떡하지

100·2025년 12월 3일

TIL

목록 보기
11/11

로컬 DB vs 디스크 저장

항목로컬 DB (Drift / Hive / Isar)디스크 저장(JSON 등 파일)
구조테이블/컬렉션(구조적)파일 단위(비정형 가능)
장점검색/정렬/필터링 강함포맷 자유, 레포트·로그에 적합
단점스키마·마이그레이션 필요검색·부분 업데이트 비효율적
사용 목적자주 조회/수정되는 데이터변경 적고 “기록을 남기는” 데이터
실제 사례채팅, 앱 캐시, 사용자 정보로그, JSON 백업, PDF
  • DB = 데이터를 자주 읽고 관리하기 위한 것
  • 디스크 저장 = 파일을 보존하거나 내보내기 위한 것

어떻게 저장할거임?

저장 방식특징장점단점주요 사용처
메모리 상태(Cubit/Provider 등)앱 실행 중에만 유지가장 빠른 접근, 구조 단순앱 종료 시 소멸UI 임시 상태, 선택값 등
SharedPreferencesKey–Value 설정 저장간단한 사용성, 가벼운 플래그 저장에 적합복잡 구조 저장 어려움, 암호화 없음다크모드, 온보딩 여부, 간단 설정
flutter_secure_storageOS 보안 저장소 사용암호화, 민감 정보 저장 적합느린 I/O, 대량 저장 부적합액세스 토큰, 인증 정보
파일 저장(dart:io)JSON/텍스트/바이너리 파일 저장자유도 높음, 로그/백업 저장 적합직렬화 직접 처리, 동시성 고려 필요로그, 레포트, 백업 데이터
SQLite (sqflite)관계형 데이터베이스복잡 쿼리/조인 가능, 검증된 안정성SQL 직접 작성, 마이그레이션 부담오프라인 DB, 검색/정렬이 많은 데이터
DriftSQLite 기반 타입 안전 ORM타입 안전 쿼리, 구조적 DB 설계 용이러닝커브, 코드 생성 필요로컬 데이터 구조가 복잡한 앱, 오프라인 동기화
Hive키–값 기반 NoSQL매우 빠른 속도, 모델 직렬화 지원복잡 쿼리/조인 불가캐시, 간단한 도메인 저장, 스냅샷
Isar고성능 로컬 NoSQL DB빠른 성능, 인덱스/필터 지원마이그레이션 학습 필요대량 로컬 데이터, 검색/필터 기능
  • 머리에 넣어두자
    앱 재시작 필요 없음 (일시 상태) → 메모리 상태
    간단한 설정값 → SharedPreferences
    민감 정보 → flutter_secure_storage
    레포트·로그·백업 → 디스크 저장(JSON/PDF)
    구조적 데이터(검색·정렬·통계)→ Drift or SQLite
    캐시·간단 저장 → Hive or Isar
  • 실제로는 혼용해야지
    반복적으로 조회·필터링해야 하는 구조적 데이터는 Drift/Hive
    레포트/기록성 데이터는 파일 저장(JSON 또는 이진 파일)
profile
멋있는 사람이 되는 게 꿈입니다

0개의 댓글