Lewati ke konten utama

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 C14

125 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_pada dari baris riwayat_status dengan ke = '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/produk di origin web; route handler Next.js meneruskannya ke API_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-012 dan 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 public bisa 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 boleh public, 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-Length

    Kepala 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-Length harus 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, cek Origin, 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

  • Depends

    Cara 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 : detak setiap 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/masuk selalu 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 di If-None-Match (untuk cache) atau If-Match (untuk mencegah menimpa perubahan orang lain).

    Contoh: pesanan dengan versi 3 punya ETag kuat ETag: "3"; katalog memakai ETag lemah W/"…" 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-origin atau cross-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

  • GalatDomain

    Kelas induk semua galat aturan bisnis Pesan Makmur. Setiap subkelas membawa atribut slug dari kontrak, yang dipetakan API menjadi status HTTP dan Problem Details.

    Contoh: StokTidakCukup punya slug = "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, locator

    Cara 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-age detik. 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. PUT dan DELETE idempoten menurut HTTP; POST dibuat idempoten dengan kunci idempotensi.

    Dipelajari di Modul 04 · API kontrak dulu

  • If-Matchjuga: versi-berubah, butuh-if-match

    Kepala 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/status dengan If-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 UNIQUE yang hanya berlaku untuk baris yang memenuhi syarat WHERE. 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 Connection dan Keep-Alive. Perantara seperti penerus tidak meneruskannya ke tujuan berikutnya, begitu pula Host milik koneksi peramban.

    Contoh: penerus Pesan Makmur hanya menyalin Content-Type, Cookie, dan X-Request-Id ke 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 cukup 409, pesanan milik orang lain 404.

    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_URL berisi 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: berikutnya di katalog.json adalah base64url dari ["Gula pasir 1 kg", 13], yaitu WyJHdWxhIHBhc2lyIDEga2ciLCAxM10.

    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_pesanan membuka transaksi, memanggil pesan_stok dan simpan_pesanan, lalu meng-commit atau membatalkan keduanya bersama.

    Dipelajari di Modul 03 · Domain dan akses data

  • Last-Event-ID

    Kepala yang dikirim EventSource saat 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_timeout

    Pengaturan PostgreSQL yang membatasi berapa lama satu perintah boleh menunggu kunci. Bila habis, perintah itu dibatalkan, sehingga ALTER TABLE yang 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 → selesai boleh oleh kasir; selesai → batal tidak boleh oleh siapa pun.

    Dipelajari di Modul 03 · Domain dan akses data

  • metode amanjuga: safe method

    Metode HTTP yang tidak boleh mengubah data, seperti GET dan HEAD. 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.sql menambah tabel riwayat status sesudah 0001_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 IN cukup 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, bukan NEXT_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' dari proxy.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.test harus 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-typescript

    Alat 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.example dan https://api.pesanmakmur.example adalah 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) > (?, ?)), bukan OFFSET. 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 >= 2 gagal (0 baris) bila stok tinggal 1.

    Dipelajari di Modul 03 · Domain dan akses data

  • pembaruan bersyaratjuga: conditional update, compare-and-set

    UPDATE yang memuat syarat keadaan lama di WHERE, sehingga pemeriksaan dan perubahan terjadi dalam satu pernyataan. rowcount 0 berarti pihak lain sudah lebih dulu mengubah baris itu.

    Contoh: webhook dan kedaluwarsakan sama-sama memakai … WHERE status = 'menunggu_bayar'; hanya yang pertama mendapat rowcount 1.

    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-012 versi 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}/bayar mengirim webhook bertanda tangan ke WEBHOOK_URL, aktif hanya bila PEMBAYARAN_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, dan instance, ditambah medan lain yang dibutuhkan, dengan tipe isi application/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 dibayar di 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_rotasi mencabut token lama dan mengembalikan token acak baru.

    Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi

  • rowcount

    Banyak baris yang diubah pernyataan UPDATE atau DELETE terakhir pada sebuah kursor. Dipakai untuk tahu apakah syarat di WHERE terpenuhi tanpa membaca ulang.

    Contoh: UPDATE produk SET stok = stok - 2 WHERE id = 21 AND stok >= 2 dengan rowcount 0 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. Lax mengirimnya hanya saat pengguna membuka tautan, bukan pada POST dari situs lain.

    Dipelajari di Modul 06 · Autentikasi: sesi, cookie, dan sandi

  • schema_migrations

    Tabel 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.migrasi pertama, tabel berisi 0001_awal.sql dan 0002_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). SameSite pada cookie dinilai per situs, sedangkan CORS per origin.

    Contoh: pesan-makmur.vercel.app dan pesan-api.onrender.com lintas situs; pesanmakmur.example dan api.pesanmakmur.example situs 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_item tetap 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 produk 380 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.NumberFormat gaya mata uang id-ID menghasilkan Rp, spasi tak-putus, lalu 15.000, bukan Rp15.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 tayang

    Berkas bukti terstruktur di akar repo Pesan Makmur: URL, cookie, header keamanan, status CI, p95, LCP dengan kondisi ukurnya, tanggal uji pemulihan, dan rollback. periksa_tayang memeriksanya 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.0 di respons katalog ditolak karena skemanya integer.

    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

  • TestClient

    Klien 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 traceparent yang 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 ke dibayar.

    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/produk di 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 PesananMasuk dengan extra="forbid" menolak medan harga dari 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