Perbedaan Local Storage (Frontend) vs Server (Backend)
HTML, CSS, dan JavaScript adalah teknologi frontend yang berjalan di sisi klien (browser), digunakan untuk menyusun struktur, tampilan, dan interaktivitas halaman web.
Sebaliknya, PHP, Node.js, DB, atau Python digunakan di sisi backend (server), yang berfungsi untuk mengolah data, mengelola database, dan menangani autentikasi. Backend adalah bagian dari aplikasi yang berjalan di server — tidak terlihat langsung oleh pengguna.
HTML dan CSS tidak dapat dikonversi langsung ke backend karena HTML hanya berfungsi sebagai struktur, dan CSS untuk tampilan, bukan logika pemrosesan data. Demikian pula, JavaScript di frontend hanya bisa melakukan interaksi di sisi klien, dan tidak bisa menggantikan peran backend.
Meski begitu, frontend dan backend bisa dihubungkan melalui integrasi, bukan konversi. Frontend dapat mengirim permintaan ke backend menggunakan metode seperti fetch() atau axios, dan backend akan merespons dengan data (JSON) atau HTML yang telah diolah.
Proses ini memungkinkan terjadinya komunikasi dua arah antara browser dan server, menciptakan interaktivitas penuh dalam mini proyek seperti sistem login, komentar, atau kalkulasi data berdasarkan input pengguna.
Untuk alasan keamanan, jangan pernah menyimpan API key, token, password, atau informasi rahasia di frontend atau localStorage. Data sensitif tersebut harus disimpan dan dikelola di backend/server.
Backend jauh lebih aman karena data tidak terekspos langsung ke pengguna, dapat dikontrol melalui hak akses dan autentikasi, serta lebih sulit dimodifikasi dari luar. Server sendiri merupakan lokasi fisik atau virtual tempat backend dijalankan.
Dalam arsitektur web modern, backend sering berkomunikasi dengan database seperti MySQL, PostgreSQL, atau MongoDB, dan menyediakan API untuk layanan seperti login, pendaftaran, penyimpanan data, dan lainnya.
Perbandingan Frontend vs Backend
| Aspek | Frontend (Lokal / Browser / HP) | Backend (Server) |
|---|---|---|
| Lokasi | Di perangkat pengguna | Di komputer/server jauh |
| Aksesibilitas | Terlihat & bisa dimodifikasi | Tidak terlihat langsung |
| Contoh teknologi | HTML, CSS, JavaScript | PHP, Node.js, Python, DB |
| Aman untuk rahasia? | ❌ Tidak aman (bisa dilihat di DevTools) | ✅ Lebih aman |
| Contoh penyimpanan | localStorage, file lokal | Database, file server |
| Fungsi utama | Struktur & Tampilan | Logika, Proses Data, Autentikasi |
| Tempat berjalan | Berjalan di Browser (Client) | Berjalan di Server |
| Akses database | Tidak bisa langsung mengakses database | Bisa mengakses dan mengolah database |
| Konversi | Tidak bisa dikonversi ke backend | Menghasilkan HTML untuk dikirim ke frontend |
| Komunikasi | Kirim permintaan (fetch, AJAX) | Terima permintaan dan kirim respon (JSON, HTML) |
Perbedaan File Lokal (Frontend) dan File Server (Backend)
✅ 1. File Lokal (Frontend / Browser)
File lokal adalah file yang dijalankan di sisi pengguna, seperti HTML, CSS, dan JavaScript. File ini bisa diakses langsung oleh browser dan terlihat oleh pengguna.
Letak biasanya: Folder proyek lokal, atau dibuka langsung lewat file explorer.
Contoh: C:/Users/NamaAnda/Documents/Proyek/index.html
| Jenis File | Contoh |
|---|---|
| HTML | index.html |
| CSS | style.css |
| JavaScript | app.js |
| Media | gambar.jpg, video.mp4 |
| Penyimpanan Browser | localStorage, sessionStorage |
✅ 2. File Server (Backend / Server-side)
File server adalah file yang dijalankan di sisi server dan tidak terlihat langsung oleh pengguna. File ini bertugas memproses data, mengakses database, dan menangani permintaan dari frontend.
Letak biasanya: Folder backend/server seperti:
/var/www/html/ atau backend/routes/
| Jenis File | Contoh |
|---|---|
| PHP Script | login.php, proses_data.php |
| Node.js File | server.js, routes/api.js |
| Python Backend | app.py, main.py |
| Database | MySQL, MongoDB, data.sqlite |
| Konfigurasi & Template | .env, config.json, layout.ejs |
✅ Penyimpanan Lokal (Local Storage)
Penyimpanan yang terjadi di perangkat pengguna (komputer, HP, tablet, dll). Tidak butuh koneksi internet untuk diakses (selama tidak dihapus pengguna).
| Jenis Penyimpanan | Penjelasan |
|---|---|
| localStorage / sessionStorage | Penyimpanan berbasis browser (hanya bisa dibaca oleh JavaScript). |
| IndexedDB | Database lokal dalam browser untuk menyimpan data dalam jumlah besar. |
| Cookie | Data kecil yang disimpan browser, bisa dikirim ke server. |
| File di Folder HP/PC | Misalnya dokumen .txt, foto .jpg, dsb. |
| App Storage (Android/iOS) | File yang disimpan oleh aplikasi di memori internal. |
📱 Suatu file, seperti .txt di Penyimpanan Lokal
Jika suatu file, seperti file .txt, berada di dalam perangkat
(misalnya di folder Download atau Documents di HP atau komputer),
maka ✅ termasuk penyimpanan lokal karena file tersebut
dapat dibuka tanpa koneksi internet.
Namun, file tersebut ❌ tidak dapat dibuka jika mengalami masalah berikut:
- Format file rusak atau tidak valid.
- Tidak tersedia aplikasi pembuka yang sesuai (misalnya text editor).
- Izin akses ke penyimpanan dibatasi (misalnya perlu izin untuk membaca file atau akses storage).
✅ Penyimpanan Server
Penyimpanan yang terjadi di komputer server (jauh dari pengguna). Pengguna harus terhubung internet untuk mengakses.
| Jenis Penyimpanan | Penjelasan |
|---|---|
| Database server (MySQL, MongoDB) | Tempat menyimpan data dinamis, seperti akun, pesan, dsb. |
| File Storage (.txt, .pdf, dll) | Disimpan di server seperti Apache, Nginx, CDN, dll. |
| Cloud Storage (Google Drive, Amazon S3) | File disimpan di server milik pihak ketiga. |
| Backend API Response | Data dikirim lewat HTTP API dari server ke frontend. |
🌐 Suatu file, seperti .txt dari Tautan (URL) di Penyimpanan Server
Jika suatu file seperti .txt berasal dari link atau
tautan online, maka ✅ termasuk penyimpanan server,
karena file tersebut disimpan di komputer/server yang terhubung ke internet.
Namun, file mungkin ❌ tidak bisa diakses jika terjadi beberapa kendala berikut:
- Server membutuhkan login atau autentikasi (misalnya token, username/password).
- Format MIME (Multipurpose Internet Mail Extensions) tidak dikenali oleh perangkat.
- Contoh MIME:
text/plain(untuk .txt),application/pdf,image/jpeg. - Jika MIME tidak sesuai, file bisa gagal dibuka atau didownload dengan benar.
- HP atau perangkat tidak memiliki aplikasi pembuka yang sesuai (misalnya editor teks atau PDF reader).
- File terenkripsi atau menggunakan format khusus yang tidak kompatibel dengan perangkat pengguna.
✅ Contoh Kode Penyimpanan Lokal & Server
📁 Penyimpanan Lokal (Browser)
1. Kode menyimpan dan membaca data dari localStorage menggunakan HTML5, CSS, dan JavaScript:
2. Form HTML Upload (dalam folder public/index.html):
🌐 Upload & Akses File di Server (Backend)
1. upload dan membaca suatu file seperti file .txt melalui server menggunakan Node.js + Express:
2. Versi Lain (Opsional)
- ✅ PHP: Gunakan
file_get_contents()dan$_FILESuntuk upload & baca file. - ✅ React: Gunakan
fetch()atauaxiosuntuk upload ke backend. - ✅ Python (Flask/FastAPI): Gunakan
request.filesuntuk meng-handle file upload. - ✅ Cloud Storage (Firebase, Amazon S3): Upload menggunakan SDK masing-masing dan amankan URL akses file.
🔒 Keamanan
- File lokal (frontend) bisa dilihat dan dimodifikasi pengguna melalui DevTools, sehingga tidak aman untuk menyimpan rahasia. File lokal bisa aman atau tidak, tergantung siapa yang bisa mengakses perangkat pengguna. Semua kunci, salt, dan IV tetap bisa dilihat oleh pengguna lewat "View Source" atau DevTools.
- File server (backend) tidak bisa diakses langsung oleh pengguna, sehingga lebih aman untuk menyimpan API key, password, dan data sensitif lainnya. File server biasanya lebih aman jika disimpan dengan autentikasi, enkripsi, dan tidak langsung terbuka tanpa izin. Keamanan lebih tinggi karena kunci dan proses enkripsi tidak terekspos ke pengguna.
- Selalu simpan rahasia di sisi backend dan bukan di
localStorageatau file JavaScript frontend. - Enkripsi & Dekripsi seperti AES-256 dengan Salt & IV bisa dilakukan di Frontend maupun Backend, tapi kapan dan di mana tergantung kebutuhan keamanan.
🔒 Tabel Enkripsi & Dekripsi seperti AES-256 dengan Salt & IV
| Aspek | Frontend (CryptoJS / JavaScript) | Node.js (crypto module) | PHP (openssl) | Python (PyCryptodome) |
|---|---|---|---|---|
| Librari | CryptoJS.AES |
require('crypto') |
openssl_encrypt() |
Crypto.Cipher.AES |
| Kunci (Key) | String biasa, di-hash ke 256-bit | crypto.pbkdf2 atau Buffer |
String biasa (hasil hash SHA256 jika perlu) | PBKDF2 atau langsung kunci 32-byte |
| Salt | Opsional (manual) | Didukung & disarankan | Bisa disisipkan manual | Disarankan (gunakan PBKDF2) |
| IV (Initialization Vector) | Manual (harus generate sendiri) | crypto.randomBytes(16) |
openssl_random_pseudo_bytes() |
get_random_bytes(16) |
| Mode | AES-256-CBC atau CTR |
AES-256-CBC, GCM, dll |
AES-256-CBC |
AES.MODE_CBC, GCM, dsb |
| Encoding Output | Base64 (atau Hex) | Base64 atau Buffer | Base64, Hex | Base64 (gunakan binascii) |
| Kompatibilitas antar platform | Perlu konsistensi salt, IV, padding, dan format | Kompatibel jika parameter cocok | Kompatibel jika IV & padding disesuaikan | Kompatibel secara umum |
| Contoh hasil output | Base64 panjang (misal: U2FsdGVkX1...==) |
Buffer atau Base64 | String terenkripsi | Base64 terenkripsi string |
| Catatan Penting | Salt & IV harus disimpan & dikirim manual jika lintas sistem | Gunakan createCipheriv dan simpan IV |
IV disisipkan ke ciphertext jika perlu | Gunakan mode dan padding yang sama untuk decoding |
Comments
Post a Comment