L
Next.js & SSR Architecture 🗂️ Cheat Sheet & Decision Tree • Literally Web ID

Arsitektur Hybrid Rendering di Next.js: SSR, SSG, dan ISR

⏱️ 12 menit baca • 📅 20 Oct 2026 • 👁️ 2 views
Arsitektur Hybrid Rendering di Next.js: SSR, SSG, dan ISR

1. Intisari Kilat: Fondasi dalam Sekali Lirik

Ingat malam-malam panjang ketika server Node.js kami di AWS mendadak kolaps karena traffic spike dari kampanye flash sale? Saat itu, semua halaman dirender secara Server-Side Rendering (SSR) murni tanpa strategi caching yang matang di balik Nginx dan Cloudflare. CPU melonjak hingga 100%, RAM habis terkuras, dan para engineer hanya bisa pasrah melihat log penuh dengan Gateway Timeout. Dari tragedi infrastruktur itulah kami belajar bahwa memilih strategi rendering di Next.js bukanlah sekadar urusan estetika kode frontend, melainkan keputusan arsitektural tingkat tinggi yang menentukan hidup-matinya backend, beban database MySQL/MariaDB, hingga tagihan bulanan cloud Anda.

Secara esensial, hybrid rendering membagi beban antara Static Site Generation (SSG) yang super cepat karena berupa file statis di S3/MinIO, Server-Side Rendering (SSR) yang selalu segar namun membebani server, dan Incremental Static Regeneration (ISR) yang menjadi jalan tengah terbaik untuk memperbarui halaman secara asinkron tanpa mematikan server. Sebelum kita menyelami peta keputusan yang lebih rumit, mari kita pastikan fondasi mental kita selaras, yang akan mengantar kita langsung ke kompas penentu strategi di lapangan.

2. Kompas Keputusan: Kapan Memilih Solusi Ini vs Alternatif Lain

Di lapangan, perdebatan abadi antara SSR, SSG, dan ISR sering kali memicu perang ego antar developer. Mari kita selesaikan perdebatan itu dengan Decision Tree berbasis skenario nyata yang sudah teruji di ekosistem produksi berskala enterprise.

[!TIP] Gunakan SSG jika konten Anda jarang berubah (seperti halaman About Us, dokumentasi statis, atau blog post). Ini menghemat sumber daya secara ekstrem karena file HTML langsung disajikan melalui CDN Cloudflare tanpa menyentuh Node.js sama sekali.

Jika aplikasi Anda menampilkan data yang sangat personal dan dinamis—seperti dashboard pengguna, keranjang belanja real-time, atau halaman pembayaran—maka SSR adalah harga mati. Namun, jika Anda berurusan dengan katalog e-commerce berisi jutaan produk yang harganya berubah setiap beberapa jam, jangan pernah pakai SSR murni. Gunakan ISR. Dengan ISR, request pertama pengguna akan langsung melayani halaman cache lama secara instan (Stale-While-Revalidate), sementara Next.js secara senyap meregenerasi halaman tersebut di background server.

[Apakah halaman butuh data personal/real-time per request?]
 ├── YA -> Gunakan SSR (Server-Side Rendering)
 └── TIDAK
      ├── [Apakah data sangat jarang berubah/statis?]
      │    ├── YA -> Gunakan SSG (Static Site Generation)
      │    └── TIDAK -> Gunakan ISR (Incremental Static Regeneration)

Pemilihan yang salah pada percabangan ini akan berdampak langsung pada lonjakan koneksi ke database Anda atau lambatnya Time to First Byte (TTFB). Setelah kita memahami kapan harus menarik pelatuk untuk strategi tertentu, mari kita bedah parameter konfigurasinya agar tidak salah langkah.

3. Contekan Konfigurasi & Parameter Paling Sering Dicari

Sebagai arsitek, saya sering melihat tim frontend salah kaprah dalam mengatur parameter caching di Next.js. Berikut adalah tabel contekan langsung dari catatan lapangan kami untuk konfigurasi getStaticProps, getServerSideProps, dan App Router modern:

Strategi Parameter Kunci Kapan Dinyalakan Kapan Dimatikan / Dihindari
SSG export const dynamic = 'force-static' Halaman marketing, landing page, artikel blog. Halaman yang bergantung pada req atau cookies dinamis.
SSR export const dynamic = 'force-dynamic' Dashboard user, keranjang belanja, data finansial. Halaman publik ber-traffic tinggi yang bisa dicache di CDN.
ISR revalidate: 60 (di getStaticProps) Katalog produk e-commerce, direktori berita, forum. Data yang harus konsisten 100% secara instan tanpa delay satu detik pun.

Dalam implementasinya di App Router Next.js, pengelolaan cache ini bahkan menjadi lebih elegan menggunakan fungsi fetch bawaan dengan opsi next: { revalidate: 3600 }. Konfigurasi yang bersih ini akan menuntun kita pada produktivitas harian di terminal.

4. Koleksi Mantra One-Liner Siap Salin untuk Keseharian

Untuk mempercepat proses troubleshooting dan deployment infrastruktur web Anda di lingkungan Linux (Ubuntu/Debian) yang didukung Nginx dan PM2/Docker, berikut adalah koleksi mantra terminal yang wajib ada di dalam clipboard Anda:

# Memantau penggunaan memori dan proses Node.js aplikasi Next.js secara real-time di server
pm2 monit

# Membersihkan cache build Next.js lokal sebelum melakukan production build ulang
rm -rf .next && npm run build

# Melakukan curl untuk memeriksa header cache-control dan status revalidation dari CDN/Cloudflare
curl -I -H "Pragma: no-cache" https://domainanda.com/katalog-produk

# Memeriksa log error Nginx secara live untuk mendeteksi gateway timeout 504 pada SSR
sudo tail -f /var/log/nginx/error.log | grep -i "upstream timed out"

# Menguji performa endpoint lokal dengan Apache Bench untuk simulasi beban traffic tinggi
ab -n 1000 -c 50 https://localhost:3000/

[!WARNING] Jangan pernah menjalankan npm run build langsung di production server ber-traffic tinggi tanpa mekanisme zero-downtime deployment menggunakan PM2 cluster mode atau Kubernetes rolling update, karena proses kompilasi akan memakan seluruh alokasi CPU dan RAM.

Kenyamanan menggunakan mantra-mantra di atas sering kali membuat kita terlena. Padahal, ada jurang pemisah antara aplikasi yang berjalan mulus di local laptop dengan sistem yang bertahan di production.

5. Jalur Bahaya: Dosa Besar yang Wajib Dihindari di Produksi

Selama puluhan tahun membersihkan kekacauan infrastruktur skala besar, saya mencatat beberapa "dosa besar" arsitektural yang paling sering dilakukan oleh engineer saat merancang hybrid rendering di Next.js:

  1. Membiarkan SSR Mengakses Database Tanpa Caching Perantara: Melakukan query langsung ke MySQL/MariaDB pada setiap request SSR tanpa memanfaatkan Redis layer adalah resep pasti untuk melumpuhkan database Anda saat traffic melonjak.
  2. Salah Mengatur Revalidate ISR Terlalu Singkat: Menyetel revalidate: 1 pada jutaan halaman statis sama saja dengan memaksa server melakukan rebuild terus-menerus, yang justru membuat CPU server kewalahan melebihi beban SSR murni.
  3. Mengabaikan Headers Cache-Control di CDN: Tidak mengatur edge caching rules di Cloudflare menyebabkan Cloudflare terus-menerus menembak origin server Next.js Anda alih-alih melayani cache dari edge location terdekat.

Dengan menghindari jebakan-jebakan mematikan di atas, arsitektur Next.js Anda tidak hanya akan menghasilkan skor Core Web Vitals yang hijau dan mulus, tetapi juga berdiri kokoh menahan gempuran traffic jutaan pengguna tanpa menguras anggaran server Anda.

🏷️ Tags: #Web Architecture #Next.js #Ssr #Ssg #Isr