Mobil geliştirmede veri depolama: nedir, yöntemler ve nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-08 Okuma süresi: 9 dk

Veri depolama, bir mobil uygulamanın performansını, güvenliğini ve kullanıcı deneyimini etkileyen temel görevlerinden biridir. Bu makalede SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore ve Keychain'in yanı sıra serileştirme biçimlerini (JSON, Protobuf) ve kitaplıkları (Gson, Moshi, kotlinx.serialization) ele alacağız. Bu kılavuz, başlangıç seviyesindeki geliştiricilerin doğru veri depolama çözümünü seçmesine yardımcı olacaktır. Ayrıntılı bilgi için resmi Android veri depolama kılavuzuna bakın.

Önemli Noktalar

  • Room (Android) ve Core Data (iOS), her platformda ilişkisel veritabanlarıyla çalışmak için resmi ORM'lerdir
  • SharedPreferences (Android) yerini DataStore'a bırakıyor — asenkron ve tür güvenli anahtar-değer deposu
  • Token'ların güvenli depolanması için donanım korumalı Keystore (Android) ve Keychain (iOS) kullanılır
  • Firebase Firestore, gerçek zamanlı senkronizasyon ve çevrimdışı mod ile NoSQL bir veritabanıdır
  • Serileştirme — Gson, Moshi, kotlinx.serialization ile nesnelerin JSON/Protobuf'a dönüştürülmesi

Yerel Veritabanları: SQLite, Room, Core Data, Realm

Varlıklar arasında ilişkiler bulunan yapılandırılmış verileri depolamak için ilişkisel veritabanları kullanılır.

SQLite

SQLite, herhangi bir mobil platformda çalışan gömülü bir ilişkisel veritabanıdır. Ayrı bir sunucu gerektirmez, veriler tek bir dosyada saklanır. SQLite, Room (Android) ve isteğe bağlı olarak Core Data'nın (iOS) temelidir. Kitaplıklar: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room, SQLite ile çalışmak için resmi Android Architecture Components kitaplığıdır. Bir ORM katmanı sağlar: Entity (tablo), DAO (sorgular), Database (giriş noktası). Room, SQL sorgularını derleme zamanında kontrol eder, coroutine ve Flow'u destekler ve şemayı otomatik olarak taşır.

kotlin
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun getUser(id: Int): User?
}

Core Data (iOS)

Core Data, nesne grafiğini yönetmek için Apple'ın framework'üdür. Saf bir veritabanı değildir — SQLite, XML veya ikili depolama üzerinde bir kalıcılık katmanıdır. Core Data, nesneleri (NSManagedObject), ilişkileri, şema sürümlemeyi, geri al/tekrar al ve NSManagedObjectContext aracılığıyla çoklu iş parçacığını yönetir.

Realm

Realm, yüksek performanslı bir mobil veritabanı olarak tasarlanmış SQLite alternatifidir. Realm, okuma ve yazmada SQLite'dan daha hızlıdır, reaktif bildirimleri (Live Objects), anında şifrelemeyi ve çapraz platformu (Android, iOS, Flutter, React Native) destekler. Dezavantajları: artan APK/IPA boyutu ve daha yüksek bellek kullanımı.

Anahtar-Değer Deposu ve Ayarlar

Küçük miktarlardaki verileri (ayarlar, token'lar, önbellek) depolamak için basit anahtar-değer depoları kullanılır.

SharedPreferences (Android)

SharedPreferences, Android'de eski bir anahtar-değer deposudur. Eksileri: senkron erişim (okuma sırasında UI'ı bloke eder), tipleme eksikliği, büyük dosya yüklerken ANR riski. Yeni projeler için ÖNERİLMEZ.

DataStore (Jetpack Android)

DataStore, Google'ın SharedPreferences'a modern alternatifidir. Kotlin Coroutines ve Flow aracılığıyla asenkron çalışır, Preferences DataStore'u (anahtar-değer) ve Proto DataStore'u (Protobuf ile tipli veri) destekler. DataStore, UI iş parçacığı için güvenlidir ve işlemleri destekler.

NSUserDefaults (iOS)

UserDefaults, iOS'ta küçük ayarlar için standart depolama alanıdır. İlkel türleri, dizeleri, tarihleri, Data'yı destekler. UserDefaults senkron olduğundan büyük veri hacimleri için uygun değildir. register(defaults:) ile değer kaydı varsayılan değerleri belirler.

Bulut Veritabanları: Firebase Firestore ve Realtime DB

