app 디렉터리 아래에서 서버 측 로직을 처리하는 엔드포인트를 정의할 수 있다.라우트 핸들러는 특정 경로의 route.ts 또는 route.js 파일로 정의된다.
예시: /app/api/hello/route.ts
import { NextResponse } from 'next/server';
export async function GET(request: Request) {
return NextResponse.json({ message: 'Hello, World!' });
}
GET, POST, PUT, DELETE 등 HTTP 메서드에 따라 다른 핸들러를 정의할 수 있다.NextResponse를 사용해 JSON 응답을 반환한다.Middleware를 통해 요청을 전처리하거나 인증을 할 수 있다.Edge Runtime을 사용할 수 있어 응답 속도가 빠르다.| 특징 | 라우트 핸들러(Route Handlers) | 서버 액션(Server Actions) |
|---|---|---|
| 사용 목적 | API 엔드포인트 생성 | 서버 측 함수 호출 |
| 동작 위치 | 주로 API 라우트에서 사용 | 컴포넌트 내에서 직접 사용 |
| 데이터 반환 | JSON 응답 반환 | 함수 결과 반환 |
| 호출 방식 | HTTP 요청 | 직접 함수 호출 |
try-catch로 예상치 못한 오류를 방지한다.NextResponse의 status 옵션을 사용해 명확한 상태 코드를 반환한다.예시:
export async function GET(request: Request) {
try {
const data = { key: 'value' };
return NextResponse.json(data, { status: 200 });
} catch (error) {
return NextResponse.json({ error: 'Something went wrong' }, { status: 500 });
}
}