Next.js 14 telah menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini menjelaskan langkah demi langkah cara meng‑install, meng‑konfigurasi, dan membangun fitur AI dengan OpenAI API, lengkap dengan best practice untuk performance dan security.
1. Persiapan Lingkungan
Pastikan Anda memiliki Node.js versi 20.12+ dan npm atau pnpm terbaru. Verifikasi dengan:
node -v
npm -v
Jika belum terpasang, unduh dari nodejs.org atau gunakan nvm untuk mengelola versi.
2. Membuat Projekt Next.js 14 dengan TypeScript
npx create-next-app@latest my-next14-app \
--ts \
--eslint \
--experimental-app-router
cd my-next14-app
Perintah di atas menghasilkan struktur folder baru dengan app/ directory (App Router) dan konfigurasi TypeScript standar.
3. Instalasi Dependensi Penting
# Manajemen paket: pilih npm atau pnpm
npm i dotenv openai@4 zod
# atau
pnpm add dotenv openai@4 zod
• dotenv – memuat variabel lingkungan secara aman.
• openai@4 – SDK resmi OpenAI yang mendukung streaming.
• zod – validasi schema tipe‑safe untuk request API.
4. Konfigurasi Variables Lingkungan
Buat file .env.local di root project dan tambahkan:
NEXT_PUBLIC_OPENAI_MODEL=gpt-4o-mini
OPENAI_API_KEY=sk-**************
Gunakan NEXT_PUBLIC_ hanya untuk nilai yang memang boleh di‑expose ke client (model name). Jangan pernah commit file ini ke repo.
5. Membuat API Route untuk OpenAI
Di dalam folder app/api/chat/route.ts buat endpoint yang akan menerima prompt, memanggil OpenAI, dan mengembalikan streaming response.
import { NextResponse } from 'next/server';
import { OpenAI } from 'openai';
import { z } from 'zod';
import dotenv from 'dotenv';
dotenv.config();
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const BodySchema = z.object({
prompt: z.string().min(1),
});
export async function POST(req: Request) {
try {
const json = await req.json();
const { prompt } = BodySchema.parse(json);
const completion = await openai.chat.completions.create({
model: process.env.NEXT_PUBLIC_OPENAI_MODEL,
messages: [{ role: 'user', content: prompt }],
stream: true,
});
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
for await (const chunk of completion) {
const content = chunk.choices[0].delta?.content || '';
controller.enqueue(encoder.encode(content));
}
controller.close();
},
});
return new NextResponse(stream, {
headers: { 'Content-Type': 'text/event-stream' },
});
} catch (err) {
console.error(err);
return NextResponse.json({ error: 'Invalid request' }, { status: 400 });
}
}
Endpoint ini sudah mengikuti best practice: validasi schema, penanganan error, dan streaming untuk UX yang responsif.
6. Membuat UI Chat di Front‑End
Tambahkan komponen ChatBox.tsx di app/components/ChatBox.tsx:
"use client";
import { useState, useRef, FormEvent } from 'react';
export default function ChatBox() {
const [messages, setMessages] = useState<string[]>([]);
const [input, setInput] = useState('');
const textareaRef = useRef<HTMLTextAreaElement>(null);
const handleSubmit = async (e: FormEvent) => {
e.preventDefault();
if (!input.trim()) return;
setMessages(prev => [...prev, `You: ${input}`]);
const response = await fetch('/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ prompt: input }),
});
const reader = response.body?.getReader();
const decoder = new TextDecoder();
let done = false;
let aiReply = '';
while (!done && reader) {
const { value, done: doneReading } = await reader.read();
done = doneReading;
if (value) {
aiReply += decoder.decode(value);
setMessages(prev => [...prev.slice(0, -1), `AI: ${aiReply}`]);
}
}
setInput('');
textareaRef.current?.focus();
};
return (
{messages.map((msg, i) => (
{msg}
))}
);
}
Komponen ini menggunakan fetch streaming, sehingga jawaban AI muncul secara real‑time.
7. Menyisipkan ChatBox ke Halaman
Edit app/page.tsx:
import ChatBox from './components/ChatBox';
export default function Home() {
return (
AI Chat dengan Next.js 14
);
}
8. Optimasi Produksi
- Image Optimization: Gunakan
next/imageuntuk semua gambar; sudah built‑in di Next.js 14. - Static Site Generation (SSG) vs Server‑Side Rendering (SSR): Halaman chat bersifat dynamic, tetap gunakan
approuter denganfetchpada server‑side untuk data statis lain. - Caching: Tambahkan header
Cache-Control: s‑maxage=60, stale‑while‑revalidate=30pada API route bila memungkinkan (tidak untuk prompt yang unik). - Security: Aktifkan
Content‑Security‑Policylewatnext.config.js, dan pastikanOPENAI_API_KEYtidak pernah ter‑expose ke client.// next.config.js module.exports = { reactStrictMode: true, async headers() { return [{ source: '/(.*)', headers: [{ key: 'Content-Security-Policy', value: "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self' https://api.openai.com;" }] }]; } };
9. Deploy ke Vercel (atau Platform lain)
- Push repository ke GitHub.
- Buka Vercel dan import project.
- Di Settings → Environment Variables, tambahkan
OPENAI_API_KEYdanNEXT_PUBLIC_OPENAI_MODEL. - Deploy! Vercel otomatis meng‑optimasi image, edge‑caching, dan menyediakan preview URL.
Jika menggunakan Docker, buat Dockerfile sederhana:
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/public ./public
COPY --from=builder /app/package*.json ./
RUN npm ci --production
EXPOSE 3000
CMD ["npm","start"]
10. Best Practice Tambahan
- Type‑Safe API contracts: Gunakan
zodatauyuppada kedua sisi (client & server) untuk menghindari mismatch. - Rate Limiting: Implementasikan middleware di API route (misalnya
lru-cache+ IP based) untuk melindungi kuota OpenAI. - Observability: Integrasikan dengan Sentry atau OpenTelemetry untuk error tracking.
- Testing: Pakai
jest+react-testing-libraryuntuk unit test komponen, danmswuntuk mock API OpenAI.
11. Studi Kasus: Menggunakan AI untuk Generasi Kode Mini‑Utility
Setelah sistem chat berfungsi, tambahkan endpoint /api/generate-component yang menerima deskripsi UI dan mengembalikan kode React dalam format JSX. Ini memperlihatkan potensi AI dalam mempercepat prototyping.
import { OpenAI } from 'openai';
import { z } from 'zod';
const schema = z.object({ description: z.string().min(10) });
export async function POST(req: Request) {
const { description } = schema.parse(await req.json());
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const completion = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'system', content: 'You are a React component generator. Return only the JSX code without markdown.' },
{ role: 'user', content: description }],
temperature: 0.2,
});
const code = completion.choices[0].message.content.trim();
return Response.json({ code });
}
Dengan contoh ini developer dapat men‑type prompt seperti “Buat tombol berwarna biru dengan icon check yang memanggil fungsi handleSubmit”. AI akan mengembalikan snippet yang siap dipaste.
12. Troubleshooting Umum
- 401 Unauthorized: Pastikan
OPENAI_API_KEYvalid dan tidak ada spasi di .env. - CORS error di localhost: Next.js API routes berada pada same origin, jadi biasanya karena fetch ke domain eksternal; gunakan
next.config.jsrewritesatau setmode: 'cors'bila perlu. - Streaming tidak muncul di Safari: Safari belum sepenuhnya mendukung
ReadableStream. Tambahkan polyfillweb-streams-polyfillpada client.
13. Ringkasan
Anda kini memiliki aplikasi Next.js 14 yang:
- Berbasis TypeScript dengan App Router.
- Menggunakan OpenAI SDK untuk streaming chat.
- Menerapkan security, caching, dan observability.
- Siap dideploy ke Vercel atau Docker.
Next.js 14 bersama OpenAI API membuka lebar kemungkinan untuk membangun aplikasi web interaktif yang cerdas. Dengan mengikuti langkah‑langkah instalasi, konfigurasi, dan best practice di atas, Anda dapat menghasilkan produk yang cepat, aman, dan mudah di‑scale. Jangan lupa terus memantau update resmi Next.js dan OpenAI, serta mengoptimalkan performa melalui edge functions dan caching. Selamat bereksperimen, dan semoga tutorial ini mempercepat perjalanan Anda menjadi developer AI‑enabled yang handal!
Tutorial step-by-step setup Next.js 14 dengan TypeScript, App Router, dan integrasi OpenAI API. Panduan lengkap instalasi, konfigurasi, contoh kode, best practice, serta deployment ke Vercel atau Docker untuk AI‑powered web apps.
Programming,Software Engineering,Web Development,Next.js,OpenAI,AI Integration,TypeScript,DevOps
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar