01
대시보드
서버 컴포넌트에서 `getServerSession`을 읽고 세션이 없으면 로그인 페이지로 보냅니다.
경로/dashboard
실패callbackUrl 포함 signin
`/dashboard`, `/settings`, `/admin`, `/unauthorized`는 같은 로그인 검사처럼 보여도 차단 위치와 통과 조건이 다릅니다.
서버 컴포넌트에서 `getServerSession`을 읽고 세션이 없으면 로그인 페이지로 보냅니다.
`useSession`은 로딩, 비로그인, 로그인 상태를 UI에서 분리하는 보조 보호층입니다.
token/session role을 싣고, admin이 아니면 권한 없음으로 보냅니다.
`middleware.ts` matcher는 보호 경로만 잡고 권한 판단은 분리합니다.