Penyimpanan data dalam pengembangan seluler: apa itu, metode dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-03-08 Waktu membaca: 9 mnt

Penyimpanan data adalah salah satu tugas utama aplikasi seluler yang memengaruhi kinerja, keamanan, dan pengalaman pengguna. Dalam artikel ini kita akan membahas SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore dan Keychain, serta format serialisasi (JSON, Protobuf) dan perpustakaan (Gson, Moshi, kotlinx.serialization). Panduan ini akan membantu pengembang pemula memilih solusi penyimpanan data yang tepat. Pelajari lebih lanjut di panduan resmi Android tentang penyimpanan data.

Poin Penting

  • Room (Android) dan Core Data (iOS) adalah ORM resmi untuk bekerja dengan database relasional di setiap platform
  • SharedPreferences (Android) digantikan oleh DataStore — penyimpanan pasangan kunci-nilai yang asinkron dan aman tipe
  • Untuk penyimpanan token yang aman, gunakan Keystore (Android) dan Keychain (iOS) dengan perlindungan perangkat keras
  • Firebase Firestore adalah database NoSQL dengan sinkronisasi waktu nyata dan mode offline
  • Serialisasi — mengonversi objek ke JSON/Protobuf melalui Gson, Moshi, kotlinx.serialization

Database Lokal: SQLite, Room, Core Data, Realm

Untuk menyimpan data terstruktur dengan hubungan antar entitas, digunakan database relasional.

SQLite

SQLite adalah database relasional tertanam yang bekerja di platform seluler mana pun. Tidak memerlukan server terpisah, data disimpan dalam satu file. SQLite adalah dasar untuk Room (Android) dan opsional untuk Core Data (iOS). Perpustakaan: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room adalah perpustakaan Android Architecture Components resmi untuk bekerja dengan SQLite. Menyediakan lapisan ORM: Entity (tabel), DAO (kueri), Database (titik masuk). Room memeriksa kueri SQL saat kompilasi, mendukung coroutine dan Flow, dan secara otomatis memigrasikan skema.

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 adalah kerangka kerja Apple untuk mengelola graf objek. Ini bukan database murni — ini adalah lapisan persistensi di atas SQLite, XML, atau penyimpanan biner. Core Data mengelola objek (NSManagedObject), hubungan, versi skema, undo/redo, dan multithreading melalui NSManagedObjectContext.

Realm

Realm adalah alternatif SQLite, dirancang sebagai database seluler berkinerja tinggi. Realm lebih cepat dari SQLite dalam membaca dan menulis, mendukung notifikasi reaktif (Live Objects), enkripsi langsung, dan lintas platform (Android, iOS, Flutter, React Native). Kekurangan: ukuran APK/IPA meningkat dan penggunaan memori lebih tinggi.

Penyimpanan Kunci-Nilai dan Pengaturan

Untuk menyimpan data dalam jumlah kecil (pengaturan, token, cache), digunakan penyimpanan pasangan kunci-nilai sederhana.

SharedPreferences (Android)

SharedPreferences adalah penyimpanan pasangan kunci-nilai lama di Android. Kekurangan: akses sinkron (memblokir UI saat membaca), kurangnya pengetikan, risiko ANR saat memuat file besar. TIDAK direkomendasikan untuk proyek baru.

DataStore (Jetpack Android)

DataStore adalah pengganti modern SharedPreferences dari Google. Bekerja secara asinkron melalui Kotlin Coroutines dan Flow, mendukung Preferences DataStore (kunci-nilai) dan Proto DataStore (data berjenis melalui Protobuf). DataStore aman untuk thread UI dan mendukung transaksi.

NSUserDefaults (iOS)

UserDefaults adalah penyimpanan standar untuk pengaturan kecil di iOS. Mendukung tipe primitif, string, tanggal, Data. UserDefaults sinkron, sehingga tidak cocok untuk volume data besar. Pendaftaran nilai melalui register(defaults:) menetapkan nilai default.

Database Cloud: Firebase Firestore dan Realtime DB

Untuk penyimpanan data di aplikasi yang memerlukan sinkronisasi antar perangkat, digunakan database cloud Firebase.

Cloud Firestore

