2. Routes

Keyword

  • ๋ผ์šฐํ„ฐ๋ž€?

  • React Router

    • Browser Router

    • Route

    • Memory Router

1. ๋ผ์šฐํ„ฐ๋ž€?

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL ๊ฒฝ๋กœ์˜ ํŽ˜์ด์ง€๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งํ•œ๋‹ค.

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŽ˜์ด์ง€ ๋˜๋Š” View๊ฐ„์˜ ์ „ํ™˜ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.


2. React Router

  • ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Clinet Side Routing์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.

Clinet Side Routing

  • ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ดํ›„์—๋Š” ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•  ํ•„์š”๊ฐ€ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด Javascript๋ฅผ ํ†ตํ•ด ์ปจํ…์ธ ๋ฅผ ๋™์ ์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค.

  • ๋น ๋ฅด๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ํŽ˜์ด์ง€ ์ „ํ™˜์„ ์ œ๊ณตํ•œ๋‹ค.

  • ๋‹ค๋งŒ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ๋‹ค.

  • JS๋ฅผ ์ด์šฉํ•ด ์ปจํ…์ธ ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— SEO ์ตœ์ ํ™” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

VS SSR(Server Side Routing)

  • ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•  ๋•Œ ๋งˆ๋‹ค ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•œ ํ›„ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•œ๋‹ค.

  • ํŽ˜์ด์ง€ ์ „ํ™˜๋งˆ๋‹ค HTML ๋ฌธ์„œ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋”ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ๊ฐ ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— SEO ์ตœ์ ํ™”์— ์šฉ์ดํ•˜๋‹ค.

2.1 Browser Router

  • ๋ธŒ๋ผ์šฐ์ €์˜ history API์„ ์‚ฌ์šฉํ•˜์—ฌ URL ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ๊ด€๋ฆฌํ•œ๋‹ค.

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

root.render((
  <BrowserRouter>
    <App />
  </BrowserRouter>
));

2.2 Route

  • URL ๊ฒฝ๋กœ์— ๋”ฐ๋ผ Route ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

function App() {
  return (
    <div>
      <Header />
      <main>
        <Routes>
          <Route path="/" element={<HomePage />} />
          <Route path="/about" element={<AboutPage />} />
        </Routes>
      </main>
      <Footer />
    </div>
  );
}

2.3 Memory Router

  • ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์˜ URL์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ , ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ผ์šฐํŒ…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ชจ๋ฐ”์ผ ์•ฑ์—์„œ ๋ธŒ๋ผ์šฐ์ € URL์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ผ์šฐํŒ…์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • initialEntries ์†์„ฑ์€ Memory Router๊ฐ€ ์ดˆ๊ธฐํ™” ๋  ๋•Œ ๋ผ์šฐํŒ…์— ์‚ฌ์šฉ๋  ๊ฒฝ๋กœ ๋ฐฐ์—ด์„ ์ง€์ •ํ•œ๋‹ค.

describe('App', () => {
  function renderApp(path: string) {
    render((
      <MemoryRouter initialEntries={[path]}>
        <App />
      </MemoryRouter>
    ));
  }

  context('when the current path is โ€œ/โ€', () => {
    it('renders the home page', () => {
      renderApp('/');

      screen.getByText(/Hello/);
    });
  });

  context('when the current path is โ€œ/aboutโ€', () => {
    it('renders the about page', () => {
      renderApp('/about');

      screen.getByText(/About/);
    });
  });
});

์ถ”๊ฐ€ ํ‚ค์›Œ๋“œ

Routes

  • Routes ์ปดํฌ๋„ŒํŠธ๋Š” ์—ฌ๋Ÿฌ Route๋ฅผ ๊ฐ์‹ธ์„œ ๊ทธ ์ค‘ ๊ทœ์น™์ด ์ผ์น˜ํ•˜๋Š” ๋ผ์šฐํŠธ ๋‹จ ํ•˜๋‚˜๋งŒ์„ ๋ Œ๋”๋ง ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

Last updated