Cihazlar arasında senkronizasyon gerektiren uygulamalarda veri depolamak için Firebase bulut veritabanları kullanılır.

Cloud Firestore

Firebase Firestore, gerçek zamanlı abonelikler, otomatik ölçekleme, güçlü sorgular ve yerleşik çevrimdışı mod ile bir NoSQL belge veritabanıdır. Veriler koleksiyonlar ve belgeler (JSON benzeri yapılar) halinde düzenlenir. Firestore, işlemleri ve toplu işlemleri destekler. Sohbetler, akışlar ve sosyal uygulamalar için idealdir.

Firebase Realtime Database

Firebase Realtime Database, verileri tek bir JSON ağacı olarak depolayan daha eski bir Firebase NoSQL veritabanıdır. Firestore'dan daha basit ancak sorgulama ve ölçeklemede daha az esnektir. Basit gerçek zamanlı uygulamalar (çevrimiçi durum, basit sohbetler) için önerilir.

Özellik Cloud Firestore Firebase Realtime DB
Veri modeliKoleksiyonlar → BelgelerJSON ağacı
SorgularKarmaşık (filtreleme, sıralama, limitler)Basit (anahtara göre)
ÖlçeklemeOtomatikManuel parçalama
Çevrimdışı modEvet (kalıcı önbellek)Evet
FiyatlandırmaOkuma/yazma işlemi başınaTrafik + depolama başına

Güvenli Depolama: Keystore, Keychain ve EncryptedSharedPreferences

Token'ların, şifrelerin ve şifreleme anahtarlarının depolanması özel korumalı depolar gerektirir.

Android Keystore

Android Keystore, kriptografik anahtarlar için sistem deposudur. Anahtarlar, uygulamaların ve işletim sisteminin erişemeyeceği bir donanım ortamında (TEE — Trusted Execution Environment) saklanır. Anahtar oluşturma, şifreleme ve imzalamayı destekler. Android 9+ ile StrongBox Keymaster (özel çip) içerir.

iOS Keychain

Keychain Services, şifreler, anahtarlar ve sertifikalar için güvenli bir iOS deposudur. Veriler, donanım Secure Enclave kullanılarak şifrelenir. Keychain, erişilebilirlik seviyelerini destekler: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences, AES256-GCM ve HKDF aracılığıyla anahtar ve değer şifrelemesi ile SharedPreferences üzerinde bir sarmalayıcıdır. AndroidX Security kitaplığında uygulanmıştır. Token'ları ve hassas ayarları depolamak için önerilir.

IT Sectr'de yenileme token'larını ve biyometrik tabanlı anahtarları depolamak için Android Keystore + EncryptedSharedPreferences kullanıyoruz. iOS'ta maksimum güvenlik için kSecAttrAccessibleWhenUnlockedThisDeviceOnly seviyesinde Keychain kullanıyoruz.

Dosya Depolama: Internal, External, Cache Directory

Dosya depolama (resimler, videolar, belgeler) için mobil platformlar çeşitli depolama türleri sağlar.

Android Storage

Android, Internal Storage (/data/data/paket/ — özel depolama) ile External Storage (SD kart veya öykünmüş bölüm) arasında ayrım yapar. Cache Directory, sistemin temizleyebileceği geçici depolama alanıdır. Scoped Storage (Android 10+), External Storage'a erişimi kısıtlar — uygulamalar yalnızca kendi dosyalarını veya MediaStore/SAF aracılığıyla dosyaları görebilir.

iOS Storage

iOS, Documents Directory (iCloud yedekleme, kalıcı veriler), Library/Caches (geçici dosyalar, yedeklenmez) ve Tmp Directory (geçici, temizlenebilir) sağlar. Dosya sistemiyle çalışmak için NSFileManager'ı kullanın. iOS 11+, bulut dosyaları için File Provider'ı destekler.

Veri Serileştirme: JSON, Protobuf ve Kitaplıklar

Serileştirme, nesneleri iletim veya depolama için bir biçime dönüştürür. Serileştirmeyi çözme ters işlemdir.

Biçimler

JSON (JavaScript Object Notation) en popüler biçimdir: okunabilir, esnek, tüm platformlar tarafından desteklenir. XML daha katıdır, eski sistemlerde kullanılır. Protobuf (Protocol Buffers), Google'dan ikili bir biçimdir: JSON'dan 3-10 kat daha kompakt, daha hızlı ayrıştırılır ve katı bir şemaya sahiptir. Yüksek yüklü sistemler ve mikro hizmetler için kullanılır.

