모바일 앱이 네이티브 코드로 데이터를 저장해, 앱을 다시 실행해도 남게 하는 저장소를 통틀어 부른다. iOS와 Android에 통일된 저장소 하나가 있는 것이 아니라, 데이터 종류에 따라 플랫폼 API를 고른다.
| 용도 | iOS | Android |
|---|---|---|
| 작은 설정값 | UserDefaults | Jetpack DataStore(예전엔 SharedPreferences) |
| 구조화된 데이터 | Core Data | Room(SQLite) |
| 파일 | 앱 샌드박스 | 앱 전용 저장소(app-specific storage) |
| 비밀 값·키 | Keychain | Android Keystore(키) |
설정 저장소는 잠겨 있지 않다
- Apple 문서에 따르면
UserDefaults는 디스크에 암호화 없이 저장한다. 개인 정보나 민감한 정보는 넣지 말고 Keychain에 두라고 한다 - Android는 키-값 데이터에
SharedPreferences대신 DataStore를 권한다. DataStore는 코루틴과 Flow로 비동기·트랜잭션 방식으로 저장한다. 작은 데이터용이라 큰 데이터나 관계가 있는 데이터는 Room을 쓴다 - OWASP(Open Worldwide Application Security Project)도 Android에서 민감한 데이터를
SharedPreferences에 두지 말라고 한다 - Android에서는 앱을 지우면 앱 전용 파일, preferences, Room DB가 함께 지워진다
비밀 값: Keychain과 Keystore는 성격이 다르다
- iOS Keychain은 비밀번호·토큰 같은 작은 비밀 데이터를 암호화된 데이터베이스에 저장한다. 값 자체를 넣는다
- Android Keystore는 암호화 키를 기기 밖으로 꺼내기 어렵게 보관한다. 키 자료는 앱 프로세스에 들어오지 않고, 암호화·서명은 시스템 프로세스가 대신한다. 기기가 지원하면 키를 TEE(Trusted Execution Environment)나 StrongBox 같은 보안 하드웨어에 묶고, 사용자가 잠금 화면 인증이나 생체 인증을 해야만 키를 쓰게 할 수도 있다. 토큰을 지키려면 Keystore 키로 암호화한 뒤 암호문을 앱 저장소에 둔다
- 이 패턴을 감싸던 Jetpack
security-crypto(EncryptedSharedPreferences)는 2025년에 모든 API가 폐기(deprecated)됐다. 플랫폼 API와 Keystore를 직접 쓰라는 안내다
보안 저장소를 써도 클라이언트를 믿을 수는 없다. OWASP는 클라이언트 쪽 통제는 모두 우회될 수 있다고 보고 서버에서도 검사하라고 한다. 자격 증명을 앱에 하드코딩하지 말고, 사용자 비밀번호는 기기에 저장하지 말고, 취소할 수 있는 토큰을 쓰라고 권한다.
웹뷰 저장소와는 별개다
앱 안 웹뷰의 웹 페이지는 localStorage·sessionStorage나 쿠키 같은 웹 저장소를 쓴다. 이것은 출처별로 나뉜 웹뷰의 데이터이고, 네이티브 저장소와 자동으로 공유되지 않는다. 네이티브에 둔 값을 웹이 써야 하면 브리지로 명시적으로 넘긴다.
- Android WebView는 DOM 저장소 API가 기본으로 꺼져 있다.
WebSettings.setDomStorageEnabled(true)를 켜야localStorage를 쓸 수 있다 - iOS
WKWebView는 기본 데이터 저장소(WKWebsiteDataStore.default())가 웹사이트 데이터를 디스크에 남긴다.nonPersistent()로 만든 저장소는 데이터를 메모리에만 두고 디스크에 쓰지 않는다(비공개 브라우징용)
긴 수명의 인증 정보를 웹뷰의 localStorage나 JS 변수에 두면 XSS(Cross-Site Scripting)가 생겼을 때 주입된 스크립트가 바로 읽어 갈 수 있다. 네이티브가 인증을 맡고 토큰은 보안 저장소에 둔다. 웹뷰에는 꼭 필요한 값만 브리지로 넘기거나, 서버가 발급한 짧은 세션을 HttpOnly 쿠키로 설정한다(HTTP 쿠키, 세션 인증). 토큰 형식은 JWT를 본다.
출처: Apple — UserDefaults · Apple — Core Data · Apple — Keychain services · Apple — WKWebsiteDataStore · Android — Data and file storage overview · Android — DataStore · Android — Android Keystore system: Security features · Android — Security library release notes · Android — WebSettings · OWASP — Mobile Application Security Cheat Sheet