Firebase Firestore adalah database dokumen NoSQL dengan langganan waktu nyata, penskalaan otomatis, kueri kuat, dan mode offline bawaan. Data diatur dalam koleksi dan dokumen (struktur mirip JSON). Firestore mendukung transaksi dan operasi batch. Ideal untuk obrolan, umpan, dan aplikasi sosial.

Firebase Realtime Database

Firebase Realtime Database adalah database NoSQL Firebase yang lebih lama yang menyimpan data sebagai satu pohon JSON. Lebih sederhana dari Firestore tetapi kurang fleksibel dalam kueri dan penskalaan. Direkomendasikan untuk aplikasi waktu nyata sederhana (status online, obrolan sederhana).

FiturCloud FirestoreFirebase Realtime DB
Model dataKoleksi → DokumenPohon JSON
KueriKompleks (filter, urut, batas)Sederhana (berdasarkan kunci)
PenskalaanOtomatisSharding manual
Mode offlineYa (cache persisten)Ya
HargaPer operasi baca/tulisPer lalu lintas + penyimpanan

Penyimpanan Aman: Keystore, Keychain dan EncryptedSharedPreferences

Penyimpanan token, kata sandi, dan kunci enkripsi memerlukan penyimpanan terlindungi khusus.

Android Keystore

Android Keystore adalah penyimpanan sistem untuk kunci kriptografi. Kunci disimpan di lingkungan perangkat keras (TEE — Trusted Execution Environment), tidak dapat diakses oleh aplikasi dan sistem operasi. Mendukung pembuatan kunci, enkripsi, dan penandatanganan. Android 9+ menyertakan StrongBox Keymaster (chip khusus).

iOS Keychain

Keychain Services adalah penyimpanan iOS yang aman untuk kata sandi, kunci, dan sertifikat. Data dienkripsi menggunakan Secure Enclave perangkat keras. Keychain mendukung tingkat aksesibilitas: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences adalah pembungkus di sekitar SharedPreferences dengan enkripsi kunci dan nilai melalui AES256-GCM dan HKDF. Diimplementasikan di perpustakaan AndroidX Security. Direkomendasikan untuk menyimpan token dan pengaturan sensitif.

Di IT Sectr, kami menggunakan Android Keystore + EncryptedSharedPreferences untuk menyimpan token penyegaran dan kunci biometrik. Di iOS, kami menggunakan Keychain dengan tingkat kSecAttrAccessibleWhenUnlockedThisDeviceOnly untuk keamanan maksimum.

Penyimpanan Berkas: Internal, External, Cache Directory

Untuk penyimpanan berkas (gambar, video, dokumen), platform seluler menyediakan beberapa jenis penyimpanan.

Android Storage

Android membedakan antara Internal Storage (/data/data/paket/ — penyimpanan pribadi) dan External Storage (kartu SD atau partisi emulasi). Cache Directory adalah penyimpanan sementara yang dapat dibersihkan sistem. Scoped Storage (Android 10+) membatasi akses ke External Storage — aplikasi hanya melihat file mereka sendiri atau file melalui MediaStore/SAF.

iOS Storage

iOS menyediakan Documents Directory (cadangan iCloud, data persisten), Library/Caches (file sementara, tidak dicadangkan) dan Tmp Directory (sementara, dapat dibersihkan). Gunakan NSFileManager untuk bekerja dengan sistem file. iOS 11+ mendukung File Provider untuk file cloud.

Serialisasi Data: JSON, Protobuf dan Perpustakaan

Serialisasi mengonversi objek menjadi format untuk transmisi atau penyimpanan. Deserialisasi adalah proses sebaliknya.

Format

JSON (JavaScript Object Notation) adalah format paling populer: dapat dibaca, fleksibel, didukung oleh semua platform. XML lebih ketat, digunakan di sistem lama. Protobuf (Protocol Buffers) adalah format biner dari Google: 3-10x lebih ringkas dari JSON, penguraian lebih cepat, dengan skema ketat. Digunakan untuk sistem beban tinggi dan mikroservis.