Android Kitaplıkları

  • Gson (Google) — basit, esnek ancak yavaş. Java/Kotlin nesneleriyle otomatik çalışır
  • Moshi (Square) — Gson'dan daha hızlı, daha iyi Kotlin desteği (null olmayan özellikler, varsayılan değerler, sealed sınıflar)
  • kotlinx.serialization — JetBrains'den yerel Kotlin serileştirme, derleme zamanında çalışır, JSON, Protobuf, CBOR'u destekler

iOS Kitaplıkları

JSONSerialization, JSON ile çalışmak için yerleşik API'dir. Codable (Encodable/Decodable), JSON, Property List ve diğer biçimlere otomatik serileştirme için modern bir Swift protokolüdür.

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}
let user = User(id: 1, name: "Alice", email: "alice@example.com")
let encoder = JSONEncoder()
let jsonData = try encoder.encode(user)

Çapraz Platform Çözümleri: Hive, ObjectBox, Drift

Flutter ve React Native için kendi verimli depolama kitaplıkları bulunur.

Hive (Flutter)

Hive, Flutter için hafif ve hızlı bir anahtar-değer deposudur. Yerel kod gerektirmez (saf Dart), TypeAdapter aracılığıyla tiplemeyi destekler ve isolate'lerde çalışır. Önbellek, ayarlar ve küçük veri hacimleri için idealdir.

ObjectBox

ObjectBox, Flutter, Android ve iOS için yüksek performanslı gömülü bir veritabanıdır. SQLite'dan 10+ kat daha hızlıdır, minimum ek yük için düz dosya yapısı kullanır. İlişkileri, sorguları ve reaktif abonelikleri (ObjectBox Dart) destekler.

Drift (eski adıyla Moor)

Drift, Flutter ve Dart için reaktif bir SQLite kitaplığıdır. Tür güvenli sorgular, geçişler, DAO işlevleri ve Stream desteği (reaktif güncellemeler) sağlar. Drift, SQLite gerektiren Flutter projeleri için birincil tercihtir.

Sıkça Sorulan Sorular

Yerel veri depolama için hangisi daha iyi: Room mu Core Data mı?

Seçim platforma bağlıdır: Room (Android) derleme zamanı sorgu denetimi ile SQLite tabanlı resmi kitaplıktır. Core Data (iOS) nesne grafiği ile Apple'ın framework'üdür. Çapraz platform projeler için Realm veya ORM aracılığıyla SQLite uygundur.

SharedPreferences ile DataStore arasındaki fark nedir?

SharedPreferences, senkron erişim ve ANR riski olan eski bir uygulamadır. DataStore (Jetpack), Kotlin Coroutines ve Flow tabanlı modern bir alternatiftir, asenkronluk, tipleme ve hata korumasını destekler.

Bir mobil uygulamada token'lar ve şifreler nasıl güvenle saklanır?

Android: EncryptedSharedPreferences veya Android Keystore. iOS: WhenUnlockedThisDeviceOnly erişilebilirliği ile Keychain Services. Kritik veriler için biyometri ile Secure Enclave (iOS) ve donanım Keystore (Android) kullanın.

Firebase Firestore nedir ve ne zaman kullanılmalıdır?

Cloud Firestore, gerçek zamanlı senkronizasyon, çevrimdışı mod ve otomatik ölçekleme ile Firebase'in NoSQL veritabanıdır. Sohbetler, haber akışları ve cihazlar arası senkronizasyon gerektiren projeler için uygundur.

Flutter ve React Native için hangi ORM'ler mevcuttur?

Flutter: Hive (hızlı anahtar-değer), Floor (SQLite ORM), Drift (Moor, reaktif SQLite), ObjectBox (yüksek performanslı gömülü DB). React Native: Realm, WatermelonDB (tembel yükleme) ve AsyncStorage (SharedPreferences benzeri).

Özet

  • Room (Android) ve Core Data (iOS) her platformda ilişkisel veritabanları için resmi çözümlerdir
  • DataStore, asenkron ayar depolama için SharedPreferences'ın yerini alır
  • Keystore / Keychain, token ve anahtarların güvenli depolanması için zorunludur
  • Firebase Firestore, cihazlar arası gerçek zamanlı senkronizasyon için en iyi seçimdir
  • Kotlinx.serialization (Android) ve Codable (iOS) modern serileştirme yaklaşımlarıdır
  • Flutter için: Drift (SQLite), Hive (anahtar-değer), ObjectBox (yüksek performans)
  • Realm, reaktif bildirimlerle SQLite'a çapraz platform bir alternatiftir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış