Apa yang terjadi di balik tombol?
Bayangkan Anda sedang menekan tombol "Beli" di sebuah aplikasi e-commerce, atau menekan "Login" di media sosial. Bagi kita sebagai pengguna, itu hanyalah satu klik sederhana yang terasa instan.
Namun faktanya, satu klik tersebut sebenarnya memicu sebuah reaksi berantai yang kompleks antar mesin, program, dan jaringan internet.
Apa yang sebenarnya terjadi dalam sepersekian detik tersebut?
Client & Server
Laptop atau smartphone yang kalian gunakan bertindak sebagai Client, yaitu pihak yang mengirimkan permintaan (Request).
Sementara di tempat lain, ada komputer Server yang bertugas memproses permintaan tersebut dan mengirimkan balasan (Response) berupa data yang Anda butuhkan.
3-Tier Architecture
Sebuah Server tidak bekerja sendirian. Untuk mengelola sistem yang kompleks, aplikasi modern dibagikan ke dalam 3 lapisan (3-Tier Architecture):
Apa yang Anda lihat dan interaksikan di layar.
Otak dari aplikasi yang memproses aturan bisnis, komputasi perhitungan, dan mengambil keputusan.
Tempat penyimpanan data secara permanen, seperti daftar produk, harga, hingga akun pengguna.
Dalam arsitektur web yang kita bangun di praktikum ini, ketiga bagian tersebut diwujudkan secara nyata melalui Frontend (Presentation Tier), Backend (Logic Tier), dan Database (Data Tier).
HTTP Request & Response
Saat Client berkomunikasi dengan Server, protokol jaringan yang digunakan adalah HTTP. Berikut pemetaan aksi CRUD ke metode-metode HTTP:
- Create (POST): Membuat data baru (misal: mendaftar akun).
- Read (GET): Mengambil/menampilkan data (misal: melihat daftar produk).
- Update (PUT): Memperbarui data yang ada (misal: mengubah alamat pengiriman).
- Delete (DELETE): Menghapus data (misal: menghapus barang dari keranjang).
*Sebenarnya metode HTTP ada banyak yang lain, namun hanya beberapa yang umum digunakan seperti 4 di atas.
Kode yang rapi
Bayangkan sebuah aplikasi tidak hanya dibuat oleh satu orang, melainkan oleh tim berisi puluhan developer yang bekerja secara bersamaan.
Bagaimana caranya agar kodingan yang ditulis oleh Developer A tidak saling menimpa atau merusak kodingan milik Developer B?
Di sinilah kita membutuhkan sistem pelacak perubahan.
Git & GitHub
Untuk mengatasi masalah kolaborasi tersebut, kita menggunakan Git dan GitHub.
Sistem Version Control lokal yang mencatat setiap riwayat perubahan pada folder project kalian di komputer. Sangat berguna untuk tracking perubahan di code base kalian, apalagi saat skala project mulai membesar dan serius.
Platform berbasis cloud tempat menyimpan dan membagikan repository Git tersebut, sehingga seluruh tim dapat berkolaborasi dari mana saja.
Silahkan download dan install Git di git-scm.com/install,
dan buat akun GitHub di github.com jika belum punya.
3 Tahap Penyimpanan
Ada tiga tahap penyimpanan dalam workflow Git:
- Working Directory: Tempat Anda mengedit dan menulis kode.
- Staging Area: Tempat Anda memilih berkas mana saja yang siap untuk disimpan.
- Local Repository: Tempat perubahan berhasil disimpan secara resmi ke dalam riwayat Git di komputer Anda.
git addMenambahkan perubahan dari Working Directory ke Staging Area.
git commitMenyimpan perubahan dari Staging Area ke Local Repository secara resmi.
git restoreMembatalkan perubahan, bisa dari Staging ke Working Directory, atau membatalkan perubahan kembali ke commit sebelumnya.
Perintah Dasar Git
Selain workflow di atas, berikut beberapa perintah dasar lain yang perlu diketahui:
git initMenginisialisasi repository Git baru di folder saat ini.
git log --onelineMelihat riwayat commit dalam format ringkas — satu baris per commit.
git helpMenampilkan daftar perintah Git atau dokumentasi untuk perintah tertentu.
Memeriksa Status Repository
git statusMenampilkan kondisi repository saat ini, file mana yang sudah di-staging, belum di-staging, atau belum terlacak.
Berikut contoh output yang biasanya muncul:
Membatalkan Commit Terakhir
Bagaimana jika kita ingin membatalkan commit yang sudah terlanjur dibuat di Local Repository? Git menyediakan perintahgit resetdengan tiga tingkat keamanan:
--softMembatalkan commit, tetapi perubahan berkas tetap aman di Staging Area.
--mixed(default)Membatalkan commit dan staging, perubahan balik ke Working Directory.
--hardMembuang seluruh perubahan secara permanen dan mengembalikan proyek ke kondisi commit sebelumnya.
Remote Repository
Ketika seluruh perubahan di komputer lokal sudah rapi dan teruji, saatnya menghubungkannya dengan tim melalui Remote Repository (GitHub):
git pushMengirimkan commit dari Local Repository ke Remote Repository agar bisa dilihat oleh tim.
git pullMengambil dan menggabungkan pembaruan terbaru dari Remote Repository ke Local Repository.
git fetchHanya mengambil informasi dari remote tanpa menggabungkan. Berguna untuk melihat perubahan sebelum memutuskan untuk merge.
git clone <url>Mengcopy repository dari remote ke komputer lokal beserta seluruh riwayatnya.
Branch: Ruang aman untuk eksperimen
Dalam proyek nyata, kita tidak boleh langsung mengubah kode utama (main) yang sedang dipakai pengguna. Disinilah kita perlu melakukan branching.
Branch seperti membuat cabang salinan dari kode proyek Anda. Developer bisa membuat percabangan baru untuk memperbaiki bug atau menambah fitur baru secara terpisah. Ketika pekerjaan selesai dan teruji, perubahan di branch tersebut akan digabungkan kembali ke branch utama tanpa mengganggu alur pengembangan lainnya.
Command-command dasar manipulasi branch
Untuk mengetahui posisi branch dan commit yang sedang Anda kerjakan saat ini, Git menggunakan penanda bernama HEAD.
Perintah dasar branching:
git switch -c <nama-branch>Membuat branch baru sekaligus pindah ke sana.
git switch <nama-branch>Pindah ke branch yang sudah ada.
git branch -d <nama-branch>Hapus branch yang sudah tidak dipakai.
Merge Strategies
Ketika fitur di branch lokal sudah selesai, ada tiga metode umum untuk menggabungkannya kembali ke main:
Menggabungkan dua branch dengan membuat satu commit penanda baru (Merge Commit). Riwayat percabangan tetap terlihat jelas.
Memindahkan pangkal branch fitur ke ujung main, sehingga riwayat commit terlihat lurus dan rapi.
Menumpuk dan memadatkan banyak commit kecil menjadi satu commit tunggal di main, menjaga riwayat main tetap bersih.
Kapan pakai mana?
- • Merge: default paling aman. Gunakan untuk fitur besar yang perlu riwayat percabangan terlihat.
- • Rebase: saat ingin riwayat commit di branch fitur tetap rapi sebelum merge.
- • Squash: saat branch punya banyak commit kecil ("wip", "fix typo", dll) yang tidak perlu terlihat di riwayat utama.
Contoh Merge
Misalkan kita punya branch feature/login yang sudah selesai dikerjakan. Berikut cara menggabungkannya ke main menggunakan ketiga metode:
Pull Request
Di dalam tim profesional, seorang developer tidak langsung menggabungkan kodenya sendiri ke repository utama. Ada alur kerja standar yang disebut Pull Request (PR).
Pull Request adalah permintaan yang dikirimkan oleh developer kepada tim untuk menggabungkan perubahan dari branch kerja mereka ke branch utama. PR menjadi tempat diskusi, code review, dan persetujuan sebelum kode benar-benar masuk ke main atau branch penting lainnya.
Workflownya kira-kira seperti ini:
Membuat feature branch -> Menulis kode -> Push commit-commitnya ke GitHub -> Membuat Pull Request.
Memeriksa kode yang diajukan. Jika ada catatan, developer memperbaiki kodenya terlebih dahulu. Jika kode sudah aman, PR disetujui (Approve) lalu digabungkan (Merge).
Ketika kode bertabrakan
Apa yang terjadi jika dua orang developer mengubah baris kode yang sama di file yang sama? Terjadilah Merge Conflict.
Git bingung memilih perubahan mana yang benar sehingga proses merge terhenti. Di sinilah developer harus turun tangan secara manual untuk menentukan kode mana yang akan dipertahankan.
Memahami marker conflict
<<<<<<< HEADKode di bawah tanda ini berasal dari branch kalian sekarang (branch aktif).
=======Pemisah antara versi branch kalian dan versi branch yang masuk.
>>>>>>> feature/branchKode di atas tanda ini berasal dari branch yang sedang digabungkan.
Untuk resolve conflict, buka file yang bermasalah, pilih kode yang benar, hapus baris marker (<<<,===,>>>), lalu commit hasil perbaikan.
