Next.jsHard#235
Middleware는 어떤 상황에서 사용하고 어떤 제약이 있나요?
#Next.js#Middleware#Edge#Routing
답변 포인트
요청 전 처리와 Edge Runtime 제약를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.
정답 및 해설
빠른 요약
Middleware는 라우트 처리 전 리다이렉트, rewrite, 인증 검사 등을 수행합니다. 보통 Edge Runtime에서 실행되어 Node 전용 API와 무거운 작업에는 제약이 있습니다.
Next.js Middleware는 요청이 라우트에 도달하기 전에 실행되는 코드입니다. 인증 리다이렉트, A/B 테스트, locale 처리, 간단한 rewrite처럼 요청 레벨의 결정을 빠르게 내릴 때 사용합니다.
예시
TypeScript
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
const token = request.cookies.get('session');
if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url));
}
return NextResponse.next();
}
export const config = { matcher: ['/dashboard/:path*'] };적합한 사용
- 로그인 여부에 따른 리다이렉트
- 국가/언어 기반 rewrite
- bot 차단이나 간단한 rate limit 연동
- feature flag에 따른 경로 분기
제약
Middleware는 보통 Edge Runtime에서 실행되므로 Node.js 전용 API, 일부 DB 드라이버, 긴 작업에 적합하지 않습니다. 응답 본문을 무겁게 만들거나 복잡한 비즈니스 로직을 넣으면 latency가 늘어납니다.
실무 주의점
- matcher를 좁게 잡아 모든 정적 파일 요청까지 middleware가 타지 않게 합니다.
- 인증의 최종 판단은 서버 API/페이지에서도 반복해야 합니다. middleware만 믿으면 우회 경로가 생길 수 있습니다.
- 쿠키와 헤더 조작은 캐시 동작에 영향을 줄 수 있습니다.
면접 답변 포인트
Middleware는 요청 전처리 계층이며 가벼운 rewrite/redirect/auth gate에 적합합니다. Edge 제약과 matcher 범위, 최종 인가 검증 필요성을 함께 설명하면 좋습니다.