C14 · Kamus istilah
Istilah C14 · Full Stack Development
Penjelasan singkat untuk istilah, fungsi, dan rumus yang dipakai di course ini. Di dalam modul, istilah bergaris titik bisa diketuk untuk melihat kartu yang sama.
Kembali ke daftar modul C14125 dari 125 istilah
ADRjuga: architecture decision record, catatan keputusan arsitektur
Catatan pendek satu keputusan arsitektur: status, konteks, keputusan, dan akibatnya, termasuk yang buruk. Disimpan di repo dan tidak diubah; keputusan pengganti ditulis sebagai catatan baru.
Contoh: ADR 001 mencatat kenapa peramban hanya berbicara dengan origin web (BFF).
Dipelajari di Modul 12 · Proyek akhir: Pesan Makmur tayang
argon2idjuga: Argon2
Fungsi hash sandi yang sengaja lambat dan memakan banyak memori, sehingga tebakan massal dengan kartu grafis menjadi mahal. Dipakai di produksi Pesan Makmur lewat pustaka argon2-cffi.
Contoh: parameter minimum yang disarankan OWASP adalah memori 19 MiB, 2 iterasi, paralelisme 1.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
at-least-oncejuga: setidaknya sekali
Jaminan pengiriman bahwa pesan sampai minimal sekali, mungkin lebih. Penerima harus aman terhadap pesan dobel.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
auditjuga: log audit, jejak audit
Catatan siapa melakukan apa, kapan, dan pada data apa, untuk aksi penting seperti mengubah harga atau membatalkan pesanan yang sudah dibayar. Tidak pernah memuat sandi atau token.
Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
backfilljuga: isi ulang data lama
Langkah mengisi kolom baru untuk baris-baris yang sudah ada, biasanya bertahap per potongan agar tabel tidak terkunci lama. Dilakukan sesudah kode mulai menulis kolom itu, sebelum kolom diwajibkan.
Contoh: mengisi
pesanan.dibayar_padadari barisriwayat_statusdenganke = 'dibayar': 429 baris terisi.Dipelajari di Modul 02 · Model data dan migrasi
backoffjuga: backoff eksponensial, exponential backoff
Jeda yang makin panjang antarpercobaan ulang, misalnya dua kali lipat setiap kali, dengan batas atas. Memberi server yang sedang pulih waktu bernapas.
Contoh: penyedia mencoba lagi sesudah 15, 30, 60, 120 detik, bukan setiap 15 detik.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
baris berlipatjuga: fan-out JOIN
Baris yang terulang karena JOIN dengan tabel yang punya beberapa pasangan untuk satu baris. Menjumlahkan sesudah JOIN seperti itu memberi angka terlalu besar.
Contoh: omzet Oktober Rp8.419.800 menjadi Rp9.039.400 bila pesanan di-JOIN dengan semua percobaan pembayaran.
Dipelajari di Modul 03 · Domain dan akses data
batas idlejuga: idle timeout
Lama sesi boleh tidak dipakai sebelum berakhir. Pesan Makmur: 14 hari untuk pelanggan, 12 jam untuk kasir dan pemilik.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
batas mutlakjuga: absolute timeout
Umur maksimum sesi sejak dibuat, berapa pun seringnya dipakai. Pesan Makmur: 30 hari untuk pelanggan, 7 hari untuk kasir dan pemilik.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
BFFjuga: backend for frontend, penerus BFF, penerus
Server kecil milik web yang meneruskan permintaan peramban ke API. Peramban hanya berbicara dengan satu origin, sehingga cookie sesi tetap cookie pihak pertama dan API tidak perlu dibuka untuk peramban.
Contoh: peramban memanggil
/api/v1/produkdi origin web; route handler Next.js meneruskannya keAPI_URL/v1/produk.Dipelajari di Modul 01 · Peta aplikasi full stack
BOLAjuga: IDOR, broken object level authorization
Celah saat API mengecek bahwa pengguna sudah masuk tetapi tidak mengecek apakah objek yang diminta miliknya. Urutan pertama di OWASP API Security Top 10 2023.
Contoh: pelanggan mengganti kode di
/v1/pesanan/PM-261031-012dan melihat pesanan tetangganya.Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
cache bersamajuga: shared cache
Penyimpan respons yang dipakai banyak pengguna sekaligus, misalnya CDN atau proksi. Ia hanya boleh menyimpan respons
public, karena salinannya diberikan kepada siapa pun yang meminta URL yang sama.Contoh: respons pesanan yang keliru diberi
publicbisa dilihat orang lain dari CDN tanpa melewati cek pemilik di API.Dipelajari di Modul 05 · Halaman produk di Next.js
Cache-Control
Kepala HTTP yang memberi tahu peramban dan CDN apakah respons boleh disimpan dan berapa lama. Halaman pribadi memakai
private, no-store; katalog bolehpublic, max-age=60, stale-while-revalidate=300.Dipelajari di Modul 05 · Halaman produk di Next.js
checksum migrasi
Sidik jari isi berkas migrasi (misalnya SHA-256) yang dicatat saat diterapkan. Bila berkas lama diubah sesudah diterapkan, sidiknya berbeda dan pelari migrasi menolak berjalan.
Dipelajari di Modul 02 · Model data dan migrasi
Client Componentjuga: komponen klien, use client
Komponen yang ditandai
"use client"sehingga kodenya ikut dikirim ke peramban dan bisa memakai state, efek, dan event. Dipakai secukupnya, hanya untuk bagian yang interaktif.Contoh: tombol Tambah dan isi keranjang yang dibaca dari
localStorage.Dipelajari di Modul 05 · Halaman produk di Next.js
cold startjuga: bangun dingin
Jeda saat layanan yang sedang tidur harus dinyalakan lagi sebelum menjawab permintaan pertama. Di paket hosting gratis jeda ini bisa puluhan detik dan menguasai p95.
Contoh: API yang tidur sesudah 15 menit tanpa lalu lintas membuat pelanggan pertama pagi hari menunggu lama.
Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
Content-LengthKepala HTTP yang menyebut panjang badan pesan dalam byte. Penerima membaca tepat sebanyak itu sesudah baris kosong; sisanya bisa jadi permintaan berikutnya di koneksi yang sama.
Contoh: catatan "tanpa gula—terima kasih" berisi 23 karakter tetapi 25 byte, jadi
Content-Lengthharus dihitung dari teks yang sudah di-encode.Dipelajari di Modul 01 · Peta aplikasi full stack
Core Web Vitalsjuga: LCP, INP, CLS
Ukuran pengalaman pengguna dari Google: LCP (seberapa cepat isi utama tampil), INP (seberapa cepat halaman menanggapi interaksi), dan CLS (seberapa banyak tata letak bergeser).
Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
CORSjuga: cross-origin resource sharing, Access-Control-Allow-Origin
Aturan peramban yang menentukan apakah halaman dari satu origin boleh membaca respons dari origin lain. Server membukanya dengan kepala
Access-Control-Allow-Origin. Panggilan dari server ke server tidak diperiksa CORS.Contoh: dengan penerus BFF, peramban hanya memanggil origin web, jadi API Pesan Makmur tidak membuka CORS sama sekali.
Dipelajari di Modul 01 · Peta aplikasi full stack
CSPjuga: Content-Security-Policy
Kepala HTTP yang membatasi sumber skrip, gaya, dan bingkai yang boleh dijalankan halaman. Dengan nonce, hanya skrip yang membawa nilai acak per permintaan yang berjalan.
Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
CSRFjuga: cross-site request forgery
Serangan yang membuat peramban korban mengirim permintaan pengubah data ke situs tempat korban sedang masuk, dari halaman situs lain. Dicegah dengan
SameSite, cekOrigin, dan token.Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
deny by defaultjuga: tolak secara bawaan
Prinsip bahwa semua aksi ditolak kecuali diizinkan tersurat. Endpoint baru yang lupa diberi izin otomatis tertutup, bukan terbuka.
Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
DependsCara FastAPI menyuntikkan kebutuhan endpoint (koneksi basis data, pengguna yang masuk, pengaturan). Di tes, kebutuhan itu bisa diganti dengan
app.dependency_overrides.Dipelajari di Modul 04 · API kontrak dulu
detakjuga: heartbeat, : detak
Pesan kecil yang dikirim berkala di koneksi panjang agar proksi tidak menganggapnya mati. Di SSE berupa baris komentar.
Contoh: API Pesan Makmur mengirim
: detaksetiap 15 detik di/v1/admin/aliran.Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
domain murnijuga: logika domain
Fungsi yang berisi aturan bisnis saja, tanpa basis data, jaringan, atau waktu sekarang. Mudah diuji karena masukan yang sama selalu memberi hasil yang sama.
Contoh:
hitung_ongkir(50000, "antar")selalu 0.Dipelajari di Modul 03 · Domain dan akses data
enumerasi akunjuga: account enumeration
Menebak email mana yang punya akun dari perbedaan jawaban aplikasi, misalnya pesan "email tidak terdaftar" dan "sandi salah". Dicegah dengan pesan dan waktu jawab yang sama.
Contoh:
/v1/auth/masukselalu menjawab "Email atau sandi salah." untuk kedua kasus.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
ETagjuga: entity tag
Label versi sebuah respons yang dikirim server di kepala
ETag. Klien mengirimnya kembali diIf-None-Match(untuk cache) atauIf-Match(untuk mencegah menimpa perubahan orang lain).Contoh: pesanan dengan
versi3 punya ETag kuatETag: "3"; katalog memakai ETag lemahW/"…"dari sidik isinya.Dipelajari di Modul 04 · API kontrak dulu
expand/contractjuga: expand-contract, parallel change
Cara mengubah skema tanpa menghentikan aplikasi: tambah dulu yang baru (expand), pindahkan kode dan data, baru hapus yang lama (contract) sesudah tidak ada kode yang memakainya.
Contoh: mengganti nama kolom = tambah kolom baru, isi, kode menulis keduanya, kode membaca yang baru, hapus kolom lama.
Dipelajari di Modul 02 · Model data dan migrasi
Fetch Metadatajuga: Sec-Fetch-Site
Kepala yang ditambahkan peramban modern untuk memberi tahu server dari mana permintaan dimulai, misalnya
Sec-Fetch-Site: same-originataucross-site.Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
fiksasi sesijuga: session fixation
Serangan saat penyerang membuat korban memakai token sesi yang sudah diketahui penyerang. Pencegahannya: buat sesi baru setiap kali seseorang berhasil masuk.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
full stackjuga: aplikasi full stack
Cara membangun aplikasi yang mencakup semua lapisannya: halaman di peramban, server web, API, dan basis data. Developer full stack bisa membawa satu fitur dari skema tabel sampai tombol di layar.
Contoh: fitur "batalkan pesanan" menyentuh kolom
status, aturan transisi di API, endpoint, dan tombol di halaman pesanan.Dipelajari di Modul 01 · Peta aplikasi full stack
GalatDomainKelas induk semua galat aturan bisnis Pesan Makmur. Setiap subkelas membawa atribut
slugdari kontrak, yang dipetakan API menjadi status HTTP dan Problem Details.Contoh:
StokTidakCukuppunyaslug = "stok-tidak-cukup"dan menjadi respons 409.Dipelajari di Modul 03 · Domain dan akses data
garamjuga: salt
Bilangan acak unik per pengguna yang dicampur sebelum sandi di-hash. Dua orang dengan sandi sama mendapat hash berbeda.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
getByRolejuga: getByLabel, pemilih berbasis peran, locatorCara Playwright mencari elemen lewat peran dan nama yang dapat diakses, seperti yang dibaca pembaca layar. Tes tetap jalan walau kelas CSS atau susunan elemen berubah.
Contoh:
page.getByRole("button", { name: "Tambah Kopi sachet ke keranjang" }).Dipelajari di Modul 10 · Pengujian ujung ke ujung
hari WIBjuga: zona waktu laporan
Hari kalender menurut Waktu Indonesia Barat (UTC+7), dipakai untuk laporan harian. Waktu tersimpan dalam UTC harus digeser sebelum dikelompokkan per tanggal.
Contoh: pesanan pukul 06.30 WIB tanggal 21 tersimpan
…-20T23:30:00Z.Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
hash sandijuga: password hashing
Mengubah sandi menjadi nilai acak-tampak dengan fungsi yang sengaja lambat dan bergaram, sehingga sandi asli tidak tersimpan dan sulit ditebak bila basis data bocor.
Contoh:
pbkdf2_sha256$600000$<garam>$<hash>; produksi Pesan Makmur memakai argon2id.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
HMACjuga: tanda tangan webhook
Kode autentikasi pesan dari rahasia bersama dan isi pesan. Penerima menghitung ulang dan membandingkan; isi yang diubah atau rahasia yang salah menghasilkan nilai berbeda.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
HSTSjuga: Strict-Transport-Security
Kepala yang meminta peramban selalu memakai HTTPS untuk domain itu selama
max-agedetik. Dikirim hanya di produksi, karena pengembangan lokal memakai HTTP.Contoh:
Strict-Transport-Security: max-age=63072000; includeSubDomains.Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
HttpOnly
Atribut cookie yang membuatnya tidak bisa dibaca JavaScript halaman. Skrip jahat dari celah XSS tidak bisa mencuri token sesi yang ber-
HttpOnly.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
idempotenjuga: idempotensi, idempotent
Sifat permintaan yang hasilnya sama walau dikirim sekali atau berkali-kali.
PUTdanDELETEidempoten menurut HTTP;POSTdibuat idempoten dengan kunci idempotensi.Dipelajari di Modul 04 · API kontrak dulu
If-Matchjuga: versi-berubah, butuh-if-matchKepala permintaan yang berisi ETag versi yang terakhir dilihat klien. Server hanya menjalankan perubahan bila versinya masih sama; bila sudah berubah, ia menjawab 412, dan bila kepalanya tidak ada, 428.
Contoh:
POST /v1/admin/pesanan/PM-261031-012/statusdenganIf-Match: "2"ditolak 412 karena Bu Sri sudah mengubahnya menjadi versi 3.Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
indeks unik parsialjuga: partial unique index
Indeks
UNIQUEyang hanya berlaku untuk baris yang memenuhi syaratWHERE. Dipakai untuk aturan seperti "paling banyak satu pembayaran menunggu per pesanan".Dipelajari di Modul 02 · Model data dan migrasi
jalur kritisjuga: critical path, air terjun permintaan
Rangkaian langkah terpanjang yang harus ditunggu berurutan sebelum halaman selesai. Memanggil dua API berurutan menjumlahkan waktunya; memanggil bersamaan hanya menunggu yang paling lama.
Contoh: katalog 120 ms dan kategori 40 ms berurutan = 160 ms; bersamaan = 120 ms.
Dipelajari di Modul 01 · Peta aplikasi full stack
jam yang disuntikjuga: clock injection
Memberikan waktu sekarang sebagai parameter atau objek jam, bukan memanggil
datetime.now()di dalam logika. Tes bisa memakai pukul 20.59 dan 21.00 WIB dengan pasti.Dipelajari di Modul 10 · Pengujian ujung ke ujung
JSON kanonikjuga: kanonik, sort_keys
Satu cara baku menulis JSON (kunci terurut, tanpa spasi) agar dua data yang sama artinya menghasilkan teks yang sama persis, sehingga bisa di-hash.
Contoh:
{"cara_terima":"ambil","item":[{"jumlah":3,"produk_id":7}]}untuk badan pesanan, apa pun urutan kunci kirimannya.Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
kendalajuga: constraint, CHECK
Aturan yang dijaga basis data sendiri, sehingga data salah ditolak apa pun kode yang menulisnya. Contohnya
NOT NULL,UNIQUE,CHECK, dan kunci asing.Contoh:
CHECK (total = subtotal + ongkir)menolak pesanan yang totalnya salah hitung.Dipelajari di Modul 02 · Model data dan migrasi
kepala hop-by-hopjuga: hop-by-hop
Kepala HTTP yang hanya berlaku untuk satu sambungan, misalnya
ConnectiondanKeep-Alive. Perantara seperti penerus tidak meneruskannya ke tujuan berikutnya, begitu pulaHostmilik koneksi peramban.Contoh: penerus Pesan Makmur hanya menyalin
Content-Type,Cookie, danX-Request-Idke API.Dipelajari di Modul 01 · Peta aplikasi full stack
kesiapanjuga: readiness, /siap
Pemeriksaan apakah aplikasi siap menerima lalu lintas, misalnya basis data terjangkau dan migrasi terbaru sudah diterapkan. Berbeda dengan kesehatan (
/sehat) yang hanya memastikan proses hidup.Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
kode statusjuga: status HTTP
Angka tiga digit di awal respons HTTP yang menyatakan hasil permintaan: 2xx berhasil, 4xx salah klien, 5xx salah server. Kontrak menetapkan kode untuk setiap kasus.
Contoh: pesanan baru dijawab
201, stok tidak cukup409, pesanan milik orang lain404.Dipelajari di Modul 04 · API kontrak dulu
konfigurasi dari lingkunganjuga: 12-factor, variabel lingkungan
Aturan bahwa alamat basis data, rahasia, dan pengaturan lain dibaca dari variabel lingkungan, bukan ditulis di kode. Kode yang sama bisa berjalan di laptop dan produksi hanya dengan lingkungan berbeda.
Contoh:
DATABASE_URLberisi alamat PostgreSQL lokal di laptop dan alamat PostgreSQL terkelola di produksi.Dipelajari di Modul 01 · Peta aplikasi full stack
kontrak APIjuga: kontrak dulu, contract-first
Kesepakatan tertulis tentang endpoint, bentuk permintaan, bentuk respons, dan galat, dibuat sebelum kode. Web dan API diuji terhadap kontrak yang sama.
Dipelajari di Modul 04 · API kontrak dulu
kunci idempotensijuga: Idempotency-Key
Nilai unik yang dibuat klien untuk satu niat (misalnya satu kali menekan Pesan) dan dikirim di kepala
Idempotency-Key. Server yang melihat kunci sama mengembalikan hasil pertama, bukan membuat pesanan baru.Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
kursor buramjuga: kursor, opaque cursor
Teks yang dikirim API untuk meminta halaman berikutnya. Klien tidak boleh menafsirkan isinya; server bebas mengubah formatnya.
Contoh:
berikutnyadikatalog.jsonadalah base64url dari["Gula pasir 1 kg", 13], yaituWyJHdWxhIHBhc2lyIDEga2ciLCAxM10.Dipelajari di Modul 04 · API kontrak dulu
lapisan layananjuga: service layer, batas transaksi
Bagian kode yang menjalankan satu aksi bisnis utuh: memanggil domain, memanggil repositori, dan memegang awal serta akhir transaksi. Repositori di bawahnya tidak pernah meng-commit sendiri.
Contoh:
buat_pesananmembuka transaksi, memanggilpesan_stokdansimpan_pesanan, lalu meng-commit atau membatalkan keduanya bersama.Dipelajari di Modul 03 · Domain dan akses data
Last-Event-IDKepala yang dikirim
EventSourcesaat menyambung ulang, berisi id event terakhir yang diterimanya. Server memakainya untuk mengirim event yang terlewat selama koneksi putus.Contoh: id event =
riwayat_status.id, jadi server mengirim ulang riwayat dengan id lebih besar dari 2199.Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
lock_timeoutPengaturan PostgreSQL yang membatasi berapa lama satu perintah boleh menunggu kunci. Bila habis, perintah itu dibatalkan, sehingga
ALTER TABLEyang menunggu tidak membuat semua kueri di belakangnya ikut antre.Contoh:
SET lock_timeout = '5s'sebelum migrasi; bila gagal karena laporan panjang sedang berjalan, migrasi dicoba lagi.Dipelajari di Modul 02 · Model data dan migrasi
log terstrukturjuga: log JSON
Log berupa objek dengan medan tetap (waktu, level, pesan,
id_permintaan, jalur, status) sehingga bisa dicari dan dihitung mesin.Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
mesin statusjuga: state machine
Daftar status yang mungkin dan perpindahan yang boleh di antaranya, beserta siapa yang boleh memindahkan. Perpindahan di luar daftar ditolak.
Contoh:
siap→selesaiboleh oleh kasir;selesai→bataltidak boleh oleh siapa pun.Dipelajari di Modul 03 · Domain dan akses data
metode amanjuga: safe method
Metode HTTP yang tidak boleh mengubah data, seperti
GETdanHEAD. Peramban, cache, dan perayap boleh mengulangnya kapan saja.Dipelajari di Modul 04 · API kontrak dulu
migrasijuga: migrasi skema
Berkas SQL bernomor yang mengubah skema basis data selangkah demi selangkah. Setiap migrasi diterapkan sekali dan dicatat, sehingga semua basis data (laptop, CI, produksi) punya skema yang sama.
Contoh:
0002_riwayat_status.sqlmenambah tabel riwayat status sesudah0001_awal.sql.Dipelajari di Modul 02 · Model data dan migrasi
N+1juga: masalah N+1, kueri N+1
Pola lambat saat kode menjalankan satu kueri untuk daftar, lalu satu kueri lagi untuk setiap baris daftar itu. Banyak kueri tumbuh seiring banyak data.
Contoh: riwayat 30 pesanan yang mengambil item per pesanan = 31 kueri; dengan satu JOIN atau
INcukup 2.Dipelajari di Modul 03 · Domain dan akses data
nama yang dapat diaksesjuga: accessible name
Nama yang diumumkan pembaca layar untuk sebuah tombol, tautan, atau kolom: dari
aria-label, label yang terhubung, atau teks di dalamnya. Setiap tombol di satu halaman sebaiknya punya nama yang bisa dibedakan.Contoh: tombol bertuliskan "Tambah" diberi
aria-label="Tambah Kopi sachet ke keranjang".Dipelajari di Modul 05 · Halaman produk di Next.js
NEXT_PUBLIC_Awalan nama variabel lingkungan di Next.js yang nilainya ditempel ke JavaScript peramban saat build. Siapa pun bisa membacanya, dan nilainya beku sejak build. Variabel tanpa awalan hanya ada di server.
Contoh: alamat API Pesan Makmur bernama
API_URL, bukanNEXT_PUBLIC_API_URL, agar tidak masuk bundel peramban.Dipelajari di Modul 01 · Peta aplikasi full stack
nilai batasjuga: boundary value, analisis nilai batas
Nilai tepat di kiri dan kanan tepi sebuah partisi. Di sinilah
>=dan>berbeda, jadi bug paling sering bersembunyi di sana.Contoh: subtotal Rp49.999 (ongkir Rp3.000) dan Rp50.000 (gratis); pukul 20.59 (buka) dan 21.00 WIB (tutup).
Dipelajari di Modul 10 · Pengujian ujung ke ujung
noncejuga: nonce CSP, strict-dynamic
Nilai acak baru di setiap respons halaman yang dicantumkan di CSP dan di tag
<script nonce="…">. Hanya skrip yang membawa nonce itu (dan skrip yang dimuatnya, dengan'strict-dynamic') yang boleh berjalan.Contoh:
script-src 'self' 'nonce-ZjNhYjQ5…' 'strict-dynamic'dariproxy.ts.Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
open redirectjuga: pengalihan terbuka
Celah ketika aplikasi mengalihkan pengguna ke alamat apa pun yang tertulis di parameter, termasuk situs lain. Penyerang memakainya untuk tautan masuk yang berakhir di halaman tiruan.
Contoh:
/masuk?kembali=//toko-palsu.testharus dialihkan ke/, bukan ke situs lain.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
OpenAPIjuga: openapi.json
Format standar untuk menulis kontrak API HTTP dalam JSON atau YAML. FastAPI menghasilkannya dari model Pydantic, dan alat lain membuat tipe TypeScript darinya.
Dipelajari di Modul 04 · API kontrak dulu
openapi-typescriptAlat baris perintah yang membaca dokumen OpenAPI dan menulis tipe TypeScript darinya. Tipe web tidak ditulis tangan, sehingga selalu sepakat dengan kontrak API.
Contoh:
npx openapi-typescript ../api/openapi.json -o lib/tipe-api.d.ts.Dipelajari di Modul 04 · API kontrak dulu
originjuga: asal
Gabungan skema, host, dan port sebuah URL. Peramban memakai origin untuk memutuskan siapa boleh membaca respons dan ke mana cookie dikirim.
Contoh:
https://pesanmakmur.exampledanhttps://api.pesanmakmur.exampleadalah dua origin berbeda.Dipelajari di Modul 01 · Peta aplikasi full stack
otorisasijuga: kontrol akses
Memutuskan apa yang boleh dilakukan pengguna yang sudah dikenali. Autentikasi menjawab "siapa kamu", otorisasi menjawab "bolehkah kamu melakukan ini pada data ini".
Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
pabrik data ujijuga: test data builder, factory, buat_pesanan_uji
Fungsi yang membuat data uji sah dengan nilai bawaan, sehingga tes hanya menyebut medan yang penting baginya. Kolom turunan seperti total dihitung ulang, bukan disalin.
Contoh:
buat_pesanan_uji(cara_terima="antar")otomatis memberi alamat bawaan, ongkir Rp3.000, dan kode unik.Dipelajari di Modul 10 · Pengujian ujung ke ujung
paginasi keysetjuga: keyset pagination, paginasi kursor
Mengambil halaman berikutnya dengan syarat "sesudah baris terakhir" (
WHERE (nama, id) > (?, ?)), bukanOFFSET. Tetap cepat dan tidak melompati baris saat data bertambah.Dipelajari di Modul 03 · Domain dan akses data
partisi ekuivalenjuga: equivalence partitioning, partisi masukan
Pembagian masukan menjadi kelompok yang diperlakukan sama oleh sebuah aturan. Cukup satu kasus tes per kelompok, ditambah kasus di tepi setiap kelompok.
Contoh: ongkir punya empat partisi: ambil, antar di bawah Rp50.000, antar Rp50.000 ke atas, dan cara terima tidak sah.
Dipelajari di Modul 10 · Pengujian ujung ke ujung
PBKDF2juga: pbkdf2_hmac
Cara menurunkan hash sandi dengan mengulang HMAC ribuan kali bersama garam acak. Latihan memakai 1.000 iterasi agar cepat; produksi butuh ratusan ribu atau argon2id.
Contoh: hash dataset berformat
pbkdf2_sha256$1000$<garam>$<hash>.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
pelari migrasijuga: migration runner
Program yang membaca berkas migrasi, membandingkannya dengan catatan di tabel
schema_migrations, lalu menerapkan yang belum ada secara berurutan dalam transaksi.Dipelajari di Modul 02 · Model data dan migrasi
pembaruan atomikjuga: atomic update
Perubahan yang membaca, memeriksa, dan menulis dalam satu pernyataan SQL, sehingga dua permintaan bersamaan tidak saling menimpa.
Contoh:
UPDATE produk SET stok = stok - 2 WHERE id = 14 AND stok >= 2gagal (0 baris) bila stok tinggal 1.Dipelajari di Modul 03 · Domain dan akses data
pembaruan bersyaratjuga: conditional update, compare-and-set
UPDATEyang memuat syarat keadaan lama diWHERE, sehingga pemeriksaan dan perubahan terjadi dalam satu pernyataan.rowcount0 berarti pihak lain sudah lebih dulu mengubah baris itu.Contoh: webhook dan
kedaluwarsakansama-sama memakai… WHERE status = 'menunggu_bayar'; hanya yang pertama mendapatrowcount1.Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
pembaruan hilangjuga: lost update
Kesalahan saat dua proses membaca nilai yang sama, menghitung di aplikasi, lalu menulis bergantian: tulisan pertama tertimpa tanpa jejak.
Contoh: dua pelanggan membaca stok 3, masing-masing menulis 3 − 2 = 1; seharusnya stok tidak cukup untuk keduanya.
Dipelajari di Modul 03 · Domain dan akses data
pembatas percobaanjuga: rate limit masuk
Penghitung kegagalan masuk per kunci tertentu dalam jendela waktu. Melewati batas membuat permintaan berikutnya ditolak sementara dengan 429 dan kepala
Retry-After.Contoh: lima kegagalan per (email, IP) dalam 15 menit.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
pembayaran yatim
Pembayaran yang berhasil untuk pesanan yang sudah kedaluwarsa atau batal. Pesanan tidak dihidupkan lagi; pemilik mengembalikan dananya.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
penghitung kuerijuga: query counter, set_trace_callback
Alat ukur yang mencatat setiap pernyataan SQL yang dijalankan sebuah fungsi, dipakai di tes untuk memastikan jumlah kueri tidak tumbuh bersama banyak data.
Contoh: riwayat 23 pesanan tercatat 24 kueri pada versi N+1 dan 2 kueri sesudah memakai
IN.Dipelajari di Modul 03 · Domain dan akses data
penguncian optimistisjuga: optimistic locking
Mencegah dua orang saling menimpa tanpa mengunci baris: setiap baris punya
versi, dan perubahan hanya berhasil bila versinya masih sama dengan yang dibaca.Contoh: Bu Sri dan Rina membuka
PM-261031-012versi 2; Bu Sri membatalkan lebih dulu (versi 3), Rina mendapat 412.Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
penyedia tiruanjuga: sandbox lokal, /sandbox
Pengganti penyedia pembayaran yang berjalan di API sendiri untuk pengembangan dan uji, dengan alur dan tanda tangan webhook yang sama seperti penyedia sungguhan.
Contoh:
POST /sandbox/v1/tagihan/{ref}/bayarmengirim webhook bertanda tangan keWEBHOOK_URL, aktif hanya bilaPEMBAYARAN_MODE=sandbox-lokal.Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
perbandingan waktu-konstanjuga: constant-time compare
Membandingkan dua rahasia dengan waktu yang tidak bergantung pada posisi karakter pertama yang berbeda, misalnya
hmac.compare_digest, agar penyerang tidak bisa menebak dari lamanya jawaban.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
persentiljuga: p95, p99
Nilai yang di bawahnya terdapat persentase tertentu pengamatan. p95 latensi 300 ms berarti 95% permintaan selesai dalam 300 ms atau kurang.
Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
piramida tesjuga: test pyramid
Panduan proporsi tes: banyak tes unit yang cepat, lebih sedikit tes integrasi, dan sedikit tes ujung ke ujung yang lambat tetapi paling mirip pemakaian nyata.
Dipelajari di Modul 10 · Pengujian ujung ke ujung
POST-redirect-GETjuga: PRG
Pola formulir: sesudah POST berhasil, server menjawab pengalihan ke halaman hasil yang dibuka dengan GET. Muat ulang dan tombol Kembali tidak mengirim ulang formulir.
Contoh: checkout yang berhasil dialihkan ke
/pesanan/PM-261031-020.Dipelajari di Modul 05 · Halaman produk di Next.js
Problem Detailsjuga: RFC 9457, problem+json
Bentuk standar respons galat API: objek JSON dengan
type,title,status,detail, daninstance, ditambah medan lain yang dibutuhkan, dengan tipe isiapplication/problem+json.Contoh:
{"type": ".../stok-tidak-cukup", "title": "Stok tidak cukup", "status": 409}.Dipelajari di Modul 04 · API kontrak dulu
progressive enhancementjuga: peningkatan progresif
Membuat halaman yang tetap berfungsi dengan HTML dan formulir biasa, lalu memperkayanya dengan JavaScript. Bila skrip gagal dimuat, pelanggan tetap bisa memesan.
Dipelajari di Modul 05 · Halaman produk di Next.js
REDjuga: metrik RED
Tiga metrik dasar layanan: rate (banyak permintaan per detik), errors (galat), dan duration (lama), diukur per endpoint.
Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
reducerjuga: fungsi reducer
Fungsi murni yang menerima keadaan dan aksi lalu mengembalikan keadaan baru tanpa mengubah keadaan lama. React membandingkan objek lama dan baru untuk memutuskan perlu merender ulang.
Contoh:
keranjangReducer(state, { jenis: "tambah", produk })mengembalikan keranjang baru.Dipelajari di Modul 05 · Halaman produk di Next.js
rekonsiliasi
Mencocokkan catatan sendiri dengan catatan pihak lain, misalnya pembayaran berhasil di penyedia dengan pesanan
dibayardi basis data, lalu menindaklanjuti selisihnya.Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
rotasi sesijuga: session rotation
Mengganti token sesi dengan token baru pada saat penting, terutama saat masuk, sambil mencabut token lama. Mencegah token yang sudah diketahui orang lain naik pangkat menjadi sesi yang terautentikasi.
Contoh:
masuk_dan_rotasimencabut token lama dan mengembalikan token acak baru.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
rowcountBanyak baris yang diubah pernyataan
UPDATEatauDELETEterakhir pada sebuah kursor. Dipakai untuk tahu apakah syarat diWHEREterpenuhi tanpa membaca ulang.Contoh:
UPDATE produk SET stok = stok - 2 WHERE id = 21 AND stok >= 2denganrowcount0 berarti stok tidak cukup.Dipelajari di Modul 03 · Domain dan akses data
RPO dan RTOjuga: RPO, RTO, recovery point objective, recovery time objective
RPO adalah data terbanyak yang rela hilang saat bencana; RTO adalah waktu terlama sampai layanan pulih. Keduanya ditentukan oleh jadwal cadangan dan prosedur pemulihan yang sudah dicoba.
Contoh: cadangan mingguan berarti RPO bisa sampai tujuh hari pesanan.
Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
SameSitejuga: SameSite=Lax
Atribut cookie yang mengatur apakah cookie ikut dikirim pada permintaan yang dimulai dari situs lain.
Laxmengirimnya hanya saat pengguna membuka tautan, bukan padaPOSTdari situs lain.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
schema_migrationsTabel tempat pelari migrasi mencatat setiap migrasi yang sudah diterapkan, satu baris per berkas, beserta checksum isinya. Migrasi yang tertunda adalah berkas yang namanya belum ada di tabel ini.
Contoh: sesudah
python -m app.migrasipertama, tabel berisi0001_awal.sqldan0002_riwayat_status.sql.Dipelajari di Modul 02 · Model data dan migrasi
serangan ulangjuga: replay attack
Mengirim ulang pesan sah yang pernah ditangkap. Dicegah dengan stempel waktu yang ikut ditandatangani dan batas toleransi, ditambah deduplikasi id event.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
Server Actionjuga: aksi server
Fungsi Next.js bertanda
"use server"yang dipanggil dari formulir atau komponen klien dan berjalan di server. Formulir dengan Server Action tetap terkirim tanpa JavaScript.Dipelajari di Modul 05 · Halaman produk di Next.js
Server Componentjuga: komponen server
Komponen React di Next.js yang dirender di server dan tidak dikirim sebagai JavaScript ke peramban. Ia boleh membaca rahasia server seperti
API_URL, tetapi tidak bisa memakai state atau event klik.Contoh: halaman katalog
/mengambil produk dari API di server lalu mengirim HTML jadi.Dipelajari di Modul 05 · Halaman produk di Next.js
Server-Sent Eventsjuga: SSE, text/event-stream
Aliran satu arah dari server ke peramban lewat satu respons HTTP yang tetap terbuka. Cocok untuk dasbor yang hanya perlu menerima kabar perubahan.
Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
sesijuga: sesi login
Catatan di server bahwa seseorang sudah masuk, dikenali dari token acak di cookie. Karena tersimpan di server, sesi bisa dicabut seketika.
Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
sidik permintaanjuga: fingerprint
Hash dari isi permintaan yang disimpan bersama kunci idempotensi. Kunci sama dengan sidik berbeda berarti klien salah memakai kunci, dan ditolak.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook
situs samajuga: same-site, lintas situs, eTLD+1
Dua alamat berada di situs yang sama bila domain terdaftarnya sama (satu label ditambah sufiks publik).
SameSitepada cookie dinilai per situs, sedangkan CORS per origin.Contoh:
pesan-makmur.vercel.appdanpesan-api.onrender.comlintas situs;pesanmakmur.exampledanapi.pesanmakmur.examplesitus sama.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
snapshot hargajuga: salinan harga
Harga dan nama produk yang disalin ke baris pesanan saat memesan. Pesanan lama tetap menunjukkan harga yang dibayar meski harga produk berubah sesudahnya.
Contoh: gula pasir dipesan September seharga Rp18.500; harga sekarang Rp19.000, tetapi
pesanan_itemtetap 18500.Dipelajari di Modul 02 · Model data dan migrasi
spanjuga: id span, parent-id
Satu langkah kerja di dalam jejak permintaan, dengan waktu mulai, lama, dan induknya. Semua span satu permintaan berbagi trace-id yang sama.
Contoh: span penerus 412 ms berisi span API 395 ms, yang berisi span kueri
UPDATE produk380 ms.Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
spasi tak-putusjuga: non-breaking space, U+00A0
Karakter spasi khusus yang mencegah baris dipotong di tempat itu. Terlihat sama dengan spasi biasa, tetapi berbeda saat dibandingkan sebagai teks.
Contoh:
Intl.NumberFormatgaya mata uang id-ID menghasilkanRp, spasi tak-putus, lalu15.000, bukanRp15.000.Dipelajari di Modul 05 · Halaman produk di Next.js
sumber kebenaranjuga: source of truth
Tempat yang nilainya dianggap benar bila ada perbedaan. Untuk harga, stok, dan status, sumber kebenarannya server dan basis data, bukan tampilan di peramban.
Dipelajari di Modul 05 · Halaman produk di Next.js
TAYANG.jsonjuga: periksa_tayang, bukti tayangBerkas bukti terstruktur di akar repo Pesan Makmur: URL, cookie, header keamanan, status CI, p95, LCP dengan kondisi ukurnya, tanggal uji pemulihan, dan rollback.
periksa_tayangmemeriksanya di CI.Dipelajari di Modul 12 · Proyek akhir: Pesan Makmur tayang
tes kontrakjuga: contract test, uji kontrak, Schemathesis
Tes yang mencocokkan respons API dengan skema OpenAPI yang juga menjadi sumber tipe web. Ketidaksepakatan web dan API tertangkap di CI, bukan di ponsel pelanggan.
Contoh: harga
19000.0di respons katalog ditolak karena skemanyainteger.Dipelajari di Modul 10 · Pengujian ujung ke ujung
tes rapuhjuga: flaky test, flaky
Tes yang kadang lulus dan kadang gagal tanpa perubahan kode, biasanya karena waktu, urutan tes, atau data yang dipakai bersama.
Contoh: tes dasbor gagal bila tes checkout lebih dulu menyiapkan pesanan yang sama.
Dipelajari di Modul 10 · Pengujian ujung ke ujung
tes ujung ke ujungjuga: e2e, end-to-end
Tes yang menjalankan aplikasi utuh seperti pengguna: membuka peramban, mengklik, mengetik, lalu memeriksa layar dan basis data.
Dipelajari di Modul 10 · Pengujian ujung ke ujung
TestClientKlien uji FastAPI yang memanggil aplikasi langsung di dalam proses, tanpa server dan jaringan. Ia butuh thread, jadi contoh yang memakainya dijalankan di terminal.
Contoh:
TestClient(app).get("/v1/produk?batas=0")mengembalikan respons 422 yang bisa diperiksa tes.Dipelajari di Modul 04 · API kontrak dulu
token sesijuga: session token
Teks acak panjang yang disimpan di cookie dan menunjuk satu baris sesi di server. Server hanya menyimpan hash SHA-256-nya, jadi tabel yang bocor tidak bisa dipakai untuk masuk.
Contoh:
secrets.token_urlsafe(32)menghasilkan token 43 karakter base64url.Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi
token sinkronjuga: token CSRF, synchronizer token
Nilai rahasia per sesi yang diletakkan server di formulir lalu diperiksa saat formulir dikirim. Situs lain tidak bisa membuatnya, jadi permintaan palsu ditolak.
Contoh:
1793448000.<HMAC>terikat id sesi 41 dan berumur paling lama dua jam.Dipelajari di Modul 07 · Otorisasi dan keamanan aplikasi
Trace Contextjuga: traceparent
Standar W3C untuk kepala
traceparentyang membawa id jejak dari web ke API, sehingga log dan jejak dari beberapa layanan bisa disambung menjadi satu cerita permintaan.Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
UI optimistisjuga: useOptimistic, pembaruan optimistis
Menampilkan hasil sebuah aksi sebelum server menjawab, lalu kembali ke data server bila aksinya ditolak. Membuat dasbor terasa cepat tanpa berbohong lama.
Contoh: tombol Siapkan langsung mengubah kartu menjadi
disiapkan; jawaban 412 mengembalikannya kedibayar.Dipelajari di Modul 09 · Dasbor admin: konkurensi dan waktu nyata
uji asapjuga: smoke test, uji_asap
Beberapa panggilan cepat ke sistem yang baru dideploy untuk memastikan bagian terpentingnya hidup. Uji asap aman diulang dan berhenti di langkah pertama yang gagal.
Contoh:
/sehat,/siap, katalog, masuk akun demo,/v1/saya, lalu keluar.Dipelajari di Modul 12 · Proyek akhir: Pesan Makmur tayang
uji bebanjuga: load test, k6, Locust
Menjalankan banyak permintaan buatan ke sistem untuk mengukur lama respons dan galat pada beban tertentu. Dijalankan ke staging milik sendiri, bukan ke produksi atau sistem orang lain.
Contoh: sepuluh pengguna virtual selama tiga menit ke
GET /v1/produkdi staging, lalu p95 dicatat.Dipelajari di Modul 11 · Rilis publik, observabilitas, dan kinerja
uji mutasijuga: mutation testing, mutan
Cara menilai mutu tes dengan sengaja mengubah kode sedikit (mutan) dan melihat apakah tes gagal. Mutan yang lolos menunjukkan kasus yang belum diuji.
Contoh: mengganti
>=menjadi>di aturan gratis ongkir harus membuat tes gagal.Dipelajari di Modul 10 · Pengujian ujung ke ujung
uji propertijuga: property-based testing, contoh penyangkal, shrinking
Tes yang menyatakan invarian untuk semua masukan, lalu membangkitkan banyak masukan berbenih untuk mencari contoh penyangkal dan memperkecilnya. Hypothesis adalah pustaka Python untuk ini.
Contoh: "total = subtotal + ongkir untuk setiap keranjang" menemukan keranjang lima Kacang kulit (Rp50.000) yang salah ongkir.
Dipelajari di Modul 10 · Pengujian ujung ke ujung
validasi di batasjuga: validasi masukan
Memeriksa bentuk data tepat saat data masuk ke sistem, sebelum logika domain berjalan. Data yang salah ditolak dengan pesan yang jelas, bukan dibiarkan merusak di tengah jalan.
Contoh: model
PesananMasukdenganextra="forbid"menolak medanhargadari klien dengan 422.Dipelajari di Modul 04 · API kontrak dulu
webhook
Permintaan HTTP yang dikirim layanan lain ke API-mu saat sesuatu terjadi, misalnya pembayaran berhasil. Bisa datang dobel, terlambat, atau tidak berurutan.
Dipelajari di Modul 08 · Pembayaran: idempotensi dan webhook