Kalau kamu pernah berkutat di dunia pengembangan web, pasti kata server dan client terus-menerus mampir di telinga — biasanya dalam satu kalimat yang sama, sering tanpa ada yang sempat menjelaskan keduanya berhubungan seperti apa. Mereka bukan dua hal yang saling bersaing. Mereka adalah dua peran dalam satu percakapan, dan hampir setiap hal yang kamu lakukan online adalah salah satu percakapan ini yang sedang berlangsung.
Begitu kamu bisa melihat fitur apa pun lalu langsung tahu bagian mana yang jalan di client dan bagian mana yang jalan di server, banyak hal jadi lebih ringan: bug jadi gampang ditebak, keputusan soal keamanan jadi terang, dan tutorial berhenti terdengar seperti teka-teki. Jadi ayo kita kunci dulu kedua sisi ini dengan jelas, tanpa muter-muter.
Apa itu client
Client adalah pihak yang meminta sesuatu. Dialah yang memulai percakapan. Saat kamu membuka sebuah halaman web, browser-mu adalah client — dia mengirim permintaan yang isinya “kasih saya halaman ini”, lalu menunggu. Aplikasi ponsel juga client. Begitu pula program desktop yang mengecek pembaruan, atau perkakas command-line yang mengunduh sebuah berkas. Apa pun yang memulai sebuah permintaan dan memakai jawabannya sedang memerankan client.
Ciri utama client adalah dia yang mengulurkan tangan duluan. Dia tahu di mana letak benda yang dia mau (sebuah alamat) dan tahu cara memintanya (sebuah protokol). Selebihnya, client biasanya fokus melayani satu pengguna pada satu waktu — yaitu kamu. Browser-mu melayanimu dan tidak ada orang lain. Inilah salah satu pembeda terbesarnya dari server.
Apa itu server
Server adalah pihak yang menunggu untuk diminta, lalu menjawab. Dia tidak memulai percakapan; dia diam di sana, menyimak, siap merespons begitu sebuah permintaan datang. Saat browser-mu minta sebuah halaman, ada mesin di ujung sana yang menerima permintaan itu, mencari tahu apa yang dibutuhkan, lalu mengirim balik jawaban. Mesin itu — beserta program di dalamnya yang menangani permintaan tadi — adalah server.
Ciri utama server adalah dia menyimak dan merespons, sering kali untuk banyak client sekaligus. Satu server bisa saja menjawab ribuan permintaan per detik dari orang-orang yang tersebar di seluruh dunia, semuanya pada saat yang sama. Kalau gambaran soal server secara keseluruhan masih buram, ada baiknya mundur sebentar ke apa itu server sebenarnya dulu — artikel ini menganggap kamu sudah punya gambaran dasar itu, lalu memperbesar fokus pada bagaimana server berbeda dari client.
Client dan server itu peran, bukan mesin
Komputer fisik yang sama bisa jadi client di satu percakapan dan jadi server di percakapan lain. Sebuah web server yang butuh data bisa balik badan dan berperan sebagai client terhadap server database — dia mengirim permintaan lalu menunggu jawaban. Jadi jangan membayangkan “client = laptop, server = mesin besar di rak”. Bayangkan “client = sisi yang bertanya, server = sisi yang menjawab”. Perannya bisa bertukar tergantung ke arah mana sebuah permintaan tertentu sedang mengalir.
Permintaan dan jawaban
Semua hal antara client dan server terjadi sebagai tarik-ulur permintaan (request) dan jawaban (response). Client mengirim permintaan — “saya mau halaman utama”, “simpan form ini”, “loginkan saya”. Server menerimanya, mengerjakan apa pun yang diminta, lalu mengirim balik jawaban — halamannya, sebuah konfirmasi, sebuah error, atau sepotong data. Lalu percakapan itu selesai, dan yang berikutnya mulai lagi dari awal.
CLIENT SERVER
(bertanya dulu) (menjawab)
│ │
│ request ──────────────────► │
│ │ kerjakan
│ ◄────────────────── response │
│ │
pakai hasilnya
Bayangkan kamu memesan makanan di sebuah konter. Kamu (client) maju lalu menyebutkan pesanan. Dapur (server) menerima pesanan itu, menyiapkan masakannya, dan menyerahkannya kembali. Kamu tidak ikut masak; dapur juga tidak menebak-nebak kamu lagi pengin makan apa. Tiap sisi punya tugas yang jelas, dan tiket pesanan itu adalah request, sementara piring yang datang adalah response. Web bekerja persis seperti itu, cuma berkali-kali lipat lebih banyak setiap detiknya.
Kodemu sebenarnya berjalan di mana
Di sinilah pembedaan ini berhenti jadi sekadar pengetahuan iseng dan mulai betul-betul penting buatmu sebagai pembuat aplikasi. Di sebuah aplikasi web pada umumnya, kodemu terbagi di kedua sisi, dan di sisi mana sepotong kode berjalan itu mengubah segalanya soal kode tersebut.
Kode sisi client berjalan di browser pengguna, di perangkat milik pengguna. Ini adalah HTML, CSS, dan JavaScript yang menangani klik, animasi, validasi form selagi kamu mengetik, serta memperbarui halaman tanpa perlu reload. Semua itu berjalan di ponsel atau laptop apa pun yang kebetulan dipakai pengunjung, memakai baterai dan jaringan mereka.
Kode sisi server berjalan di server, di perangkat keras yang kamu kendalikan. Ini adalah logika yang mengecek password, membaca dan menulis database, memproses pembayaran, dan menentukan data apa yang boleh dilihat oleh seorang pengguna tertentu. Semua itu berjalan di lingkungan yang terkendali, dengan cara yang sama setiap kali, tidak peduli perangkat apa yang sedang dipakai pengunjung.
BROWSER (sisi client) SERVER (sisi server)
───────────────────── ────────────────────
• tata letak HTML / CSS • autentikasi
• interaksi antarmuka • baca/tulis database
• umpan balik saat mengetik • aturan bisnis
• validasi di sisi client • pembayaran, rahasia
• jalan di perangkat PENGGUNA • jalan di mesin KAMU
Garis pemisah antara keduanya adalah salah satu garis terpenting di seluruh pengembangan web. Banyak kebingungan pemula — dan banyak lubang keamanan yang nyata — muncul karena menaruh sesuatu di sisi yang salah.
Jangan pernah percaya pada client
Apa pun yang berjalan di client bisa dilihat, diubah, atau dipalsukan oleh pengguna. Dev tools di browser membolehkan siapa saja membaca JavaScript sisi client-mu dan menyunting permintaan sebelum dikirim. Jadi validasi yang kamu lakukan di browser itu untuk kenyamanan (umpan balik instan), bukan untuk keamanan. Kalau sebuah aturan benar-benar penting — “cuma pemilik akun yang boleh menghapus ini”, “harganya Rp20.000, bukan Rp0” — aturan itu harus ditegakkan di server, tempat pengguna tidak bisa mengutak-atik. “Validasi di client demi pengalaman, tegakkan di server demi keamanan” adalah aturan yang layak kamu tato di kepala.
Kenapa pembagiannya ada
Mungkin kamu bertanya-tanya kenapa repot-repot membagi pekerjaan ke dua sisi, bukannya mengerjakan semuanya di satu tempat saja. Pembagian itu ada karena tiap sisi jago di hal yang berbeda.
Client itu dekat dengan pengguna, jadi dia sempurna untuk apa pun yang perlu terasa instan — memunculkan menu saat kursor lewat, memvalidasi sebuah kolom selagi diketik, menganimasikan sebuah transisi. Mengerjakan itu di server berarti satu perjalanan bolak-balik yang lambat melintasi jaringan untuk tiap interaksi kecil.
Server adalah satu-satunya tempat yang dipakai bersama semua orang, sekaligus satu-satunya tempat yang kamu kendalikan, jadi di situlah apa pun yang bisa dipercaya atau dipakai bersama harus tinggal. Datamu, aturan main aplikasimu, kunci-kunci rahasia, sumber kebenaran — semuanya berada di server karena harus sama untuk semua orang dan terlindung dari gangguan. Client tidak boleh dititipi rahasia, karena client itu milik pengguna, bukan milikmu.
Jadi pembagian tugasnya memang wajar: client menangani tampilan dan interaksi langsung, server menangani kebenaran dan kepercayaan. Aplikasi yang baik menaruh tiap jenis pekerjaan di tempat yang semestinya.
Contoh nyata
Bayangkan Jane Doe login ke akunnya di sebuah situs buatan ACY Partner Indonesia. Perhatikan bagaimana peran-perannya berjalan:
- Jane mengetik email dan password-nya ke sebuah form. Client (browser-nya) memberi umpan balik instan kalau email-nya kurang tanda
@. Itu cuma pengecekan demi kenyamanan, tidak lebih. - Dia mengeklik “Login”. Client membungkus email dan password tadi lalu mengirimnya sebagai permintaan ke server.
- Server menerima permintaan itu. Dia mencari akun Jane, mencocokkan password dengan yang tersimpan (yang sudah di-hash), dan memutuskan apakah Jane boleh masuk. Inilah pengecekan keamanan yang sebenarnya, dan terjadi di tempat yang jawabannya tidak bisa Jane palsukan.
- Server mengirim balik jawaban — sebuah keberhasilan, lengkap dengan token yang membuktikan dia sudah login, atau sebuah error kalau password-nya salah.
- Client menerima jawaban itu lalu memperbarui halaman: menampilkan dashboard Jane, atau menampilkan pesan error.
Tiap langkah selalu “client bertanya” atau “server menjawab”. Perhatikan bahwa keputusan yang penting — benarkah ini Jane, dan apakah password-nya cocok — terjadi sepenuhnya di server. Tugas client cuma mengumpulkan masukan dan menampilkan hasil, dan itu persis yang seharusnya client kerjakan.
Titik-titik yang sering bikin bingung
Ada beberapa hal yang sering mengganjal orang saat mempelajari ini, jadi mari kita bereskan:
- “Frontend” dan “backend” tidak persis sama dengan client dan server, tapi dekat. Frontend adalah bagian sisi client yang kamu lihat dan ajak berinteraksi; backend adalah bagian sisi server yang menangani data dan logika. Orang memakai istilahnya hampir bergantian, dan biasanya itu tidak masalah.
- Server pun bisa jadi client. Seperti tadi, web server-mu sering bertindak sebagai client terhadap sebuah database atau layanan lain. Peran bergantung pada arah permintaan, bukan pada mesinnya.
- “Serverless” tetap pakai server. Ini nama yang agak berbau pemasaran untuk setup di mana kamu tidak mengelola server-nya sendiri — penyedianya yang menjalankannya untukmu dan menyalakannya sesuai kebutuhan. Tetap ada server yang menjawab permintaan; kamu cuma tidak perlu mengasuhnya.
- Client tidak selalu sebuah browser. Aplikasi ponsel, TV pintar, server lain, skrip, dan perangkat IoT semuanya jadi client saat mereka membuat permintaan. Browser cuma contoh yang paling akrab.
Kenapa ini penting buatmu
Jadi nyaman dengan pembagian client–server ini langsung terasa manfaatnya. Saat sebuah fitur bertingkah aneh, pertanyaan pertamamu yang berguna jadi “ini masalah client atau masalah server?” — dan satu pertanyaan itu saja sudah memangkas ruang pencarian jadi separuh. Saat kamu memutuskan di mana menaruh sepotong logika, kamu otomatis bertanya “apakah ini perlu dipercaya? kalau iya, taruh di server.” Saat kamu membaca dokumentasi atau tutorial, frasa seperti “kerjakan ini di sisi client” atau “tangani di server” jadi terbaca seperti instruksi biasa, bukan jargon.
Model berpikir ini adalah kacamata yang bakal kamu pakai sepanjang waktumu membangun hal-hal yang berjalan online. Hampir semua topik berikutnya — hosting, jaringan, keamanan, deployment — pada dasarnya soal membuat salah satu sisi mengerjakan tugasnya dengan baik.
Penutup
Ini keseluruhan gambarannya dalam satu tempat:
- Client adalah sisi yang bertanya duluan — browser-mu, sebuah aplikasi ponsel, sebuah skrip. Dia memulai permintaan dan memakai jawabannya.
- Server adalah sisi yang menunggu lalu menjawab, biasanya melayani banyak client sekaligus.
- Client dan server itu peran, bukan mesin tertentu — komputer yang sama bisa memerankan salah satunya tergantung ke arah mana sebuah permintaan mengalir.
- Setiap interaksi adalah sebuah permintaan (client → server) dan sebuah jawaban (server → client).
- Kode sisi client berjalan di browser pengguna dan bagus untuk hal-hal instan dan interaktif — tapi tidak pernah boleh dipercaya. Kode sisi server berjalan di perangkat yang kamu kendalikan, dan di situlah kebenaran, data, dan keamanan harus tinggal.
- Aturan emasnya: validasi di client demi pengalaman yang mulus, tegakkan di server demi keamanan.
Berikutnya, ada baiknya kita perlebar pandangan dan melihat berbagai jenis server yang bakal kamu temui — web, application, database, dan lainnya — karena tiap jenis adalah server yang memerankan peran yang sedikit berbeda dalam tarian client–server yang sama.