Route Protection

Next 인증 보호 경계

라우트 보호는 한 위치에서 끝나지 않으며 페이지 렌더링, API 호출, 미들웨어 리다이렉트, 클라이언트 UX가 서로 다른 보안 경계를 가집니다.

01

요청 진입

Middleware가 matcher에 걸린 경로에서 빠르게 세션 존재 여부를 확인합니다.

Edge 통과 기준
02

서버 세션 조회

Server Component나 Route Handler에서 getServerSession으로 실제 사용자 정보를 읽습니다.

서버 통과 기준
03

권한 판정

role, organization, resource owner를 기준으로 접근 가능 여부를 결정합니다.

authz
04

리다이렉트/응답

페이지는 redirect, API는 401/403처럼 경계에 맞는 결과를 반환합니다.

response
05

클라이언트 UX

클라이언트 컴포넌트는 로딩, 안내, 버튼 숨김을 담당하지만 최종 보안 경계는 아닙니다.

ux
Middleware
빠른 경로 차단 로그인 필요 경로를 일괄 처리하지만 세밀한 DB 권한 판단에는 부적합합니다.
matcher 정확도
Server
최종 접근 판정 민감 데이터 조회와 변경은 서버에서 세션과 리소스 소유권을 확인합니다.
필수
Client
사용자 경험 보조 버튼 숨김과 로딩 처리는 편의 기능이며 직접 URL/API 접근을 막지 못합니다.
보안 경계 아님

보호 라우트 확인 기준

직접 접근 주소창에 보호 URL을 직접 입력해도 서버가 올바르게 차단해야 합니다.
API 별도 보호 페이지가 보호되어도 그 페이지가 호출하는 API는 따로 보호해야 합니다.
권한 변경 역할이 바뀐 사용자의 세션 캐시가 오래된 권한을 유지하지 않게 합니다.