React Router를 활용하면 단일 페이지 애플리케이션(SPA)에서 복잡한 페이지 구조를 효율적으로 구성할 수 있습니다. 특히, 중첩 라우트(Nested Routes)와 공통 레이아웃 구성은 애플리케이션의 유지보수성과 확장성을 크게 향상시킵니다.
이번 포스팅에서는 REACT 중첩 라우트의 기본 개념부터 Outlet 컴포넌트를 활용한 하위 라우트 렌더링, 그리고 실제 프로젝트에서 적용할 수 있는 모범 사례까지 자세히 살펴보겠습니다.
REACT 중첩 라우팅은 부모-자식 관계의 라우트를 정의하여, 공통된 레이아웃이나 UI 요소를 공유하면서도 개별 페이지마다 다른 콘텐츠를 렌더링할 수 있도록 하는 기술입니다. 예를 들어, 대시보드, 사용자 프로필, 설정 페이지 등 여러 페이지가 공통 네비게이션 바나 사이드바를 공유하는 경우, 부모 라우트에서 공통 레이아웃을 구성하고 자식 라우트를 Outlet 컴포넌트를 통해 렌더링하면, 코드의 중복을 줄이고 구조를 명확하게 유지할 수 있습니다.
중첩 라우팅의 주요 장점은 다음과 같습니다.
복잡한 애플리케이션에서는 여러 페이지가 동일한 헤더, 사이드바, 푸터 등을 공유하는 경우가 많습니다. 이때 공통 레이아웃 컴포넌트를 따로 구성하고, 중첩 라우트를 활용해 각 페이지의 콘텐츠만 동적으로 교체하는 방식이 효율적입니다.
예를 들어, 아래와 같이 공통 레이아웃 컴포넌트를 구성할 수 있습니다.
// Layout.js
import React from 'react';
import { Outlet, Link } from 'react-router-dom';
const Layout = () => {
return (
<div>
<header style={{ padding: '10px', backgroundColor: '#f8f8f8' }}>
<h1>My Application</h1>
<nav>
<Link to="/">홈</Link> |{' '}
<Link to="/dashboard">대시보드</Link> |{' '}
<Link to="/profile">프로필</Link>
</nav>
</header>
<main style={{ margin: '20px' }}>
{/* Outlet 컴포넌트를 통해 자식 라우트를 렌더링 */}
<Outlet />
</main>
<footer style={{ padding: '10px', backgroundColor: '#f0f0f0' }}>
<p>© 2025 My Application. All rights reserved.</p>
</footer>
</div>
);
};
export default Layout;
위 컴포넌트에서는 헤더, 메인, 푸터를 정의하고, Outlet
을 배치하여 자식 라우트의 콘텐츠가 해당 영역에 렌더링되도록 구성합니다. 이를 통해 전체 애플리케이션의 공통 레이아웃을 한 번에 관리할 수 있습니다.
React Router v6에서는 중첩 라우팅을 구성할 때 Outlet
컴포넌트가 필수적입니다. Outlet
은 부모 라우트 컴포넌트 내에서 자식 라우트가 렌더링될 위치를 지정하는 역할을 합니다.
예를 들어, 다음과 같이 대시보드 내에서 여러 자식 페이지(예: 프로필, 설정 등)를 렌더링할 수 있습니다.
// Dashboard.js
import React from 'react';
import { Outlet, Link } from 'react-router-dom';
const Dashboard = () => {
return (
<div>
<h2>대시보드</h2>
<nav>
<Link to="profile">프로필</Link> |{' '}
<Link to="settings">설정</Link>
</nav>
{/* 하위 라우트를 렌더링할 영역 */}
<Outlet />
</div>
);
};
export default Dashboard;
이렇게 구성하면, URL이 /dashboard/profile
인 경우 Dashboard 컴포넌트의 Outlet
영역에 프로필 페이지가 렌더링되며, /dashboard/settings
의 경우 설정 페이지가 나타납니다.
이제 공통 레이아웃과 중첩 라우팅을 결합한 전체 라우트 구성을 예제로 살펴보겠습니다. 아래는 App.js에서 중첩 라우트를 정의하는 방법입니다.
// App.js
import React from 'react';
import { Routes, Route } from 'react-router-dom';
import Layout from './Layout';
import Home from './Home';
import Dashboard from './Dashboard';
import Profile from './Profile';
import Settings from './Settings';
import NotFound from './NotFound';
const App = () => {
return (
<Routes>
{/* 공통 레이아웃을 사용하는 최상위 라우트 */}
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="dashboard" element={<Dashboard />}>
<Route path="profile" element={<Profile />} />
<Route path="settings" element={<Settings />} />
</Route>
{/* 일치하는 라우트가 없는 경우 404 페이지 */}
<Route path="*" element={<NotFound />} />
</Route>
</Routes>
);
};
export default App;
위 구성에서는 최상위 라우트에 Layout
컴포넌트를 배치하여 모든 페이지에 공통 레이아웃을 적용합니다. Home 컴포넌트는 기본 경로에, Dashboard는 대시보드 하위 라우트로 구성되며, Dashboard 내부에는 Profile과 Settings라는 중첩 라우트가 포함됩니다. 또한, 존재하지 않는 경로에 대해서는 NotFound 컴포넌트를 렌더링하여 404 처리를 수행합니다.
효율적인 중첩 라우팅과 레이아웃 구성을 위해 몇 가지 모범 사례를 고려할 수 있습니다.
중첩 라우팅과 공통 레이아웃 구성은 복잡한 SPA를 효율적으로 관리하고 사용자 경험을 극대화하는 데 매우 중요한 기술입니다. React Router의 Nested Routes와 Outlet 컴포넌트를 활용하면, 공통 UI 요소를 공유하면서도 동적으로 변화하는 콘텐츠를 유연하게 렌더링할 수 있습니다. 이번 포스팅에서는 공통 레이아웃 구성, Outlet을 통한 하위 라우트 렌더링, 그리고 중첩 라우팅의 모범 사례를 소개하며, 실제 프로젝트에서 이를 어떻게 적용할 수 있는지에 대해 살펴보았습니다.
효율적인 중첩 라우팅 전략을 통해 개발자는 코드의 재사용성과 유지보수성을 높이고, 사용자에게 일관되고 원활한 내비게이션 경험을 제공할 수 있습니다. React Router v6의 최신 기능들을 적극 활용하여, 복잡한 페이지 구조도 간단하게 구성해 보시길 바랍니다.
DeepSeek-R1: 강화학습으로 스스로 진화하는 추론 특화 언어모델 DeepSeek-R1은 순수 강화학습(RL)과 소량의 Cold-start 데이터를 결합한 다단계…
TensorFlow Extended(TFX): 프로덕션 레벨의 E2E 기계학습 파이프라인 플랫폼 TensorFlow Extended(TFX)는 구글에서 자체 머신러닝 제품을 안정적으로…
AutoML-Zero: ‘zero’에서부터 스스로 진화하는 기계학습 알고리즘 기계학습 알고리즘 설계의 혁신, AutoML-Zero 단 몇 줄의 코드도…
TensorFlow Lite: 모바일 & IoT 디바이스를 위한 딥러닝 프레임워크 엣지 인텔리전스를 향한 경량화된 딥러닝 TensorFlow…
Graph Convolutional Networks(GCN) 개념 정리 최근 비정형 데이터의 대표격인 그래프(graph)를 처리하기 위한 딥러닝 기법으로 Graph…
Graph Neural Networks(그래프 뉴럴 네트워크) 기초 개념 정리 딥러닝은 이미지·음성·텍스트와 같은 격자(grid) 형태 데이터에서 뛰어난…