react-router-dom 을 매번 사용하고 있지만 동작구조와 최적화의 연계를 생각해본적이 없습니다. 실제로 window history를 어떻게 이용하는지 차이는 무엇이 있는지 고민해본적이 없었습니다. 따라서 react-router-dom 의 이점과 필요성에 대해 공부해보도록 하겠습니다!

React Router DOM은 React 애플리케이션에서 클라이언트 사이드 라우팅을 구현하기 위한 라이브러리입니다. 이를 통해 SPA(Single Page Application)에서 URL을 기반으로 컴포넌트를 렌더링하고, 페이지 전환 없이 동적인 사용자 경험을 제공합니다.
☑️ 쉽게 생각하면 React Router DOM은 URL을 상태화(stateful)하여, SPA(Single Page Application)에서 페이지 전환 없이 애플리케이션의 경로(Route)에 따라 컴포넌트를 동적으로 렌더링할 수 있도록 해주는 라이브러리입니다.
이를 통해 URL이 변경될 때 브라우저의 기본 새로고침 동작 없이도 사용자가 마치 페이지가 전환된 것처럼 느껴지도록 해준다.
URL 경로, 쿼리 파라미터, 패스 파라미터 등을 상태처럼 관리하며, 브라우저 히스토리와 동기화하여 사용자가 “페이지 전환”처럼 느낄 수 있는 사용자 경험을 이끌어 낼 수 있게 해주는 것 !
☑️ React Router DOM의 필요성은 주로 SPA(Single Page Application) 구조에서의 효율적이고 사용자 친화적인 네비게이션을 가능하게 하는 데 있습니다.
React Router DOM이 없다면 URL 관리와 페이지 전환의 복잡성을 직접 처리해야 하므로 개발 생산성과 사용자 경험 모두 크게 저하될 수 있습니다.
리액트 이전의 웹에서는 주로 태그를 사용하여 페이지 이동을 구현했습니다.
그러나 태그를 사용하면 페이지 이동 시마다 전체 페이지가 새로고침(리로드)되는 단점이 있었습니다.
이 문제를 해결하기 위해 리액트는 Virtual DOM과 함께 react-router-dom을 사용하여 페이지 리로드 없이도 동적으로 라우팅을 처리할 수 있게 했습니다.
React Router DOM의 장점
지금까지 정의 필요성 장점에 대해서 알아 보았으니 간단한 예시와 함께 사용 해보도록 하겠습니다.
// App.js
import React from "react";
import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";
// 간단한 컴포넌트 정의
const Home = () => <h1>홈 페이지</h1>;
const About = () => <h1>소개 페이지</h1>;
const Profile = ({ userId }) => <h1>사용자 프로필: {userId}</h1>;
const App = () => {
return (
<Router>
<nav>
{/* 네비게이션 링크 */}
<Link to="/">홈</Link> | <Link to="/about">소개</Link> | <Link to="/profile/123">프로필</Link>
</nav>
<Routes>
{/* Route로 경로와 컴포넌트를 매핑 */}
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/profile/:userId" element={<ProfileWithParams />} />
</Routes>
</Router>
);
};
// 동적 파라미터 처리
const ProfileWithParams = () => {
const { userId } = useParams(); // userId 추출
return <h1>사용자 프로필: {userId}</h1>;
};
export default App;
react-router-dom 은 path 를 사용해서 컴포넌트를 선택적으로 렌더링 해줍니다 state를 통해서 컨디셔널 렌더링을 해주는것을 url로 최적화 했습니다.
특징에 따라서 나눠서 조금더 함수들을 공부해보겠습니다
• React Router DOM을 사용하면서 브라우저의 window.history와의 차이점에 대해 깊이 고려하지 못했던 것 같습니다.
• 단순히 페이지별 구분을 위한 컴포넌트의 선택적 렌더링 도구로만 생각했었는데, 파라미터를 최적화함으로써 렌더링 성능을 향상시키는 목적도 있다는 점을 새롭게 알게 되었습니다.
• 또한, 생각보다 많은 React Router DOM의 함수와 기능들을 학습하며 그 활용 가능성을 더욱 잘 이해하게 되었습니다.