Next.js 14 telah menjadi standar de‑facto untuk aplikasi React full‑stack. Tutorial ini mengajarkan cara meng‑install, meng‑konfigurasi, menulis kode contoh, serta menerapkan best practice terbaik untuk performa dan keamanan pada proyek modern.
1. Persiapan Lingkungan dan Instalasi
Pastikan Anda memiliki Node.js versi 20.11+ (LTS) dan npm atau pnpm terbaru. Untuk memeriksa versi, jalankan:
node -v
npm -v # atau pnpm -v
Jika belum terpasang, unduh dari nodejs.org. Selanjutnya, buat proyek baru dengan template next-app resmi:
npx create-next-app@latest my-next14-app --experimental-app
Opsi --experimental-app meng‑aktifkan App Router yang menjadi inti Next.js 14. Pilih pnpm bila Anda menginginkan instalasi paket yang lebih cepat dan ruang disk lebih efisien.
2. Struktur Direktori Baru
Folder app/ menggantikan pages/. Berikut contoh struktur dasar:
my-next14-app/
├─ app/
│ ├─ layout.tsx # Layout global
│ ├─ page.tsx # Halaman beranda
│ ├─ api/
│ │ └─ hello/route.ts # Server Action contoh API
│ └─ dashboard/
│ ├─ layout.tsx
│ └─ page.tsx
├─ public/
├─ styles/
├─ next.config.mjs
└─ package.json
File layout.tsx menyediakan komponen wrapper yang dipanggil pada setiap halaman, ideal untuk header, footer, atau provider konteks.
3. Konfigurasi Next.js 14
Ubah next.config.mjs untuk mengaktifkan fitur eksperimental dan optimasi:
import { createSecureHeaders } from 'next-secure-headers';
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
appDir: true,
serverActions: true,
reactRoot: true,
},
images: {
remotePatterns: [{ protocol: 'https', hostname: 'images.unsplash.com' }]
},
async headers() {
return [{
source: '/(.*)',
headers: createSecureHeaders({
contentSecurityPolicy: "default-src 'self'; script-src 'self' 'unsafe-eval';",
referrerPolicy: 'strict-origin-when-cross-origin',
})
}];
}
};
export default nextConfig;
Pengaturan di atas menyalakan:
- App Router (
appDir) - Server Actions untuk meng‑call fungsi server langsung dari komponen UI
- Header keamanan standar industri via
next-secure-headers
4. Membuat Layout Global
File app/layout.tsx:
import './globals.css';
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Next.js 14 Demo',
description: 'A modern full‑stack app dengan App Router & Server Actions',
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
Next.js 14 Playground
{children}
);
}
Gunakan Tailwind CSS (auto‑install melalui npm i -D tailwindcss postcss autoprefixer) untuk styling cepat dan responsif.
5. Server Action – Contoh CRUD Sederhana
Buat endpoint API menggunakan Server Action di app/api/todo/route.ts:
import { cookies } from 'next/headers';
import { v4 as uuidv4 } from 'uuid';
let TODOS: { id: string; title: string; done: boolean }[] = [];
export async function GET() {
return Response.json(TODOS);
}
export async function POST(request: Request) {
const { title } = await request.json();
const newTodo = { id: uuidv4(), title, done: false };
TODOS.push(newTodo);
return Response.json(newTodo, { status: 201 });
}
export async function PUT(request: Request) {
const { id, done } = await request.json();
TODOS = TODOS.map(t => (t.id === id ? { ...t, done } : t));
return Response.json({ success: true });
}
export async function DELETE(request: Request) {
const { id } = await request.json();
TODOS = TODOS.filter(t => t.id !== id);
return Response.json({ success: true });
}
Catatan: Di Next.js 14, Server Actions dapat dipanggil langsung dari komponen UI menggunakan use server pragma. Berikut contoh di app/dashboard/page.tsx:
'use client';
import { useState, useEffect } from 'react';
export default function Dashboard() {
const [todos, setTodos] = useState([]);
const [newTitle, setNewTitle] = useState('');
async function fetchTodos() {
const res = await fetch('/api/todo');
const data = await res.json();
setTodos(data);
}
async function addTodo() {
await fetch('/api/todo', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ title: newTitle })
});
setNewTitle('');
fetchTodos();
}
async function toggleDone(id: string, done: boolean) {
await fetch('/api/todo', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, done: !done })
});
fetchTodos();
}
async function deleteTodo(id: string) {
await fetch('/api/todo', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id })
});
fetchTodos();
}
useEffect(() => { fetchTodos(); }, []);
return (
Todo List (Server Actions)
setNewTitle(e.target.value)}
placeholder="Tambah tugas..."
/>
{todos.map((t: any) => (
-
{t.title}
))}
);
}
Dengan pendekatan di atas, Anda tidak lagi memerlukan library state‑management terpisah; fetch API server‑side menyiapkan data secara otomatis.
6. Optimasi Performansi
- Image Optimization: Gunakan komponen
<Image>built‑in Next.js. Contoh:<Image src="https://images.unsplash.com/photo-..." width={800} height={600} alt="Sample" />. - Incremental Static Regeneration (ISR): Tambahkan
revalidatepada fungsifetchdi server.export const dynamic = 'force-dynamic'; // untuk API dinamis export const revalidate = 60; // cache 1 menit - Parallel Rendering: Pastikan komponen tidak memiliki side‑effects yang memblokir rendering. Letakkan async data fetching di
async function generateMetadata()atauloader(). - Edge Runtime: Deploy ke Vercel atau Cloudflare Workers dengan
runtime: 'edge'pada serverless functions untuk latency ultra‑rendah.
7. Keamanan dan Best Practice
- Gunakan
next-secure-headers(sudah di‑config dinext.config.mjs) untuk melindungi dari XSS, clickjacking, dll. - Validasi semua input API dengan
ZodatauYup. Contoh integrasi:import { z } from 'zod'; const TodoSchema = z.object({ title: z.string().min(1).max(100) }); const parsed = TodoSchema.safeParse(await request.json()); if (!parsed.success) return new Response(JSON.stringify(parsed.error), { status: 400 }); - Aktifkan
Content‑Security‑Policyyang memperbolehkan hanya skrip internal. - Gunakan
npm auditdanpnpm auditsecara rutin; perbarui dependensi ke versi LTS.
8. CI/CD dengan GitHub Actions
File .github/workflows/ci.yml contoh:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm test
- run: pnpm build
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
working-directory: .
Pipeline di atas menjalankan lint, test unit (Jest), build, dan otomatis deploy ke Vercel setiap commit.
9. Debugging & Monitoring di Production
- Pasang
@sentry/nextjsuntuk error tracking. - Gunakan
next-logspada Vercel untuk melihat request latency. - Aktifkan
React Profilermelalui DevTools dannext-devtoolsekstensi Chrome untuk inspeksi Server Actions.
10. Deploy ke Vercel (Free Tier)
- Push repository ke GitHub.
- Buka vercel.com dan pilih New Project.
- Hubungkan repo, pilih framework
Next.js, dan biarkan Vercel mendeteksinext.config.mjs. - Set environment variable
NODE_ENV=productiondan klik Deploy.
Vercel secara otomatis meng‑optimasi image, menyediakan Edge Functions, dan men‑generate preview URL untuk setiap Pull Request.
11. Studi Kasus: Migrasi dari Next.js 12 ke 14
Sebuah startup fintech meng‑upgrade basis kode mereka dengan langkah berikut:
- Ubah semua file
pages/menjadiapp/dan migrasigetStaticPropsmenjadigenerateStaticParams. - Ganti
next/linkdengannext/navigationuntukuseRouteryang baru. - Implementasikan Server Actions pada form checkout, mengurangi round‑trip API sebesar 45%.
- Gunakan
middleware.tsuntuk otentikasi JWT di Edge Runtime, meningkatkan waktu respons login menjadi 120 ms.
Hasilnya: Laporan Google Lighthouse naik ke 96/100 pada performance, dan biaya server turun 30% karena pemanfaatan ISR & Edge.
12. Ringkasan Langkah
- Instal Node 20+ dan buat proyek
create-next-app@latest --experimental-app. - Atur
next.config.mjsdengan fitur eksperimental, security headers, dan image remote patterns. - Buat layout global dan integrasikan Tailwind CSS.
- Kembangkan Server Actions (CRUD) di folder
app/apidan panggil dari komponen client. - Terapkan optimasi: Image component, ISR, Edge Runtime.
- Amankan dengan validation schema dan security headers.
- Siapkan CI/CD GitHub Actions dan deploy otomatis ke Vercel.
- Monitoring dengan Sentry dan Vercel logs.
Dengan mengikuti tutorial ini, Anda memiliki basis Next.js 14 yang modern, cepat, aman, serta siap skala.
Next.js 14 membawa perubahan signifikan pada cara kita membangun aplikasi React full‑stack. Dengan App Router, Server Actions, dan integrasi bawaan untuk keamanan serta performa, developer dapat menghasilkan produk berkualitas tinggi dalam waktu singkat. Ikuti langkah‑langkah di atas, terapkan best practice, dan manfaatkan CI/CD otomatis untuk tetap kompetitif di era Web Development modern.
Panduan lengkap setup Next.js 14 dengan App Router, Server Actions, optimasi performa, keamanan, CI/CD, dan studi kasus migrasi. Cocok untuk Programming, Software Engineering, dan Web Development di 2026.
Next.js 14,App Router,Server Actions,Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar