Kita sudah memahami bahwa dalam sebuah program selain dibutuhkan komponen input, proses, dan output, ternyata seringkali juga perlu melibatkan media penyimpanan (file/database).
Dalam banyak kasus pula, user-user yang berbeda perlu mengakses database yang sama. Bayangkan kita bermain game online. Saat kita menyerang pemain lain, maka health-point dari pemain yang kita serang harus berkurang sesuai dengan damage yang kita miliki.
Dalam hal ini, harus ada satu sumber tunggal yang menyatakan berapa health point dari masing-masing player. Cara termudah adalah dengan menggunakan database yang sama untuk semua pemain dalam satu region.
Di sini kita perlu mulai menerapkan arsitektur client-server. Satu database yang ada di server akan diakses bersamaan oleh beberapa client sekaligus.
Pada kenyataannya, akses database ke server kerap kali tidak diberikan secara langsung, melainkan melalui sebuah aplikasi yang menyediakan API (application programming interface: antar muka yang bisa diakses program lain).
Sebelumnya sudah dibahas bahwa pengaksesan database tidak diberikan secara langsung, melainkan menggunakan API. Artinya di sisi client kita perlu memiliki aplikasi yang bisa mengubah/mengakses data melalui API yang sudah disediakan.
Aplikasi yang berjalan di sisi client umumnya kita sebut sebagai "frontend", sedangkan aplikasi yang berjalan di sisi server umumnya kita sebut sebagai "backend". Segala proses yang terkait dengan data/perhitungan, umumnya dikerjakan oleh backend untuk menjamin bahwa setiap client memiliki perhitungan yang sama. Sebaliknya, segala urusan antar muka akan dikerjakan oleh frontend.
Kembali ke kasus game online tadi, Saat kita menyerang player lain, maka segala animasi akan dikerjakan oleh aplikasi frontend. Selain mengurusi animasi, aplikasi frontend juga akan mengirimkan request ke backend. Isi pesan yang dikirim kurang lebih begini: "Player dengan ID sekian menyerang player dengan ID sekian". Tidak ada informasi damage/health point yang rentan dimanipulasi.
Untuk bisa membuat frontend dan backend berkomunikasi, maka seorang developer perlu memutuskan beberapa hal:
Protokol yang dipakai bisa beranekaragam, tapi untuk teks umumnya menggunakan TCP/HTTP. Protokol-protokol yang ada bisa dibedakan menjadi beberapa lapisan. HTTP (hyper text transfer protocol) misalnya, di level yang lebih rendah menggunakan TCP untuk menjamin bahwa data yang dikirimkan memang benar.
Untuk format data dalam bentuk text, kita bisa menggunakan XML/JSON/Avro/GRPC atau yang lain.