Published on

10단계: React 라우팅

10-1. SPA와 라우팅 개념

React는 기본적으로 SPA(Single Page Application) 구조이며, 페이지 이동을 JavaScript로 처리합니다. 이를 위해 react-router-dom 라이브러리를 사용합니다.


10-2. 설치 및 기본 설정

npm install react-router-dom
import { BrowserRouter, Routes, Route } from 'react-router-dom';

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/about" element={<About />} />
  </Routes>
</BrowserRouter>

페이지 이동 시 <a> 태그 대신 Link 컴포넌트를 사용합니다.

import { Link } from 'react-router-dom';

<Link to="/about">소개</Link>

10-4. 동적 라우팅과 URL 파라미터

<Route path="/user/:id" element={<User />} />

컴포넌트 내부에서 파라미터 사용:

import { useParams } from 'react-router-dom';
const { id } = useParams();

10-5. 중첩 라우팅 구조

<Route path="/dashboard" element={<Dashboard />}>
  <Route path="analytics" element={<Analytics />} />
</Route>

중첩된 컴포넌트 내부에서 Outlet으로 자식 라우트를 렌더링합니다.

import { Outlet } from 'react-router-dom';
<Outlet />

10-6. Navigate와 페이지 리다이렉트

import { Navigate } from 'react-router-dom';

<Route path="/login" element={isLoggedIn ? <Navigate to="/" /> : <Login />} />

또는 코드 내부에서 useNavigate 사용:

const navigate = useNavigate();
navigate("/home");

10-7. Not Found 페이지 처리

<Route path="*" element={<NotFound />} />

잘못된 경로 접근 시 fallback 페이지를 보여줍니다.


요약

  • react-router-dom으로 SPA에서 페이지 전환 구현
  • Link로 이동, useParams로 파라미터 추출
  • 중첩 라우팅, 리다이렉트, NotFound 처리까지 가능
  • 구성 구조가 명확하면 유지보수 및 확장에 유리함

심화학습

Q1. BrowserRouter 대신 HashRouter를 쓰는 경우는?
A1. 서버에서 SPA 라우팅을 지원하지 않거나, 정적 파일 서버에서 404가 뜨는 경우 HashRouter로 fallback 구조를 사용할 수 있습니다.


Q2. 중첩 라우팅의 장점은 무엇인가요?
A2. 복잡한 레이아웃 구조를 유지한 채 내부 콘텐츠만 교체 가능해 컴포넌트 구조를 깔끔하게 유지할 수 있습니다.


Q3. 라우트 보호를 위한 인증 체크는 어떻게 구현하나요?
A3. Route에 조건부 렌더링을 넣거나, ProtectedRoute 컴포넌트를 따로 만들어 로그인 여부에 따라 접근을 제한할 수 있습니다.