앱 내부에서 사용자 설정, 로그인 정보, 캐시 등을 저장할 때 로컬 스토리지를 사용함.
네트워크 없이도 기기 내부에 데이터 저장/조회 가능. 성능 및 UX 개선에 기여.
로컬 스토리지에는 다양한 형태가 존재하며, 저장하려는 데이터의 형태와 민감도, 필요한 구조화 수준에 따라 적절한 방식을 선택해야 함.
크게 다음과 같은 분류로 나눌 수 있다:
- Key-Value 저장소 : 간단한 설정, 토글 등의 값 저장에 적합
- 보안 저장소 : 토큰이나 인증키처럼 암호화가 필요한 데이터 저장
- 관계형 DB : 테이블 구조 기반의 복잡한 데이터 관리
- 대체 DB : 빠른 성능을 제공하는 경량 저장소, 일부는 암호화 지원
- 최신 대안 : SwiftData처럼 최근 플랫폼에 맞게 진화한 새로운 저장 방식
각 OS는 자체적으로 이러한 기능을 제공하며, 외부 라이브러리를 활용한 대체 기술도 널리 사용됨.
| 분류 | 기술 | 설명 |
|---|---|---|
| Key-Value 저장소 | UserDefaults |
설정값, 플래그 등 단순 데이터 저장 |
| 보안 저장소 | Keychain |
토큰, 패스워드 등 민감 정보 저장. 시스템 레벨 암호화 |
| 관계형 DB | CoreData |
Apple 공식 ORM. SQLite 기반 |
| 대체 DB | Realm |
가볍고 빠른 로컬 DB. 암호화 지원 |
| 최신 대안 | SwiftData |
WWDC23 공개. Swift-native ORM 기반 구조화된 데이터 저장소 |
| 분류 | 기술 | 설명 |
|---|---|---|
| Key-Value 저장소 | SharedPreferences |
설정값, 플래그 등 단순 저장 |
| 보안 저장소 | EncryptedSharedPreferences / Android Keystore |
민감 정보 보관용. 암호화 지원 |
| 관계형 DB | Room (SQLite 기반) |
Android 공식 ORM |
| 대체 DB | Realm, ObjectBox, DataStore 등 |
고성능 로컬 저장소 옵션 |
Flutter는 다양한 로컬 저장소 플러그인을 통해 iOS/Android의 기능을 추상화하여 제공한다.
간단한 설정 저장부터 보안 저장, 관계형 DB, 경량 DB까지 상황에 따라 유연하게 선택할 수 있다.
| 분류 | 기술 | 설명 |
|---|---|---|
| Key-Value 저장소 | shared_preferences |
간단한 설정, 토글 값 등을 저장. 비보안 |
| 보안 저장소 | flutter_secure_storage |
Keychain/Keystore 기반. 암호화된 민감정보 저장 |
| 관계형 DB | sqflite |
SQLite 기반. 구조화된 데이터 저장에 적합 |
| 대체 DB | Hive, ObjectBox, Isar 등 |
경량 DB. 빠른 성능, 일부는 암호화 지원 |
로컬 스토리지는 저장, 조회, 수정, 삭제 기능을 제공함.
각 플랫폼의 API나 플러그인으로 CRUD 기능을 구현함.
앱 데이터는 민감 정보와 일반 정보로 구분됨.
| 구분 | 예시 | 저장소 권장 |
|---|---|---|
| 일반 정보 | 앱 설정, 최근 본 항목, 테마 | UserDefaults / SharedPreferences |
| 민감 정보 | 로그인 토큰, 비밀번호, 인증 키 | Keychain / Android Keystore |
민감 정보는 탈옥/루팅 시 노출 위험이 크므로 암호화된 저장소에 보관해야 함.
앱은 기본적으로 샌드박스로 격리되어 다른 앱 접근 불가.
하지만 탈옥/디버깅 시 내부 파일 접근 가능성 존재.
실제로 많은 기업들은 민감정보의 노출 취약점을 점검하기위해 모의 해킹을 수행한다.
따라서 다음을 준수해야 함:
- 민감 정보는 암호화 저장 (Keychain, Keystore 활용)
- 보안 필요 없는 설정 값만 일반 스토리지에 저장
- 앱 삭제 시 자동 제거되는 저장소인지 확인
- 로컬 스토리지는 앱 내부 데이터 저장의 핵심 기능
- 플랫폼별 다양한 방식 존재, 보안 수준에 따라 선택 필요
- 민감 정보는 별도의 보안 저장소에 암호화해 보관
- CRUD 기능을 고려해 저장소 API를 추상화해 사용함
- 260710: 초안작성