Di artikel ini Anda akan belajar cara menyiapkan proyek Next.js 14 terbaru, mengkonfigurasi App Router, memanfaatkan React Server Components, serta menerapkan best practice untuk performa dan keamanan.
1. Prasyarat dan Persiapan Lingkungan
Sebelum memulai, pastikan Anda memiliki:
- Node.js v20.10 atau lebih baru (direkomendasikan LTS terbaru)
- npm v10 atau Yarn v4
- Git untuk version control
- Editor kode modern (VS Code dengan ekstensi Next.js dan ESLint)
Jika Node belum terinstall, unduh dari nodejs.org dan verifikasi dengan node -v serta npm -v.
2. Membuat Proyek Next.js 14 Baru
npx create-next-app@latest my-next14-app --experimental-app --ts
cd my-next14-app
Perintah di atas melakukan:
- Instalasi Next.js versi stabil terbaru (14.x pada Juni 2026).
- Mengaktifkan App Router secara eksperimental (sekarang default).
- Menggunakan TypeScript untuk type‑safety.
Setelah selesai, jalankan npm run dev untuk memastikan proyek berjalan di http://localhost:3000.
3. Struktur Direktori App Router
Next.js 14 memperkenalkan folder app/ yang menggantikan pages/. Berikut contoh struktur awal:
app/
│ layout.tsx # Root layout (HTML & Body wrapper)
│ page.tsx # Halaman beranda default
│ globals.css # CSS global
│
└───dashboard/
layout.tsx # Layout khusus dashboard
page.tsx # Dashboard index
loading.tsx # UI loading state
error.tsx # UI error handling
Setiap folder menjadi route otomatis. Misalnya /dashboard akan dirender dari app/dashboard/page.tsx.
4. Mengaktifkan React Server Components (RSC)
Server Components di‑export secara default bila tidak menggunakan 'use client'. Contoh komponen server sederhana:
// app/components/FeaturedPosts.tsx
import { prisma } from '@/lib/prisma';
export default async function FeaturedPosts() {
const posts = await prisma.post.findMany({
take: 5,
orderBy: { createdAt: 'desc' },
select: { id: true, title: true, excerpt: true }
});
return (
Featured Posts
{posts.map(p => (
-
{p.title}
{p.excerpt}
))}
);
}
Catatan:
- Komponen di atas dijalankan sepenuhnya di server, sehingga tidak ter‑bundle ke client.
- Jika Anda membutuhkan interaktivitas, tambahkan
'use client'di atas file dan gunakan state React biasa.
5. Konfigurasi Prisma (ORM) untuk Database
Next.js 14 bekerja mulus dengan Prisma. Ikuti langkah berikut:
- Install dependencies:
npm install prisma @prisma/client - Inisialisasi skema:
npx prisma init --datasource-provider postgresql - Sesuaikan
prisma/schema.prismadengan kredensial database (PostgreSQL 16 di AWS RDS). - Run migration:
npx prisma migrate dev --name init - Buat file helper
lib/prisma.tsuntuk singleton connection:import { PrismaClient } from '@prisma/client'; let prisma: PrismaClient; if (process.env.NODE_ENV === 'development' && globalThis.prisma) { prisma = globalThis.prisma; } else { prisma = new PrismaClient(); if (process.env.NODE_ENV === 'development') globalThis.prisma = prisma; } export { prisma };
Dengan konfigurasi ini, Server Components dapat langsung melakukan query tanpa menambah beban jaringan.
6. Menambahkan Middleware untuk Security
Next.js 14 mendukung middleware berbasis Edge Runtime. Buat middleware.ts di root project:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
// CORS & CSP header contoh minimal
const response = NextResponse.next();
response.headers.set('X-Content-Type-Options', 'nosniff');
response.headers.set('X-Frame-Options', 'DENY');
response.headers.set('Content-Security-Policy', "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'");
return response;
}
export const config = {
matcher: ['/((?!api|_next/static|favicon.ico).*)'], // jalankan untuk semua route kecuali API
};
Middleware ini akan dieksekusi di edge, menambahkan header keamanan sebelum respons dikirim ke browser.
7. Deploy ke Vercel (Zero‑Config)
Vercel adalah platform resmi untuk Next.js. Langkah deploy:
- Push repository ke GitHub.
- Buka vercel.com, pilih New Project, hubungkan repo, dan biarkan default build settings (next build).
- Tambahkan environment variable
DATABASE_URLyang mengarah ke RDS instance. - Deploy! Vercel otomatis mengoptimalkan RSC, edge functions, dan static assets.
Jika Anda ingin self‑host, gunakan Docker (lihat bagian berikut).
8. Dockerisasi Next.js 14
# Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["npm", "run", "start"]
Build & run:
docker build -t my-next14-app .
docker run -p 3000:3000 -e DATABASE_URL=$DATABASE_URL my-next14-app
Container ini hanya berisi hasil build produksi, sehingga ukuran < 100 MB dan startup time < 1 detik pada AWS Fargate.
9. Optimasi Performansi
- Streaming SSR: gunakan
awaitdi dalam Server Component untuk streaming incremental HTML. - Image Optimization: ganti
next/imagedengannext/future/imageyang mendukung AVIF & WebP secara native. - Cache Header: di
next.config.js, aktifkanoutput: 'standalone'danexperimental: { serverActions: true }untuk caching edge.
// next.config.js
module.exports = {
images: { remotePatterns: [{ hostname: 'images.unsplash.com' }] },
output: 'standalone',
experimental: { serverActions: true },
async headers() {
return [{
source: '/(.*)',
headers: [
{ key: 'Cache-Control', value: 'public, max-age=31536000, immutable' }
]
}];
}
};
10. Testing dan Linting
Install Jest, React Testing Library, dan ESLint dengan konfigurasi Next.js:
npm install -D jest @testing-library/react @testing-library/jest-dom eslint-config-next
# jest.config.js
module.exports = {
testEnvironment: 'jsdom',
moduleNameMapper: { '^@/(.*)
Next.js 14 membawa paradigma baru dengan App Router dan React Server Components yang memudahkan pengembangan aplikasi web cepat, aman, dan SEO‑friendly. Dengan mengikuti tutorial ini—mulai dari instalasi, konfigurasi Prisma, middleware security, hingga deployment via Vercel atau Docker—Anda akan memiliki fondasi yang solid untuk membangun produk modern. Terapkan best practice yang dibahas, lakukan testing otomatis, dan pantau performa secara terus‑menerus untuk memastikan aplikasi tetap scalable di era cloud native.
Tutorial step‑by‑step 2026 cara setup Next.js 14 dengan App Router, React Server Components, Prisma, security middleware, Docker, dan deployment Vercel. Lengkap dengan contoh kode, best practice, dan studi kasus real‑time dashboard.
Programming,Software Engineering,Web Development,Next.js,React Server Components,App Router,Docker,Vercel,Prisma,Performance Optimization
#Programming #SoftwareEngineering #WebDev #Tech #Coding
: '/app/$1' },
setupFilesAfterEnv: ['@testing-library/jest-dom/extend-expect'],
};
Contoh test untuk FeaturedPosts:
import { render, screen } from '@testing-library/react';
import FeaturedPosts from '@/app/components/FeaturedPosts';
jest.mock('@/lib/prisma', () => ({
prisma: { post: { findMany: jest.fn().mockResolvedValue([{ id: 1, title: 'Test', excerpt: 'Demo' }]) } }
}));
test('renders featured posts', async () => {
render(await FeaturedPosts());
expect(screen.getByText('Featured Posts')).toBeInTheDocument();
expect(screen.getByText('Test')).toBeInTheDocument();
});
Jalankan npm test dan npm run lint untuk memastikan kualitas kode.
11. Best Practice Tambahan
- Type‑Safety: gunakan generik Prisma
@prisma/clientdenganzoduntuk validasi input API. - Env Management: simpan variabel sensitif di
.env.localdan gunakannext/configuntuk runtime config. - Incremental Static Regeneration (ISR): tambahkan
revalidatepada Server Component fetch untuk konten yang berubah tiap 60 detik.export const revalidate = 60; // seconds - Monitoring: integrasikan dengan Vercel Analytics atau OpenTelemetry (npm package
@opentelemetry/api) untuk tracing request latency.
12. Studi Kasus: Dashboard Analitik Real‑Time
Bayangkan Anda membangun dashboard internal yang menampilkan metrik penjualan dari PostgreSQL. Dengan Next.js 14:
- Gunakan Server Component untuk mengambil data penjualan terbaru (query async).
- Implementasikan
use clientpada widget grafik yang memakairechartsdan WebSocket untuk pembaruan otomatis. - Manfaatkan Edge Middleware untuk meng‑cache respons API selama 30 detik, mengurangi beban DB.
Hasilnya: halaman dimuat dalam 800 ms pada koneksi 4G, dengan RSC meng‑stream HTML dan WebSocket memperbarui grafik tanpa refresh full page.
{{ $json.conclusion }}
{{ $json.seo.meta_description }}
{{ $json.seo.keywords }}
{{ $json.hashtags }}
0 Komentar