Session vs JWT: Jangan Asal Ikut Tutorial YouTube, Pahami Bedanya!
Kalau kamu baru belajar bikin API (pakai Express, NestJS, atau Laravel), pas masuk materi Authentication (Login/Register), kemungkinan besar tutorial yang kamu tonton di YouTube langsung bilang:
Oke guys, kita install library
jsonwebtokenya buat bikin tokennya...
Jujur, aku dulu juga gitu. Main sikat aja. Pokoknya kalau login ya pakai JWT. Kelihatannya keren, modern, dan "stateless".
Tapi setelah belajar lebih dalam dan diskusi sama senior, aku sadar ada satu miskonsepsi besar di kalangan pemula: Menganggap JWT adalah satu-satunya cara, dan Session itu cara kuno.
Salah pilih metode autentikasi bisa bikin aplikasimu boros resource atau malah punya celah keamanan fatal. Biar nggak bingung sama istilah teknis yang njelimet, mari kita pakai analogi visual.
1. Session-Based Auth (Si Buku Tamu)
Ini adalah cara klasik. Bayangkan kamu datang ke resepsi pernikahan.
- Kamu datang ke meja penerima tamu dan bilang "Saya Kikuk".
- Penerima tamu (Server) buka buku besar tamu undangan (Database/Memory).
- Dia ngecek, "Oh iya, Mas Kikuk ada di daftar meja nomor 5".
- Kamu dikasih kertas kecil nomor meja (Session ID) buat dipegang.
Setiap kali kamu mau ambil makan (request ke API), pelayan cuma liat kertas nomor meja itu, lalu lari ke penerima tamu buat konfirmasi lagi: "Nomor ini beneran tamu sah nggak?".
Kelebihannya:
- Kontrol Penuh di Server: Kalau kamu bikin rusuh di pesta, penerima tamu tinggal coret namamu di buku besar. Detik itu juga kertas nomormu nggak berlaku. (Mudah melakukan Revoke akses).
Kekurangannya:
- Server Capek: Setiap kali ada yang mau ngapa-ngapain, server harus buka-tutup "buku besar" buat ngecek. Kalau tamunya ada sejuta, bukunya tebel banget dan antrian jadi lama (Isu Skalabilitas).
2. Token-Based Auth / JWT (Si Gelang Konser)
Sekarang bayangkan kamu mau masuk konser musik besar.
- Kamu beli tiket, lalu ditukar jadi Gelang Tangan (JWT).
- Di gelang itu sudah tertulis jelas: "Kikuk, Tiket VIP, Berlaku sampai jam 10 malam".
- Pas mau masuk, satpam (Server) nggak perlu buka buku daftar penonton. Satpam cuma perlu cek: "Gelangnya asli nggak? Tanda tangannya bener nggak?". Kalau asli, silakan masuk.
Server nggak nyimpen data apapun soal kamu setelah ngasih gelang. Server cuma percaya sama apa yang tertulis di gelang itu.
Kelebihannya:
- Server Santai (Stateless): Server nggak perlu bolak-balik cek database setiap ada request. Sangat bagus kalau penontonnya jutaan dan gerbang masuknya banyak (Skalabilitas tinggi/Microservices).
Kekurangannya (Ini yang sering dilupain pemula!):
- Susah Dicabut (Revoke): Kalau gelangmu jatuh dan ditemu orang jahat, orang itu bisa masuk konser seenaknya sampai jam 10 malam. Satpam nggak bisa "membatalkan" gelang yang sudah beredar di luar sana dengan mudah. Kamu harus nunggu gelangnya kadaluarsa (Expired) dulu.
Jadi, Kapan Pakai Mana?
Jangan jadi developer yang cuma ikut-ikutan. Jadilah engineer yang paham trade-off.
Gunakan SESSION Jika:
- Aplikasi kamu butuh fitur keamanan ketat di mana kamu harus bisa nendang user keluar kapan saja (contoh: Aplikasi Perbankan, Admin Panel internal).
- Usernya belum sampai jutaan concurrent (website kampus, web UMKM, masih aman pakai session).
Gunakan JWT Jika:
- Aplikasi kamu punya banyak user dan butuh performa tinggi (skala startup unicorn).
- Kamu pakai arsitektur Microservices (biar tiap servis nggak perlu nanya ke database pusat terus-terusan).
- Kamu bikin Mobile App (Session/Cookie kadang ribet diatur di mobile native).
Kesimpulan
Berhenti menganggap JWT itu "obat segala penyakit". JWT itu keren, tapi punya risiko keamanan kalau nggak paham cara pakainya (terutama soal refresh token dan revocation).
Sebagai Backend Developer, tugas kita bukan cuma bikin fitur login jalan, tapi memastikan cara yang dipilih itu aman dan sesuai kebutuhan sistem.
#backend #auth #security #engineering-basics
Tags
Enjoyed this article?