☀️Siang
Web Development

Next.js untuk Pemula: React Framework Full-Stack

Tutorial lengkap belajar Next.js dari nol — SSR vs CSR, App Router, Server Components, API Routes, data fetching, dan deployment ke Vercel dengan contoh kode praktis

Artikel: Nextjs Dasar Artikel: Nextjs Dasar


1. Pengenalan Next.js

Next.js adalah framework React yang dikembangkan oleh Vercel yang memungkinkan Anda membangun aplikasi web full-stack dengan mudah. Next.js menambahkan fitur-fitur penting di atas React seperti server-side rendering (SSR), static site generation (SSG), routing otomatis, API routes, dan optimasi gambar — semuanya out of the box.

Sejak diluncurkan pada tahun 2016, Next.js telah menjadi framework React paling populer untuk produksi. Perusahaan besar seperti Netflix, TikTok, Twitch, Hulu, dan Nike menggunakan Next.js untuk membangun website mereka.

Mengapa Memilih Next.js?

Fitur Penjelasan
Server-Side RenderingHalaman di-render di server, menghasilkan HTML yang langsung dikirim ke browser — lebih cepat dan SEO-friendly
Static Site GenerationHalaman bisa di-build saat build time untuk performa maksimal
File-Based RoutingCukup buat file di folder, routing otomatis dibuat — tidak perlu konfigurasi manual
API RoutesBuat API backend langsung di dalam proyek Next.js tanpa server terpisah
Optimasi OtomatisImage optimization, font optimization, script optimization — semua built-in
Full-StackFrontend dan backend dalam satu proyek yang sama

Next.js vs React vs Framework Lain

Aspek Next.js React (SPA) Remix
RenderingSSR, SSG, ISR, CSRCSR sajaSSR
RoutingFile-based (App Router)React Router (manual)File-based
APIAPI Routes / Route HandlersPerlu backend terpisahLoader/Action
SEO🟢 Sangat baik🟡 Perlu SSR setup🟢 Sangat baik
Belajar🟡 Sedang🟢 Mudah🟡 Sedang
DeploymentVercel, Docker, Self-hostStatic hostingVarious
Diagram: belajar-nextjs/
/"belajar-nextjs/"/
/"node_modules/"/
public/
/"next.svg"/
/"vercel.svg"/
src/
app/
/"layout.tsx"/
/"page.tsx"/
/"globals.css"/
about/
/"page.tsx"/
blog/
/"page.tsx"/
(slug)/
/"page.tsx"/
api/
hello/
/"route.ts"/
/".env.local"/
/"next.config.js"/
/"package.json"/
/"tsconfig.json"/
💡 Tips

Next.js versi terbaru menggunakan App Router secara default (folder app/). Versi lama menggunakan Pages Router (folder pages/). Untuk proyek baru, gunakan App Router karena mendukung fitur-fitur terbaru seperti React Server Components dan streaming.



2. SSR vs CSR: Memahami Rendering

Salah satu alasan utama menggunakan Next.js adalah dukungan berbagai strategi rendering. Memahami perbedaan antara Client-Side Rendering (CSR) dan Server-Side Rendering (SSR) sangat penting untuk membangun aplikasi web yang cepat dan SEO-friendly.

Client-Side Rendering (CSR)

Pada CSR, seluruh aplikasi di-render di browser menggunakan JavaScript. Browser pertama-tama menerima HTML kosong, lalu JavaScript dijalankan untuk mengisi konten. Ini adalah cara kerja default React SPA (Single Page Application).

Penjelasan — Alur CSR
# Alur Client-Side Rendering (CSR):
#
# 1. User mengakses halaman
# 2. Server mengirim HTML kosong + bundle JS besar
# 3. Browser mengunduh JS (bisa 1-3 detik)
# 4. JavaScript dijalankan → render konten
# 5. User baru bisa melihat dan berinteraksi
#
# ❌ Masalah:
# - Loading lambat (blank screen sampai JS selesai)
# - SEO buruk (search engine melihat HTML kosong)
# - First Contentful Paint (FCP) lama

# Contoh: React SPA biasa dengan React Router
# → Semua rendering terjadi di browser
# → Data di-fetch dari client setelah halaman dimuat

