Panduan Lengkap Setup Next.js 14 dengan App Router, Server Actions, dan Optimasi Production


Next.js 14 menjadi standar de‑facto untuk pengembangan React modern. Tutorial ini mengajarkan cara meng‑install, meng‑konfigurasi, dan meng‑optimalkan aplikasi Next.js 14 dengan App Router, Server Actions, TypeScript, dan deployment ke Vercel, lengkap dengan contoh kode dan best practice terkini pada Mei 2026.

1. Prasyarat dan Persiapan Lingkungan

Pastikan Anda telah meng‑install versi terbaru node.js (v20.12 atau lebih tinggi) dan npm (v10.6+). Gunakan nvm untuk mengelola versi Node:

nvm install 20
nvm use 20

Verifikasi instalasi:

node -v   # harus 20.x
npm -v    # harus 10.x

2. Membuat Project Next.js 14 Baru

Gunakan create-next-app dengan template TypeScript dan App Router aktif:

npx create-next-app@latest my-next14-app \
  --ts \
  --app-dir
cd my-next14-app

Perintah di atas menghasilkan struktur folder baru dengan /app sebagai root router, menggantikan /pages tradisional.

3. Instalasi Dependensi Tambahan

Untuk styling, gunakan tailwindcss versi 3.4, dan untuk data fetching di server actions gunakan axios atau node-fetch. Instal semua dalam satu langkah:

npm i tailwindcss@latest postcss@latest autoprefixer@latest \
  axios@latest
npx tailwindcss init -p

Konfigurasikan tailwind.config.js untuk mendukung JIT dan mode content pada folder app:

module.exports = {
  content: ["./app/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
  theme: { extend: {} },
  plugins: [],
};

4. Struktur Dasar App Router

Berikut contoh struktur penting di dalam /app:

/app
├─ layout.tsx          # Layout global
├─ page.tsx            # Homepage
├─ dashboard
│   ├─ layout.tsx      # Layout nested
│   └─ page.tsx        # Halaman dashboard
└─ api
    └─ submit
        └─ route.ts   # Server Action endpoint

Semua file page.tsx otomatis menjadi route berdasarkan foldernya.

5. Membuat Layout Global dengan Metadata

/* app/layout.tsx */
import './globals.css';
import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'Next.js 14 Demo',
  description: 'Demo aplikasi Next.js 14 dengan App Router dan Server Actions',
};

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    
      
        {children}
      
    
  );
}

6. Membuat Server Action (POST) di Folder /app/api

Server Actions di Next.js 14 memungkinkan Anda menulis fungsi async yang dijalankan di server tanpa menulis API terpisah. Contoh penggunaan untuk menyimpan data ke database PostgreSQL melalui Prisma.

/* app/api/submit/route.ts */
import { prisma } from '@/lib/prisma';
import { NextResponse } from 'next/server';

export async function POST(request: Request) {
  const { name, email } = await request.json();
  try {
    const user = await prisma.user.create({
      data: { name, email },
    });
    return NextResponse.json({ success: true, user }, { status: 201 });
  } catch (error) {
    console.error('❌ Create user error:', error);
    return NextResponse.json({ success: false, error: 'Server error' }, { status: 500 });
  }
}

7. Mengkonsumsi Server Action di Client Component

Gunakan useTransition untuk UI responsif saat menunggu response.

/* components/SignupForm.tsx */
'use client';
import { useState, useTransition } from 'react';

export default function SignupForm() {
  const [name, setName] = useState('');
  const [email, setEmail] = useState('');
  const [isPending, startTransition] = useTransition();
  const [msg, setMsg] = useState('');

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    startTransition(async () => {
      const res = await fetch('/api/submit', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ name, email }),
      });
      const data = await res.json();
      setMsg(data.success ? 'Berhasil mendaftar!' : 'Gagal');
    });
  };

  return (
    
setName(e.target.value)} placeholder="Nama" required className="input" /> setEmail(e.target.value)} placeholder="Email" required className="input" /> {msg &&

{msg}

}
); }

