2. Routes
Last updated
Last updated
๋ผ์ฐํฐ๋ ๋คํธ์ํฌ ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฅ์น ๋ณดํต ๋ ์ด์์ ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋จ ๋ฐ์ดํฐ(ํจํท)๋ฅผ ๋ชฉ์ ์ง๋ก ๋ณด๋ผ ๋ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ฒฝ๋ก๊ฐ ๊ฒฐ์ ๋๋ฉด ํด๋น ๊ฒฝ๋ก๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๋ ์ผ(๋ผ์ฐํ )์ ์ํ ๋ผ์ฐํฐ๋ ๋ผ์ฐํ ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ชฉ์ ์ง์๊ฒ ์ ๋ฌ
React Router Client Side Routing
Context API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : ์ปดํฌ๋ํธ๋ค์๊ฒ ๋์ผํ context(๋งฅ๋ฝ)๋ฅผ ์ ๋ฌํ๊ณ , ํ ๋ฒ์ ๊ฐ์ ๋ฐ์์์ ์ฌ์ฉ
์ฑ๊ธํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์งํ๋ฉด์, url์ ๋ถ์ผ ์ ์์
ํด๋น ํ์ด์ง๋ก ์ด๋
๋ถ๋งํฌ ์ถ๊ฐ
๋ค๋น๊ฒ์ด์ ์ถ๊ฐ
์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
ํ๋์ url๋ก ํ ๋ฒ ํ์ด์ง๊ฐ ๋ก๋ฉ๋๋ฉด ๊ทธ ์์์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ํด๋ฆญํ์ ๋, โ ์๋ก์ด ํ์ด์ง๊ฐ ์ด๋ฆฌ๋ ๊ฒ์ด ์๋(์ ์ฒด์ ์ธ ํ์ด์ง ์๋ก๊ณ ์นจ x), โ ๋ถ๋ถ์ ์ธ ๋ด์ฉ๋ง ์ ๋ฐ์ดํธ(ํด๋น ์ปดํฌ๋ํธ๋ง ๋ณ๊ฒฝ) โ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ๋ฐ์์์ ๋์ ์ผ๋ก ๋ณผ ์ ์๋๋ก ์ฒ๋ฆฌ
MPA (Multiple Page Application) : ์๋ก๊ณ ์นจ๋๋ฉฐ ํ์ด์ง๋ฅผ ์ด๋์ํค๋ ๋ฐฉ์. html ๋ฌธ์, ๋ฐ์ดํฐ ๋ฑ์ ๋ฐ์ ์กฐ๋ฆฝํด์ผ ํจ
CSR (Client Side Rendering) : ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ด์ง ๋ ๋๋ง
๋ฌธ์ ์ : ํ๋ฉด ๋ถ๋งํฌ ๋ถ๊ฐ, ๋ค๋ก๊ฐ๊ธฐ/์์ผ๋ก๊ฐ๊ธฐ ๋ฑ์ ๋ค๋น๊ฒ์ด์ ์ ํฌํจ๋์ง ์์
๐ ์ค์ต ๋งํฌ : React Router ์ค์น ๋ฐ ์ ์ฉ, App ํ ์คํธ ์ฝ๋ ์์ฑ
์ฑ์ ์ด๋์์๋ ๋ ๋๋ง๋๋ฉฐ <Routes>
๋ ํ์ฌ ์์น์ ํ์ ๊ฒฝ๋ก ์งํฉ๊ณผ ์ผ์นํจ
์์น๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค <Routes>
๋ ๋ชจ๋ ์์ ๊ฒฝ๋ก๋ฅผ ์ดํด๋ณด๊ณ ๊ฐ์ฅ ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ์ ํด๋น UI ๋ถ๊ธฐ๋ฅผ ๋ ๋๋ง
<Route>
์์๋ ์ค์ฒฉ๋ URL ๊ฒฝ๋ก์ ํด๋นํ๋ ์ค์ฒฉ๋ UI๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ค์ฒฉ๋ ์ ์์
Route๋ React Router ์ฑ์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ URL ์ธ๊ทธ๋จผํธ๋ฅผ ๊ตฌ์ฑ ์์, ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ๋ฐ์ดํฐ ๋ณํ์ ์ฐ๊ฒฐ ๊ฒฝ๋ก ์ค์ฒฉ์ ํตํด ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์์๊ณผ ๋ฐ์ดํฐ ์ข ์์ฑ์ด ๋จ์ํด์ง๊ณ ์ ์ธ์ ์ด ๋จ
Route๊ฐ URL, link href, form action๊ณผ ์ผ์นํ๋์ง ํ์ธํ๊ธฐ ์ํด URL๊ณผ ์ผ์น์ํฌ ๊ฒฝ๋ก ํจํด
Route๊ฐ URL๊ณผ ์ผ์นํ ๋ ๋ ๋๋งํ React ์์/๊ตฌ์ฑ ์์
๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ clean URL์ ์ฌ์ฉํด ํ์ฌ ์์น๋ฅผ ์ ์ฅํ๊ณ , ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ ๊ธฐ๋ก ์คํ์ ์ฌ์ฉํ์ฌ ํ์
๐จ Browser Router๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋ ์๋ฌ ๋ฉ์์ง
Uncaught Error: useRoutes() may be used only in the context of a
<Router>
component.
<BrowserRouter window>
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ๋ฌธ์์ defaultView๋ฅผ ์ฌ์ฉ
๋ค๋ฅธ ์ฐฝ์ URL์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์๋ ์์ (Ex. <iframe>
)
โ๏ธ ์กฐ๊ฐ๊ธ
๐ [ํธ๋ฌ๋ธ ์ํ ] react router v6 ์ค๋ฅ ํด๊ฒฐ ๐ TIL : react router v6 ์ค๋ฅ ํด๊ฒฐ
์์ ์ ํธ๋ฌ๋ธ ์ํ ๊ธ์ ์ ์ด๋ ๋ด์ฉ๊ณผ ๋์ผํ ์ด์๊ฐ ๊ฐ์์์ ๋ฑ์ฅํ๋ค. ์ด์ ๋ณด๋ ์ ๊ธ ์ ๋ชฉ๋ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์์ผ๋ฉด ์ข์์ผ๋ จ๋ง, ๋น์์๋ ์ ํํ ์ด๋ค ์นดํ ๊ณ ๋ฆฌ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๋ชฐ๋ผ์ 'react router v6 ์ค๋ฅ' ๋ผ๊ณ ํด๋์๋ค. ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์๋ ์ด๋ค ํํธ๊ฐ ๋ฌธ์ ์๋์ง ์๊ฒ ๋์ด ๋ช ์พํด์ง ๋๋์ด๋ค. ๋๋ถ์ด ํ ์คํธ ์ฝ๋์์๋ Memory Router๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ๊น์ง ์๊ฒ ๋์๋ค. ์ด ๋ด์ฉ์ ๋ชฐ๋๋ค๋ฉด, ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ ๋๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์์ ๊ฒ์ด๊ณ ๋ ๋ฒ์ด๋ ํธ๋ฌ๋ธ ์ํ ์ ํ ๋ป ํ๋ค.
โ ๏ธ ํ ์คํธ ํ๊ฒฝ์์๋ Browser Router๋ฅผ ์ฌ์ฉํ๋ฉด ์คํจ ๐ก ๋ธ๋ผ์ฐ์ ์๋ Window๊ฐ ์์ง๋ง, ํ ์คํธ ํ๊ฒฝ์์๋ Memory Router ์ฌ์ฉ
<MemoryRouter>
๋ ๋ฐฐ์ด์ ๋ด๋ถ์ ์ผ๋ก ์์น๋ฅผ ์ ์ฅํจ
<BrowserHistory>, <HashHistory>
์ ๋ฌ๋ฆฌ, ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ก ์คํ๊ณผ ๊ฐ์ ์ธ๋ถ ์์ค์ ์ฎ์ด์ง ์์
โ ํ
์คํธ๊ฐ์ด ๊ธฐ๋ก ์คํ์ ์๋ฒฝํ๊ฒ ์ ์ดํด์ผ ํ๋ ์๋๋ฆฌ์ค์ ์ด์์
initialEntries : ๊ธฐ๋ณธ๊ฐ์ ["/"] (root '/' URL์ ๋จ์ผ ํญ๋ชฉ)
initialIndex : ๊ธฐ๋ณธ๊ฐ์ initialEntries์ ๋ง์ง๋ง index
๋๋ถ๋ถ์ React Router ํ
์คํธ๋ ์ง์ค์ ์ถ์ฒ๋ก <MemoryRouter>
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋์๊ธฐ ๋๋ฌธ์
ํ
์คํธ๋ฅผ ์ดํด๋ณด๊ธฐ๋ง ํด๋ ์ด๋ฅผ ์ฌ์ฉํ๋ ์ข์ ์๋ฅผ ๋ณผ ์ ์์