🌳 React

[React] BrowserRouter와 createBrowserRouter의 특징과 코드작성차이

hyeong._.ing 2026. 4. 22. 17:22

 

 

프로젝트 이후 코드를 공부하다가
createBrowserRouter에 대해 알게되었다.
두 방식에 어떤 차이점이 있는지 살펴보자.

 

 

 

 

1. <BrowserRouter> _ 컴포넌트 기반 라우팅

  • 앱이 주소창의 변화를 감지하고 그에 맞는 화면을 보여줄 수 있게 해준다.
  • 과거에는 HashRouter를 사용해서 "http://localhost:3000/#/admin/customers"로 나타났다.
  • BrowserRouter를 사용하면, "http://localhost:3000/admin/customers"로 나타난다.
  • BrowserRouter는 HTML5History API를 사용해서, 깔끔한 주소를 가지도록 해준다.
  • 끊김 없는 부드러운 화면 전환을 제공한다.

 

 


 

 

 

 

 

2. createBrowserRouter_ 객체 기반 선언적 라우팅

  • React Router v6.4에서 새롭게 도입된 라우터 설정 방식이다.
  • 데이터를 미리 불러오거나 에러 처리를 하는 기능 등을 함께 지원한다.
  • loader를 사용해 라우트 전환 시 데이터 미리 로드가 가능하다.
  • errorElement로 에러 처리가 가능하다.

 

 


 

 

 

 

3. 코드로 보는 차이점

  • BrowserRouter 방식
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import Admin from './pages/Admin';
import ProtectedRoute from './components/ProtectedRoute';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        {/* 일반 페이지 */}
        <Route path="/" element={<Home />} />

        {/* 보안 페이지: ProtectedRoute로 감쌈 */}
        <Route 
          path="/admin" 
          element={
            <ProtectedRoute requiredRole="SUPER_ADMIN">
              <Admin />
            </ProtectedRoute>
          } 
        />
      </Routes>
    </BrowserRouter>
  );
}

export default App;
<Router>, JSX 태그 중심이며 컴포넌트가 렌더링 된 후 데이터를 가져온다.  별도의 에러 경계 컴포넌트가 필요하다. 주로 try-catch 혹은 ErrorBoundary를 사용한다. 

 

 

  • createBrowserRouter 방식
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import Home from './pages/Home';
import Admin from './pages/Admin';
import ProtectedRoute from './components/ProtectedRoute';

// 1. 라우터 설정을 객체 형태로 미리 정의한다.
const router = createBrowserRouter([
  {
    path: "/",
    element: <Home />,
  },
  {
    path: "/admin",
    element: (
      <ProtectedRoute requiredRole="SUPER_ADMIN">
        <Admin />
      </ProtectedRoute>
    ),
    // loader: adminDataLoader, // 페이지를 그리기 전에 데이터를 미리 가져오는 기능(Data API)
    // errorElement: <ErrorPage />, // 이 경로에서 에러 발생 시 보여줄 화면
  },
]);

// 2. App 컴포넌트에서는 RouterProvider만 넘긴다.
function App() {
  return <RouterProvider router={router} />;
}

export default App;
{path: ...}, 자바스크립트 객체 중심이다. loader를 사용하여 페이지 렌더링 전에 데이터를 준비할 수 있다. 이 경우, 페이지를 그리기 전부터 데이터를 가져오니 사용자는 훨신 빠르다고 느낄 수 있다. 그리고 errorElement 설정을 통해 경로별로 에러 처리가 가능하다. 폼 데이터를 서버에 보내고 상태를 업데이트하는 과정을 아주 깔끔하게 처리할 수 있다. 아무래도 규모가 큰 대형 프로젝트는 데이터 로딩 최적화와 체계적인 에러 관리가 필요해서 이 방법을 실무에서 쓴다.

 

 

 


 

 

- BrowserRouter vs createBrowserRouter

 

[react-router-dom] createBrowserRouter 활용하여 더 깔끔하게 라우트를 구성해보자!

안녕하세요!Justee에 오신 걸 환영합니다.오늘은 'createBrowserRouter 활용하여 더 깔끔하게 라우트를 구성해보자!'에 대해 이야기해 볼게요.목차createBrowserRouter란 무엇인가?BrowserRouter와 createBrowserRou

justee.tistory.com