Panduan Lengkap Setup Next.js 14 dengan App Router, Server Actions, dan Optimasi Performa di 2026


Next.js 14 telah menjadi standar de‑facto untuk aplikasi React modern. Artikel ini memberikan tutorial step‑by‑step mulai dari instalasi, konfigurasi, hingga contoh kode Server Actions, lengkap dengan best practice untuk produksi.

1. Prasyarat dan Persiapan Lingkungan

Sebelum memulai, pastikan Anda memiliki:

  • Node.js >= 20.10 (LTS) – unduh di nodejs.org
  • Git terpasang
  • Editor kode (VS Code direkomendasikan) dengan ekstensi ESLint dan Prettier
  • Akun Vercel untuk deployment cepat

2. Instalasi Next.js 14

  1. Buatas folder proyek baru dan inisialisasi repo Git:
    mkdir next14-demo && cd next14-demo
    git init
  2. Jalankan create‑next‑app dengan template app-router:
    npx create-next-app@latest . --experimental-app-router
    Pilih TypeScript saat prompt muncul untuk mendapatkan tipe yang kuat.
  3. Instal dependensi tambahan yang dibutuhkan untuk server actions dan image optimization:
    npm install @next/third-parties next-auth@latest bcryptjs

3. Struktur Direktori Baru (App Router)

.
├─ app/
│  ├─ layout.tsx          # Root layout dengan metadata global
│  ├─ page.tsx            # Landing page
│  ├─ dashboard/
│  │  ├─ layout.tsx
│  │  └─ page.tsx
│  └─ api/
│     └─ auth/
│        └─ route.ts     # Server Action untuk login
├─ public/
│  └─ favicon.ico
├─ styles/
│  └─ globals.css
├─ next.config.js
├─ tsconfig.json
└─ package.json

4. Konfigurasi next.config.js

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

Konfigurasi di atas mengaktifkan mode strict React, SWC minify, dukungan gambar remote, dan fitur eksperimental serverActions yang sudah stabil di Next.js 14.

5. Membuat Layout Global dengan Metadata SEO

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

export const metadata: Metadata = {
  title: 'Next.js 14 Demo – Modern Web Development',
  description: 'Tutorial step‑by‑step Next.js 14 dengan App Router, Server Actions, dan best practice 2026.',
  keywords: ['Programming', 'Software Engineering', 'Web Development', 'Next.js', 'React'],
};

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

6. Implementasi Server Action – Login dengan bcrypt

Server Actions memungkinkan Anda menulis fungsi asynchronous yang dijalankan di server tanpa API route terpisah.

// app/api/auth/route.ts
'use server';
import { redirect } from 'next/navigation';
import bcrypt from 'bcryptjs';
import { cookies } from 'next/headers';

// Simulasi DB user (sebaiknya gunakan Prisma atau Drizzle dalam produksi)
const USERS = [{ email: 'admin@example.com', passwordHash: bcrypt.hashSync('P@ssw0rd!', 10) }];

export async function loginAction(formData: FormData) {
  const email = formData.get('email') as string;
  const password = formData.get('password') as string;

  const user = USERS.find(u => u.email === email);
  if (!user) {
    return { error: 'Email tidak terdaftar' };
  }
  const valid = await bcrypt.compare(password, user.passwordHash);
  if (!valid) {
    return { error: 'Password salah' };
  }
  // Simulasi token JWT sederhana
  const token = Buffer.from(`${email}:auth`).toString('base64');
  cookies().set('auth-token', token, { httpOnly: true, sameSite: 'lax', path: '/' });
  redirect('/dashboard');
}

Catatan best practice: gunakan httpOnly cookie, panjang sameSite, dan enkripsi JWT dengan secret environment variable.

7. Membuat Form Login Menggunakan Server Action

// app/login/page.tsx
'use client';
import { useState } from 'react';
import { loginAction } from '../api/auth/route';

