왜 React.js에서 보호된 라우트를 위해 컴포넌트를 사용하는가?

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

React.js 및 React Router를 사용하는 중급 이상 개발자. 인증 로직과 라우팅 처리에 관심 있는 사람들.

핵심 요약

  • useEffect + useNavigate 방식의 주요 문제:

- 인증 실패 시 보호된 UI가 잠시 표시됨 (UI flicker).

- 데이터 누출 및 민감한 로직 실행 가능성.

  • 컴포넌트의 장점:

- 선언적 접근: JSX로 조건 분기 처리 가능.

- 무결한 UX: 인증 실패 시 보호된 UI 전혀 표시되지 않음.

- 코드 간결성: useEffect, useNavigate, 로딩 플래그 관리 필요 없음.

  • React-idiomatic: JSX의 조건 분기 기능을 최대한 활용.

섹션별 세부 요약

1. **기존 접근 방식의 문제점**

  • useEffect + useNavigate로 보호된 라우트 구현 시 발생하는 문제:

- 인증 상태가 변경될 때 useNavigate로 리디렉션 전, 컴포넌트가 잠시 렌더링됨.

- 콘솔 로그나 사이드 이펙트가 실행될 수 있음.

- UX 결함 외에도 데이터 누출 또는 민감한 로직 실행 위험.

2. **`` 컴포넌트의 우월성**

  • 선언적 라우팅:

- isAuthenticated 상태를 기반으로 JSX 조건 분기 처리.

- return 로 즉시 리디렉션.

  • 보안 및 UX 개선:

- 인증 실패 시 보호된 UI 표시 자체를 방지.

- 코드 복잡도 감소 및 useEffect/useNavigate 관리 필요 없음.

3. **보너스 팁**

  • 로그인 후 URL 유지: replace: true 옵션 사용.
  • 재사용 가능한 보호 라우트 위퍼: 여러 라우트에 보호 로직을 적용할 수 있도록 컴포넌트로 추상화.

결론

  • 컴포넌트 사용이 권장됨:

- useEffect + useNavigate 방식보다 안전하고 UX 향상.

- React Router의 선언적 접근을 활용한 정확한 라우팅 구현.

- 핵심 팁: 보호된 라우트는 로 즉시 리디렉션하고, useEffect는 피해야 함.