5.3
Route Handlers 사용 예시
지금부터는 Route Handlers의 다양한 사용 예시들을 살펴보도록 하겠습니다.
Route Handlers에서는 next/headers 패키지의 cookies() 함수를 사용해서 Cookie를 읽거나 쓸 수 있습니다. 아래 코드는 token이라는 Cookie를 읽어온 이후, 응답에서 Set-Cookie 헤더를 사용하여 토큰 값을 클라이언트에 전송하는 코드입니다.
import { cookies } from 'next/headers';
export async function GET(request: Request) {
const cookieStore = await cookies();
const token = cookieStore.get('token');
return new Response('Succeeded', {
status: 200,
headers: { 'Set-Cookie': `token=${token.value}` },
});
}
NOTE.
Set-Cookie헤더란?Set-Cookie헤더는 서버가 클라이언트(브라우저)에게 쿠키를 설정하도록 지시하는 HTTP 응답 헤더입니다. 이렇게 클라이언트에 설정된 쿠키는 이후의 요청에서 조건에 따라 자동으로 포함되어 전송되며, 이를 통해 세션 유지나 사용자 인증 등의 기능을 수행할 수 있습니다.
Route Handlers에서는 next/headers 패키지의 headers() 함수를 사용하여 요청 헤더의 값을 읽어올 수 있습니다. 참고로 헤더의 값은 읽기 전용이라는 점을 기억하기 바랍니다. 아래 코드는 referer라는 헤더 값을 읽어온 이후, 응답 헤더에 포함시켜서 전송하는 코드입니다.
import { headers } from 'next/headers';
export async function GET(request: Request) {
const headersList = await headers();
const referer = headersList.get('referer');
return new Response('Succeeded', {
status: 200,
headers: { referer: referer },
});
}
이전 장에서 App Router의 Dynamic Routes를 배울 때 나왔던 것과 동일하게 Route Handlers에서도 Dynamic Segments를 사용할 수 있습니다. 아래 코드는 slug라는 이름의 Dynamic Segments를 사용하는 예시 코드입니다.
interface RequestPayload {
params: Promise<{ slug: string }>;
}
export async function GET(request: Request, payload: RequestPayload) {
const { params } = payload;
const { slug } = await params;
// ...
}
Route Handlers에서는 요청에 포함된 쿼리 파라미터의 값을 읽어서 사용할 수 있습니다. 이 때 쿼리 파라미터를 읽어오는 등의 기능을 편하게 처리할 수 있도록 하기 위해서 Request를 확장한 NextRequest를 사용하면 됩니다. 아래 코드는 NextRequest를 사용해서 searchParams으로부터 offset과 limit라는 쿼리 파라미터의 값을 읽어오는 예시 코드입니다.
import { type NextRequest } from 'next/server';
export function GET(request: NextRequest) {
const searchParams = request.nextUrl.searchParams;
const offset = searchParams.get('offset');
const limit = searchParams.get('limit');
// ...
}
Route Handlers에서는 아래 코드와 같이 표준 Web API 함수를 사용해서 Request body의 데이터를 읽어올 수 있습니다.
export async function POST(request: Request) {
const data = await request.json();
// ...
}
그리고 JSON이 아닌 FormData 형태로 전송된 데이터를 읽어올 때는 아래 코드와 같이 request.formData()함수를 사용하면 됩니다.
export async function POST(request: Request) {
const formData = await request.formData();
const title = formData.get('title');
const content = formData.get('content');
// ...
}
참고로 이렇게 Request Body로부터 데이터를 읽어오는 것은 주로 POST 요청에서 사용됩니다.
마지막 업데이트: 2025년 10월 24일 02시 17분
이 문서의 저작권은 이인제(소플)에 있습니다. 무단 전재와 무단 복제를 금합니다.
On this page