이 절에서는 NextAuth.js를 사용하여 인증된 사용자만 접근할 수 있는 보호된 라우트를 구현하는 방법, 미들웨어 사용, 그리고 클라이언트 및 서버 컴포넌트에서의 인증 상태 처리에 대해 알아보겠습니다.
NextAuth.js 세션 검사
NextAuth.js는 세션 검사를 위한 다양한 방법을 제공합니다.
서버 컴포넌트에서는 getServerSession 함수를, 클라이언트 컴포넌트에서는 useSession 훅을 사용할 수 있습니다.
서버 컴포넌트에서의 세션 검사
클라이언트 컴포넌트에서의 세션 검사
미들웨어를 사용한 라우트 보호
Next.js의 미들웨어를 사용하면 라우트 레벨에서 인증을 처리할 수 있습니다.
middleware.js 파일을 프로젝트 루트에 생성하여 구현할 수 있습니다.
이 미들웨어는 /protected 경로로 시작하는 모든 요청을 인터셉트하고, 인증되지 않은 사용자를 로그인 페이지로 리다이렉트합니다.
인증되지 않은 사용자 리다이렉션
인증되지 않은 사용자를 리다이렉트하는 방법은 여러 가지가 있습니다.
서버 컴포넌트에서 redirect 함수 사용
클라이언트 컴포넌트에서 useRouter 훅 사용
미들웨어에서 NextResponse.redirect 사용
위의 예제들에서 이미 이러한 방법들을 볼 수 있습니다.
4장 라우팅 심화와의 연결
보호된 라우트 생성은 4장의 라우팅 심화와 밀접하게 연관됩니다.
동적 라우트, 중첩 라우트, 그리고 라우트 그룹 개념을 이해하고 있다면, 더 복잡한 인증 및 권한 부여 시스템을 구현할 수 있습니다. 예를 들어, 사용자 역할에 따라 다른 대시보드 페이지로 라우팅하거나, 특정 제품 카테고리에 대한 접근을 제한하는 등의 기능을 구현할 수 있습니다.
실습 : 역할에 따른 대시보드 리다이렉션
사용자 역할(일반 사용자, 관리자)에 따라 다른 대시보드 페이지로 리다이렉트하는 보호된 라우트를 구현해보겠습니다.
먼저, NextAuth.js 설정에 사용자 역할 정보를 추가합니다.
대시보드 페이지를 생성합니다.
미들웨어를 사용하여 전체 /dashboard 경로를 보호합니다.
이 실습을 통해 사용자 역할에 따라 다른 대시보드로 리다이렉트하는 보호된 라우트를 구현할 수 있습니다.
이는 실제 애플리케이션에서 자주 사용되는 패턴으로, 복잡한 권한 관리 시스템의 기초가 됩니다.
보호된 라우트 구현은 인증과 권한 부여의 핵심 요소입니다.
Next.js의 서버 컴포넌트, 클라이언트 컴포넌트, 그리고 미들웨어를 조합하여 강력하고 유연한 인증 시스템을 구축할 수 있습니다.