export default function LoginPage() {
  const [error, setError] = useState('');

  async function handleSubmit(event: React.FormEvent) {
    event.preventDefault();
    const formData = new FormData(event.currentTarget);
    const result = await loginAction(formData);
    if (result?.error) setError(result.error);
  }

  return (
    

Login

{error &&

{error}

}
); }

8. Dashboard yang Dilindungi (Middleware)

// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  const token = request.cookies.get('auth-token');
  const url = request.nextUrl.clone();
  if (!token && url.pathname.startsWith('/dashboard')) {
    url.pathname = '/login';
    return NextResponse.redirect(url);
  }
  return NextResponse.next();
}

export const config = {
  matcher: ['/dashboard/:path*'],
};

Middleware memastikan route sensitif hanya diakses bila token ada. Untuk production, verifikasi JWT dengan secret dan gunakan zod untuk schema validation.

9. Optimasi Gambar dengan @next/third-parties

// app/dashboard/page.tsx
import Image from 'next/image';

export default function Dashboard() {
  return (
    

Selamat Datang di Dashboard

Coding Workspace

Gunakan komponen next/image untuk lazy‑loading otomatis dan format WebP modern.

); }

10. CI/CD dengan GitHub Actions ke Vercel

# .github/workflows/deploy.yml
name: Deploy to Vercel
on:
  push:
    branches: [main]
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20.x'
      - run: npm ci
      - run: npm run build --if-present
      - 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: .
          prod: true

CI/CD otomatis memastikan setiap commit ke main ter‑deploy ke lingkungan produksi Vercel. Simpan token dan ID di GitHub Secrets.

11. Best Practice Tambahan untuk Produksi

  • TypeScript Strict Mode: aktifkan strict: true di tsconfig.json agar bug tipe terdeteksi dini.
  • Linting & Formatting: gunakan eslint-config-next bersama Prettier; jalankan npm run lint -- --fix di pipeline.
  • Env Variable Management: simpan rahasia di Vercel Dashboard atau .env.production, dan akses via process.env.NEXT_PUBLIC_* untuk variabel yang boleh di‑expose.
  • Performance Monitoring: integrasikan Vercel Analytics atau @sentry/nextjs untuk error tracking.
  • Security Headers: tambahkan header CSP, X‑Content‑Type‑Options, dan Referrer‑Policy lewat next.config.js atau middleware.

12. Testing dengan Playwright

// package.json (scripts)
"test:e2e": "playwright test",

// tests/login.spec.ts
import { test, expect } from '@playwright/test';

test('user can login', async ({ page }) => {
  await page.goto('/login');
  await page.fill('input[name="email"]', 'admin@example.com');
  await page.fill('input[name="password"]', 'P@ssw0rd!');
  await page.click('button[type="submit"]');
  await expect(page).toHaveURL('/dashboard');
});

Playwright memastikan UI login berfungsi di Chrome, Firefox, dan WebKit secara paralel.

13. Deploy dan Verifikasi

  1. Push kode ke GitHub main branch.
  2. GitHub Actions akan memicu workflow di atas.
  3. Setelah selesai, buka URL Vercel yang diberikan.
  4. Uji login, periksa cookie auth-token, dan pastikan dashboard menampilkan gambar yang di‑optimasi.

Jika semua langkah berhasil, aplikasi Next.js 14 Anda siap dipakai oleh tim atau klien.


Dengan mengikuti tutorial ini, Anda tidak hanya menguasai setup Next.js 14 menggunakan App Router dan Server Actions, tetapi juga memahami alur CI/CD, keamanan, dan performa produksi. Kombinasi TypeScript, middleware, dan Vercel membuat stack modern yang scalable, aman, dan siap menghadapi tantangan Web Development di 2026. Selamat coding!
Tutorial lengkap Next.js 14 2026: instalasi, konfigurasi App Router, Server Actions, middleware, CI/CD, dan best practice untuk Web Development modern.

Programming,Software Engineering,Web Development,Next.js,React,Server Actions

#Programming #SoftwareEngineering #WebDev #Tech #Coding

Posting Komentar

0 Komentar