Route Guard

라우트 보호 실행 위치

보호된 라우트는 middleware.ts, 서버 컴포넌트, 클라이언트 UI가 같은 세션을 보더라도 서로 다른 시점에서 판단합니다.

request

요청 진입

주소창 직접 접근, 링크 이동, 새로고침 모두 서버 요청으로 시작합니다.

middleware.ts

경로 관문

matcher에 걸린 URL은 세션 토큰이 없으면 로그인으로 보냅니다.

page.tsx

서버 확정

getServerSession으로 사용자와 역할을 읽고 데이터 접근을 결정합니다.

data

민감 데이터

세션, 역할, 소유권이 맞을 때만 조회와 변경을 이어갑니다.

client

화면 안내

useSession은 로딩과 안내를 다루며 보안의 최종 경계는 아닙니다.

권한 기준

서버 판단이 최종 경계입니다

클라이언트에서 숨긴 UI는 우회될 수 있으므로 서버나 미들웨어에서 접근 결정을 내려야 합니다.

위치별 역할

middleware 공통 로그인 필요 경로를 빠르게 거릅니다.
server component 역할, 조직, 리소스 소유권을 데이터 조회 전에 확인합니다.
client guard 로딩 상태와 안내 문구를 보완하지만 직접 접근을 막지는 못합니다.