8. Menambahkan Prisma dan PostgreSQL

Instal Prisma CLI dan generator:

npm i -D prisma@latest @prisma/client@latest
npx prisma init --datasource-provider postgresql

Edit .env dengan string koneksi produksi atau lokal:

DATABASE_URL="postgresql://user:password@localhost:5432/next14_demo?schema=public"

Definisikan model User di prisma/schema.prisma:

model User {
  id        Int      @id @default(autoincrement())
  name      String
  email     String   @unique
  createdAt DateTime @default(now())
}

Jalankan migrasi:

npx prisma migrate dev --name init

9. Optimasi Build dan Performance

  • Image Optimization: gunakan next/image dengan loader default Vercel. Pastikan images.remotePatterns di next.config.js mencakup domain eksternal.
  • Incremental Static Regeneration (ISR): tambahkan revalidate pada fetch di server components untuk data yang berubah tiap 60 detik.
  • Edge Runtime: ubah runtime: 'edge' pada route yang butuh latensi ultra‑rendah, misalnya API autentikasi JWT.
  • Bundling: aktifkan experimental turbopack (default sejak Next.js 14) untuk build yang lebih cepat.

10. Deploy ke Vercel (Zero‑Config)

Jika Anda memiliki akun Vercel, cukup push repository ke GitHub dan import project di dashboard Vercel. Vercel otomatis mendeteksi next.config.js, meng‑install dependencies, dan meng‑set environment variable DATABASE_URL.

Contoh next.config.js yang siap production:

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  swcMinify: true,
  images: {
    remotePatterns: [{ protocol: 'https', hostname: 'images.unsplash.com' }],
  },
  experimental: {
    appDir: true,
  },
};
module.exports = nextConfig;

11. Best Practice yang Harus Diikuti

  1. Type‑Safety: gunakan TypeScript pada semua level, termasuk API route return types.
  2. Folder Modular: pisahkan UI components (/components), server utilities (/lib), dan business logic (separate service layer).
  3. Security: aktifkan Content‑Security‑Policy di next.config.js, sanitasi input di server actions, dan gunakan rate‑limiting middleware (contoh next-rate-limit).
  4. Testing: gunakan jest + @testing-library/react untuk unit test, dan playwright untuk end‑to‑end testing pada route /dashboard.
  5. Logging: integrasikan dengan pino atau winston dan kirim ke layanan observability seperti Logtail atau Datadog.

12. Monitoring & Error Tracking

Tambahkan Sentry SDK untuk Next.js:

npm i @sentry/nextjs
npx @sentry/wizard -i nextjs

Konfigurasi sentry.client.config.ts dan sentry.server.config.ts sesuai dokumentasi resmi.

13. Penutup

Dengan langkah‑langkah di atas, Anda memiliki aplikasi Next.js 14 yang modern, aman, dan siap produksi. Manfaatkan App Router untuk routing berbasis file, Server Actions untuk logika server tanpa boilerplate, dan deployment otomatis ke Vercel sehingga tim dapat fokus pada fitur utama, bukan infrastruktur.


Next.js 14 memberikan paradigma baru yang menyederhanakan pengembangan full‑stack React. Dengan menggabungkan App Router, Server Actions, TypeScript, dan Prisma, Anda dapat membangun aplikasi yang performant, mudah dipelihara, dan siap skala. Ikuti best practice keamanan, testing, dan observability untuk memastikan kualitas tinggi dalam jangka panjang. Selamat coding!
Panduan lengkap setup Next.js 14 dengan App Router, Server Actions, TypeScript, Prisma, dan deployment Vercel. Tutorial step‑by‑step, contoh kode, dan best practice untuk Programming, Software Engineering, dan Web Development di 2026.

Programming,Software Engineering,Web Development,Next.js 14,App Router,Server Actions,TypeScript,Prisma,Vercel

#Programming #SoftwareEngineering #WebDev #Tech #Coding

Posting Komentar

0 Komentar