왜 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
는 피해야 함.