Server-Side Rendering (SSR)

Pada SSR, halaman di-render di server setiap kali ada request. Server mengirim HTML lengkap yang langsung bisa ditampilkan browser — tanpa menunggu JavaScript.

Penjelasan — Alur SSR
# Alur Server-Side Rendering (SSR):
#
# 1. User mengakses halaman
# 2. Server meng-fetch data dan render komponen
# 3. Server mengirim HTML lengkap ke browser
# 4. Browser langsung menampilkan konten
# 5. JavaScript "hydration" → interaktif
#
# ✅ Keuntungan:
# - Konten langsung terlihat (FCP cepat)
# - SEO sangat baik (search engine dapat HTML lengkap)
# - Cocok untuk konten dinamis yang sering berubah

# Di Next.js, gunakan fungsi ini untuk SSR:
# export async function generateMetadata() { ... }
# fetch() dengan cache: 'no-store'

Perbandingan Rendering di Next.js

Metode Kapan Render Konten Cocok Untuk
SSR (Dynamic)Setiap requestTerbaruDashboard, halaman user
SSG (Static)Saat buildStatisBlog, landing page
ISRSaat build + revalidateSemi-dinamisE-commerce, berita
CSRDi browserDinamisApp interaktif
Diagram

Dynamic

Static

Revalidate

Client

🖥️ User Request

Metode Rendering?

⚡ SSR — Server render setiap request

📄 SSG — Render saat build

🔄 ISR — Build + revalidate periodik

💻 CSR — Render di browser

✅ Konten Terbaru

✅ Konten Statis

✅ Konten Semi-dinamis

✅ Konten Dinamis Interaktif

Contoh SSR di Next.js App Router

BACKEND

FRONTEND (SSR/SSG)

API Routes /api/users /api/auth /api/products

Browser (User melihat UI)

Server Component (SSR/SSG) Server Component

Client Component (Interaktif) Client Component ...



6. Data Fetching di Next.js

Next.js memperluas API fetch() bawaan browser untuk memberikan kontrol penuh atas caching dan revalidasi data. Anda bisa melakukan fetching data langsung di Server Components, yang memungkinkan akses database atau API secara aman.

Fetching di Server Component

Diagram

Vercel Auto Build Auto Deploy

GitHub Push

Local Dev

💡 Self-Hosting Next.js

Selain Vercel, Next.js juga bisa di-deploy ke platform lain. Gunakan output: 'standalone' di next.config.js untuk menghasilkan build yang bisa dijalankan dengan Docker. Anda juga bisa deploy ke Netlify, AWS, Railway, atau VPS biasa.



8. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Next.js:

Pertanyaan 1: Apa perbedaan utama antara SSR dan CSR?

a) SSR di-render di server dan mengirim HTML lengkap, CSR di-render di browser dengan JavaScript
b) SSR lebih lambat dari CSR
c) CSR lebih SEO-friendly daripada SSR
d) Tidak ada perbedaan, hanya nama lain

Pertanyaan 2: Bagaimana cara membuat Client Component di Next.js App Router?

a) Tambahkan "use client" di baris pertama file
b) Gunakan useEffect di setiap komponen
c) Import dari 'next/client'
d) Semua komponen otomatis menjadi Client Component

Pertanyaan 3: File apa yang WAJIB ada di folder app/ pada Next.js?

a) page.tsx
b) layout.tsx
c) index.tsx
d) app.tsx

Pertanyaan 4: Apa fungsi dari cache: 'no-store' pada fetch() di Next.js?

a) Menyimpan data di local storage browser
b) Meng-cache data selamanya
c) Mengambil data terbaru setiap request (SSR)
d) Menonaktifkan fetch() sepenuhnya

Pertanyaan 5: Apa itu ISR (Incremental Static Regeneration)?

a) Teknik untuk regenerate seluruh website setiap kali deploy
b) Teknik yang menggabungkan SSG dan SSR — halaman di-build statis tapi bisa di-regenerate secara periodik
c) Teknik untuk menghapus cache browser secara otomatis
d) Teknik untuk mengkompilasi TypeScript
🔍 Zoom
100%
🎨 Tema