Perpustakaan Android

  • Gson (Google) — sederhana, fleksibel, tetapi lambat. Bekerja secara otomatis dengan objek Java/Kotlin
  • Moshi (Square) — lebih cepat dari Gson, dukungan Kotlin lebih baik (properti non-null, nilai default, kelas sealed)
  • kotlinx.serialization — serialisasi Kotlin asli dari JetBrains, bekerja saat kompilasi, mendukung JSON, Protobuf, CBOR

Perpustakaan iOS

JSONSerialization adalah API bawaan untuk bekerja dengan JSON. Codable (Encodable/Decodable) adalah protokol Swift modern untuk serialisasi otomatis ke JSON, Property List, dan format lainnya.

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)

Solusi Lintas Platform: Hive, ObjectBox, Drift

Untuk Flutter dan React Native, ada perpustakaan penyimpanan efisien sendiri.

Hive (Flutter)

Hive adalah penyimpanan kunci-nilai ringan dan cepat untuk Flutter. Tidak memerlukan kode asli (Dart murni), mendukung pengetikan melalui TypeAdapter, dan bekerja di isolate. Ideal untuk cache, pengaturan, dan volume data kecil.

ObjectBox

ObjectBox adalah database tertanam berkinerja tinggi untuk Flutter, Android, dan iOS. 10+ kali lebih cepat dari SQLite, menggunakan struktur file datar untuk overhead minimal. Mendukung hubungan, kueri, dan langganan reaktif (ObjectBox Dart).

Drift (sebelumnya Moor)

Drift adalah perpustakaan SQLite reaktif untuk Flutter dan Dart. Menyediakan kueri aman tipe, migrasi, fungsi DAO, dan dukungan Stream (pembaruan reaktif). Drift adalah pilihan utama untuk proyek Flutter yang memerlukan SQLite.

Pertanyaan yang Sering Diajukan

Mana yang lebih baik untuk penyimpanan data lokal: Room atau Core Data?

Pilihan tergantung pada platform: Room (Android) adalah perpustakaan resmi berbasis SQLite dengan pemeriksaan kueri waktu kompilasi. Core Data (iOS) adalah kerangka kerja Apple dengan graf objek. Untuk proyek lintas platform, Realm atau SQLite melalui ORM cocok.

Apa perbedaan antara SharedPreferences dan DataStore?

SharedPreferences adalah implementasi lama dengan akses sinkron dan risiko ANR. DataStore (Jetpack) adalah pengganti modern berbasis Kotlin Coroutines dan Flow, mendukung asinkronisitas, pengetikan, dan perlindungan kesalahan.

Bagaimana cara menyimpan token dan kata sandi dengan aman di aplikasi seluler?

Android: EncryptedSharedPreferences atau Android Keystore. iOS: Keychain Services dengan aksesibilitas WhenUnlockedThisDeviceOnly. Untuk data kritis, gunakan Secure Enclave (iOS) dan Keystore perangkat keras (Android) dengan biometrik.

Apa itu Firebase Firestore dan kapan harus digunakan?

Cloud Firestore adalah database NoSQL dari Firebase dengan sinkronisasi waktu nyata, mode offline, dan penskalaan otomatis. Cocok untuk obrolan, umpan berita, dan proyek yang memerlukan sinkronisasi antar perangkat.

ORM apa yang ada untuk Flutter dan React Native?

Flutter: Hive (kunci-nilai cepat), Floor (ORM SQLite), Drift (Moor, SQLite reaktif), ObjectBox (DB tertanam berkinerja tinggi). React Native: Realm, WatermelonDB (pemuatan malas) dan AsyncStorage (analog SharedPreferences).

Ringkasan

  • Room (Android) dan Core Data (iOS) adalah solusi resmi untuk database relasional di setiap platform
  • DataStore menggantikan SharedPreferences untuk penyimpanan pengaturan asinkron
  • Keystore / Keychain wajib untuk penyimpanan token dan kunci yang aman
  • Firebase Firestore adalah pilihan terbaik untuk sinkronisasi waktu nyata antar perangkat
  • Kotlinx.serialization (Android) dan Codable (iOS) adalah pendekatan serialisasi modern
  • Untuk Flutter: Drift (SQLite), Hive (kunci-nilai), ObjectBox (kinerja tinggi)
  • Realm adalah alternatif lintas platform untuk SQLite dengan notifikasi reaktif

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek