[React Library] React Router์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

2024. 9. 23. 11:54ยทFront/React

 

๐Ÿ’ก React ๊ฐ•์˜๋ฅผ ๋ณด๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋˜ ๋„์ค‘ ๊ฐ•์˜์—์„œ React Router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด ์ •ํ™•์ด ์ดํ•ดํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด React Route์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ(React Router)์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ •๋ณด๋Š” ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๊ณ , ์ด ๊ธ€์€ ๊ณต์‹๋ฌธ์„œ์™€ ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

React Router๋Š” Client Side Routing์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

 

Client Side Routing์„ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ๋ฌธ์„œ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ ๋„ ๋งํฌ๋ฅผ ํด๋ฆญํ•จ์œผ๋กœ์จ URL์„ ์—…๋ฐ์ดํ„ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰์‹œ ์ƒˆ UI๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ณ  fetch๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค์Œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด HTML์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜CSS ๋ฐ JavaScript๋ฅผ ๋‹ค์‹œ ๋ฐ›์•„์˜ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ ์ž‘์—…์—์„œ ๋ณด๋‹ค ์—ญ๋™์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค.

 

Client Side Routing์€ ๋ผ์šฐํ„ฐ(Router)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , Link ์ปดํฌ๋„ŒํŠธ๋‚˜ <Form>์„ ์‚ฌ์šฉํ•ด ํŽ˜์ด์ง€ ๊ฐ„ ์ด๋™์„ ๊ตฌํ˜„ํ•œ๋‹ค

 

[์ถœ์ฒ˜] React Router ๊ณต์‹๋ฌธ์„œ

 

 

 

 

์—ฌ๊ธฐ์„œ ๋จผ์ € ๋ผ์šฐํŒ…(Routing)์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ž ๊น ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž

Routing์ด๋ž€

๋ผ์šฐํŒ…(Routing)์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠน์ • URL์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ํด๋ฆญํ–ˆ์„ ๋•Œ, ๊ทธ URL์— ํ•ด๋‹นํ•˜๋Š” ํŽ˜์ด์ง€๋‚˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ์–ด๋–ค URL์— ๋Œ€ํ•ด ์–ด๋–ค ํ™”๋ฉด์„ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •

 

์›น ๊ฐœ๋ฐœ์—์„œ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ๋ผ์šฐํŒ…์ด ์žˆ๋‹ค.

 

โœ”๏ธ Server-Side Routing

  • ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด URL๋กœ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๊ฐ€ ๊ทธ์— ๋งž๋Š” HTML ํŽ˜์ด์ง€๋ฅผ ๋ณด๋‚ด์ค€๋‹ค
  • ๋งค๋ฒˆ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋œ๋‹ค
  • ์˜ˆ: ์‚ฌ์šฉ์ž๊ฐ€ www.example.com/about์„ ์ž…๋ ฅํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ /about ํŽ˜์ด์ง€์— ๋งž๋Š” HTML์„ ๋ณด๋‚ด์ค€๋‹ค

 

โœ”๏ธ Client-Side Routing

  • ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ๋ฒˆ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ , ํ•œ ๋ฒˆ ๋ถˆ๋Ÿฌ์˜จ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํ™”๋ฉด์„ ๋™์ ์œผ๋กœ ์ „ํ™˜
  • ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋น ๋ฅด๊ฒŒ ์ฝ˜ํ…์ธ ๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์˜ˆ: React, Vue, Angular ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” react-router ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ผ์šฐํŒ…์„ ๊ตฌํ˜„

 

 

 

์ฆ‰, React Router๋Š” React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Client-Side Routing์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

 


 

React Router ์‚ฌ์šฉํ•˜๊ธฐ!

 

1. react-router ์„ค์น˜ํ•˜๊ธฐ

npm

# React Router ์„ค์น˜
npm install react-router-dom

# ์ตœ์‹  ๋ฒ„์ „์˜ React Router ์„ค์น˜
npm install react-router-dom@latest

 

yarn

# React Router ์„ค์น˜
yarn add react-router-dom

# ์ตœ์‹  ๋ฒ„์ „์˜ React Router ์„ค์น˜
yarn add react-router-dom@latest

 

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, package.json ํŒŒ์ผ์„ ์—ด์–ด react-router-dom ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์˜ˆ์‹œ)

"dependencies": {
  "react": "^18.2.0",
  "react-dom": "^18.2.0",
  "react-router-dom": "^6.x.x" // ์ตœ์‹  ๋ฒ„์ „์ด ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
}

 

 

2. React Router ๊ธฐ๋ณธ ์„ค์ •

๊ณต์‹๋ฌธ์„œ๋‚˜ ๋ธ”๋กœ๊ทธ์— ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ์„ค์ • ๋ฐฉ๋ฒ•์ด ๋‚˜์™€์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๋‚ด๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜ฌ๋ฆฌ๋ ค ํ•œ๋‹ค.

 

1. App.jsx๋ฅผ ๊ฐ์‹ธ๋Š” main.jsxํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

 

main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom';

import App from './App.jsx'

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>,
)

 

<App> ์ปดํฌ๋„ŒํŠธ๋ฅผ Reat.StrictMode์™€ BrowserRouter๋กœ ๊ฐ์‹ธ์ฃผ๋Š” main.jsx ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค์Œ

 

App.jsx

import ThemeProvider from "./theme/ThemeProvider.jsx";
import Router from "./routes/Router.jsx";

function App() {
  return (
    <ThemeProvider>
      <Router/>
    </ThemeProvider>
  )
}

export default App

 

<ThemeProvider>๋Š” ํ…Œ๋งˆ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด๋‘” Context์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๊ฒฝ์“ฐ์ง€ ๋ง๊ณ  App์ปดํฌ๋„ŒํŠธ์—๋Š” Router ์ปดํฌ๋„ŒํŠธ๋งŒ ๋‘๋ฉด ๋œ๋‹ค.

๐Ÿ‘‰๐Ÿป Context์— ๋Œ€ํ•ด ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด

 

 

2. routes ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— Router.jsx ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ

 

Router.jsx

import {useRoutes} from "react-router-dom";
import HomePage from "../pages/HomePage.jsx";
import MainLayout from "../layouts/MainLayout/index.jsx";
import StorePage from "../pages/StorePage.jsx";
import ReviewPage from "../pages/review/ReviewPage.jsx";

export default function Router() {
  return useRoutes([
    {
      path: '/',
      element: <MainLayout/>,
      children: [
        { index: true, element: <HomePage/> },
        { path: 'store', element: <StorePage />},
        { path: 'review', element: <ReviewPage />}
      ],
    },
  ])
}

 

<MainLayout/>

<HomePage/>

<StorePage/>

<ReviewPage/>

 

๋Š” ๋ชจ๋‘ ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด๋‘” ์ปดํฌ๋„ŒํŠธ๋“ค์ด๋ฉฐ ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์—ฌ๊ธฐ์„œ <MainLayout/> ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ผˆ๋Œ€ ์—ญํ• ์„ ํ•˜๋ฉฐ children์œผ๋กœ ์žˆ๋Š” ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€๋“ค๋งŒ ๋ณ€๊ฒฝ๋œ๋‹ค.

<HomePage/>๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์œผ๋กœ ๋ณด์—ฌ์ง€๋Š” ํŽ˜์ด์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— path๊ฐ€ ์•„๋‹Œ index ์†์„ฑ์„ ์ ์šฉํ•œ๋‹ค.

 

๊ทธ ์™ธ์˜ ๋‚˜๋จธ์ง€ ์ปดํฌ๋„ŒํŠธ๋“ค์—๋Š” path: 'store', path: 'review'์™€ ๊ฐ™์€ path ์†์„ฑ์ด ๋ถ™์–ด์žˆ๋Š”๋ฐ

์ด๋Š” url www.example/store ์™€ ๊ฐ™์ด url์— ๋”ฐ๋ฅธ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ์„ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

 

 

MainLayout.jsx

import Header from "./header";
import Sidebar from "./sidebar";
import {Outlet} from "react-router-dom";

export default function MainLayout(){

    return(
        <div>
            <Header/>
            <Sidebar/>
            <Outlet/>
        </div>
    )
}

 

 

์ด ๋•Œ, <HomePage/>์™€ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” <Outlet/>์„ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ

'Front > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] ์ด๋ฏธ์ง€ ๋ชฉ๋ก + ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„ Part 1  (7) 2024.10.11
[React] ์ƒํƒœ๊ด€๋ฆฌ :: Redux์™€ React Query | ์ฐจ์ด์  | ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ด์œ   (0) 2024.09.27
[React] Context๋ž€? | Context ์‚ฌ์šฉ๋ฐฉ๋ฒ•๊ณผ ์˜ˆ์‹œ  (1) 2024.09.07
React์™€ Next.js์˜ ์ฐจ์ด์™€ Next.js ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ  (0) 2024.01.22
[React] ๋™๊ธฐ / ๋น„๋™๊ธฐ ํ†ต์‹   (0) 2023.08.28
'Front/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [React] ์ด๋ฏธ์ง€ ๋ชฉ๋ก + ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„ Part 1
  • [React] ์ƒํƒœ๊ด€๋ฆฌ :: Redux์™€ React Query | ์ฐจ์ด์  | ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ด์œ 
  • [React] Context๋ž€? | Context ์‚ฌ์šฉ๋ฐฉ๋ฒ•๊ณผ ์˜ˆ์‹œ
  • React์™€ Next.js์˜ ์ฐจ์ด์™€ Next.js ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ
soyeon26
soyeon26
  • soyeon26
    ๊ฐœ๋ฐœ ์ผ์ง€
    soyeon26
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT ์ •๋ณด (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ธํ”„๋Ÿฐ
    sql๊ฐ•์˜
    ๊ณผํ•™๊ธฐ์ˆ ์ธ ๋“ฑ๋ก
    ์ค‘๋ณต์ œ๊ฑฐ
    SSR
    javascript
    java์˜ ์ •์„
    Spring
    ์„œ๋ธ”๋ฆฟ
    ๊ณผํ•™๊ธฐ์ˆ ์ธ๋“ฑ๋ก๋ฒˆํ˜ธ ์กฐํšŒ
    ๊ฐ•์˜ํ›„๊ธฐ
    React
    csrvsssr
    React Next.js
    csr๊ณผssr์˜ ์ฐจ์ด
    springboot
    SQL๊ฐ•์˜ ์ถ”์ฒœ
    Java
    ํ”„๋ก ํŠธ์—”๋“œ
    ์Šคํ”„๋ง๋ถ€ํŠธ
    ๊ณผํ•™๊ธฐ์ˆ ์ธ ๋“ฑ๋ก๋ฒˆํ˜ธ ๋ฐœ๊ธ‰
    ๋ฐฑ์—”๋“œ
    Next.js
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ•์˜
    Next.js ํ•„์š”์„ฑ
    ๊ฐ•์˜ ํ›„๊ธฐ
    ๊ณผํ•™๊ธฐ์ˆ ์ธ๋ฒˆํ˜ธ ์กฐํšŒ
    ๊ณผํ•™๊ธฐ์ˆ ์ธ ๋ฒˆํ˜ธ ๋ฐœ๊ธ‰
    ๊น€์˜ํ•œ
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธset
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
soyeon26
[React Library] React Router์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”