Middleware Placement

미들웨어와 핸들러 책임

matcher에 걸린 요청을 전부 가로채는 만큼, 미들웨어에는 토큰과 헤더만으로 끝나는 일을 두고 DB 조회나 본문 기반 검증은 route.ts에 남겨야 합니다.

1

matcher 축소

보호할 /api/admin, /api/editor 같은 경로만 실행 대상으로 둡니다.

config.matcher
2

토큰 판정

withAuth가 붙인 req.nextauth.token으로 role을 확인합니다.

token.role
3

가벼운 정책

로그, 레이트리밋 키, 보안 헤더처럼 짧은 작업만 처리합니다.

NextResponse.next()
4

직접 차단

API 요청은 권한 실패를 JSON과 403으로 명확하게 반환합니다.

403 Forbidden
작업
미들웨어에 두기
핸들러에 남기기
배치 판단
로그인 여부
토큰 유무로 즉시 판정
세션 재확인이 필요한 쓰기 작업
둘 다 가능
역할 검사
admin/editor 경로 선차단
리소스 소유자 비교
분리
본문 검증
두지 않음
request.json() 이후 Zod 검증
핸들러
DB 조회
피함
route.ts에서 필요한 순간 실행
핸들러