4.1 KiB
4.1 KiB
React Router
📌 Brief Summary
React Router는 React 애플리케이션에서 복잡한 사용자 인터페이스 레이아웃과 계층적 네비게이션 패턴을 생성하기 위해 사용되는 라우팅 라이브러리이다 [1, 2]. 버전 6.4 이상부터는 단순한 컴포넌트 전환을 넘어 데이터 페칭(fetching), 상태 관리, 사용자 상호작용을 중앙에서 조정하는 필수적인 도구로 진화했다 [3]. Loaders와 Actions를 도입하여 데이터 로딩과 컴포넌트 렌더링을 분리함으로써 성능 저하(워터폴 현상)를 방지하고 최신 웹 성능 최적화에 기여한다 [4, 5].
📖 Core Content
- 중첩 라우팅 및 레이아웃 아키텍처 (Nested Routing & Layouts): React Router는 부모 라우트 내에 자식 라우트를 정의하는 중첩 라우팅을 지원한다 [1, 6].
<Outlet />컴포넌트는 자식 라우트가 렌더링될 위치를 지정하는 플레이스홀더 역할을 하며, 사이드바나 헤더와 같이 변하지 않는 UI를 유지한 채 특정 부분만 URL에 따라 변경하는 복잡한 인터페이스를 구축할 수 있게 해준다 [1, 2, 7].index속성을 사용하면 부모 라우트와 정확히 일치할 때 표시될 기본 자식 컴포넌트를 설정할 수 있다 [1, 2, 8]. - Loaders와 Actions를 통한 데이터 관리: 과거 React 앱의 컴포넌트 렌더링 후 데이터를 페칭하면서 발생하는 워터폴(waterfall) 지연 문제를 해결하기 위해 도입된 기능이다 [4, 5]. Loaders는 라우트가 일치할 때 컴포넌트가 렌더링되기 전에 데이터를 병렬로 페칭하며,
useLoaderData()훅을 통해 렌더링 시 데이터를 즉시 사용할 수 있게 한다 [5, 9]. Actions는 폼 제출과 같은 데이터의 변이(mutation)를 라우트 레벨에서 처리하며 페이지 데이터를 자동으로 재검증한다 [5, 10]. - 상태 관리의 단순화 (State Management): React Router는 Redux나 TanStack Query 같은 기존의 상태 관리 라이브러리에 대한 의존도를 줄여준다 [11, 12]. 네트워크 관련 상태는
useNavigation,useFetcher,loaderData,actionData등을 통해 라우터가 내부적으로 직접 관리한다 [13]. 또한, UI 상태를 관리할 때 React state를 사용하는 대신 URL의 검색 매개변수(Search Params)나 브라우저 쿠키를 활용하여 상태 동기화 버그를 줄이고 단일 진실 공급원(Single Source of Truth)으로 사용하는 것을 권장한다 [13-15]. - 코드 분할 및 성능 최적화 (Code Splitting): 초기 로드 시간을 줄이고 프론트엔드 성능을 향상시키기 위해 자동 및 수동 코드 분할을 제공한다 [16]. 프레임워크 모드에서는 각 라우트 파일이 자체 청크로 기본 자동 분할된다 [16]. 수동으로는
React.lazy()와Suspense를 사용하여 무거운 UI 컴포넌트나 서드파티 라이브러리를 필요할 때 지연 로딩(Lazy Loading)할 수 있다 [17, 18]. - 고급 라우팅 및 제어 전략: 인증된 사용자만 접근할 수 있도록 조건부 렌더링을 적용하는 '보호된 라우트(Protected Routes)', 알 수 없는 경로를 처리하여 404 에러를 방지하는 '포괄(Catch-all) 라우트(
*)'를 구현할 수 있다 [19-21]. 아울러 저수준 API인dataStrategy를 통해 미들웨어나 커스텀 재검증 로직 등 액션과 로더의 실행 방식을 애플리케이션의 요구에 맞게 세밀하게 제어할 수 있다 [22, 23].
🔗 Knowledge Connections
- Related Topics: Code Splitting, Client-Side Rendering (CSR), Core Web Vitals, User Experience (UX)
- Projects/Contexts: Modern Website Architecture, Frontend Performance Optimization
- Contradictions/Notes: 소스에 따르면, 전통적인 React 상태 관리 패턴이나 캐싱 라이브러리(Redux, Apollo 등)를 React Router 프레임워크에서 그대로 사용하는 것은 불필요할 수 있으며, 오히려 React Router의 내장 데이터 동기화 효율성을 무시하는 안티패턴(anti-pattern)이 될 수 있다고 지적한다 [12, 13].
Last updated: 2026-04-26