ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

React Router


1. 중첩 라우트(Nested Routes)란?

  • 중첩 라우트는 특정 경로(path)가 다른 라우트의 부모 경로일 때 사용됩니다.
  • 부모 라우트의 공통 레이아웃을 렌더링하면서, 하위 라우트가 부모의 특정 영역에 렌더링됩니다.

2. 코드 분석

(1) 부모 라우트

jsx
코드 복사
<Route path="/" element={<Layout />}>
  • path="/": 루트 경로(/)에 해당합니다.
  • element={<Layout />}: 이 경로가 활성화되면, Layout 컴포넌트를 렌더링합니다.
  • Layout 컴포넌트 내부에는 중첩된 라우트를 렌더링하기 위해 **<Outlet />**이 필요합니다.

(2) 하위 라우트

jsx
코드 복사
<Route index element={<Main />} />
  • index: 부모 라우트(/)의 기본 라우트로 동작합니다.
    • URL이 정확히 /일 때만 렌더링됩니다.
  • element={<Main />}: 기본 라우트의 컴포넌트로 **Main**을 렌더링합니다.

3. 작동 방식

(1) Layout 컴포넌트

  • 부모 라우트의 공통 컴포넌트 역할을 합니다.
  • Layout 내부에 **<Outlet />**이 있어야, 하위 라우트가 해당 위치에 렌더링됩니다.
jsx
코드 복사
import React from "react"; import { Outlet } from "react-router-dom"; function Layout() { return ( <div> <header>공통 헤더</header> <main> {/* 하위 라우트가 렌더링될 위치 */} <Outlet /> </main> <footer>공통 푸터</footer> </div> ); } export default Layout;

(2) URL 매칭

  • /: Layout이 렌더링되고, Main이 Layout의 <Outlet /> 위치에 렌더링됩니다.
  • /other: 추가적인 하위 라우트를 정의하면 다른 컴포넌트를 렌더링할 수 있습니다.

4. 전체 예제 코드

App.js

jsx
코드 복사
import React from "react"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import Layout from "./components/layout/Layout"; import Main from "./components/main/Main"; import About from "./components/about/About"; function App() { return ( <BrowserRouter> <Routes> <Route path="/" element={<Layout />}> <Route index element={<Main />} /> {/* 기본 페이지 */} <Route path="about" element={<About />} /> {/* /about 페이지 */} </Route> </Routes> </BrowserRouter> ); } export default App;

Layout.js

jsx
코드 복사
import React from "react"; import { Outlet } from "react-router-dom"; function Layout() { return ( <div> <header>공통 헤더</header> <main> <Outlet /> {/* 하위 라우트 컴포넌트가 렌더링될 위치 */} </main> <footer>공통 푸터</footer> </div> ); } export default Layout;

Main.js

jsx
코드 복사
import React from "react"; function Main() { return <div>메인 페이지</div>; } export default Main;

About.js

jsx
코드 복사
import React from "react"; function About() { return <div>About 페이지</div>; } export default About;

5. 동작 설명

  1. / (루트 URL)
    • Layout이 렌더링됩니다.
    • Main 컴포넌트가 Layout의 <Outlet /> 위치에 렌더링됩니다.
  2. /about
    • Layout이 렌더링됩니다.
    • About 컴포넌트가 Layout의 <Outlet /> 위치에 렌더링됩니다.

6. 주의사항

  • Layout 컴포넌트에 반드시 **<Outlet />**을 포함해야 중첩 라우트가 렌더링됩니다.
  • index는 부모 경로의 기본 컴포넌트를 지정할 때 사용합니다.
  • 추가 라우트가 필요하다면 path 속성을 사용해 정의합니다.

 

728x90