์ค๋ ์์๋ณผ ๊ฒ์ react-router-dom์ HashRouter๊ณผ BrowserRouter์ด๋ค.
React router์๋ ๋ง์ ๋ผ์ฐํฐ๊ฐ ์์ง๋ง ์ค๋์ ๋ ๊ฐ์ง Router์ ๋ํด์ ๋น๊ตํด๋ณผ ๊ฒ์ด๋ค.
๊ฒ๋ค๊ฐ ์ค๋์ ์ฝ๋๋ณด๋ค๋ ์ข ๋ ๊น์ ์ด๋ก ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ ์์๋ณด๋๋ก ํ์.
๋ฆฌ์กํธ ๋ผ์ฐํ ์ ๊ดํด์๋
- ๋ฆฌ์กํธ๊ฐ ํ์ด์ง๋ฅผ ๋ผ์ฐํ ํ๋ ๋ฐฉ๋ฒ(1)
- ๋ฆฌ์กํธ๊ฐ ํ์ด์ง๋ฅผ ๋ผ์ฐํ ํ๋ ๋ฐฉ๋ฒ(2)
- ๋ฆฌ์กํธ๊ฐ ํ์ด์ง๋ฅผ ๋ผ์ฐํ
ํ๋ ๋ฐฉ๋ฒ(3)
์์ ์ค๋ช ์ด ๋์์์ผ๋ ๊ฐ๋ ์ด ํ์คํ์ง ์๊ฑฐ๋ ๋ค์ ํ ๋ฒ ๋ณด๊ณ ์ถ์ ์ฌ๋์ ํ ๋ฒ ๊ฐ์ ํ์ธํ๋ ๊ฒ๋ ์ถ์ฒํ๋ค.
Router
์ฐ์ ๋ ๋ผ์ฐํฐ๊ฐ์ ์ฐจ์ด๋ฅผ ์๊ธฐ ์ ์ ๊ฐ๋ณ๊ฒ <Router>
์ ๋ํด์ ์์๋ณด์.
Router์ ๋ชจ๋ Router ์ปดํฌ๋ํธ์ ์ธํฐํ์ด์ค์ด๋ค.
Router์๋ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ฐํ ๊ด๋ จ ์์ฑ๋ง ์ ์๋์ด์๊ธฐ ๋๋ฌธ์
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
<BrowserRouter>
<HashRouter>
<MemoryRouter>
<NativeRouter>
<StaticRouter>
Router์๋ history ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ๋ค์ด๊ฒ์ดํ ์ ํ๋ค.
์ด์ BrowserRouter๊ณผ HashRouter์ ๋ํด์ ์ด์ผ๊ธฐ ํด๋ณด์.
BrowserRouter vs HashRouter
HashRouter
HashRouter์ ๊ฐ์ฅ ํฐ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฃผ์์ ํด์ฌ(#)๊ฐ ๋ถ๋๋ค.
- ๊ฒ์ ์์ง์ด ์ฝ์ง ๋ชปํ๋ค.
URL Hash๋ฅผ ์ฌ์ฉํ HashRouter๋ ์ง์๋๋ ๋ธ๋ผ์ฐ์ ๋ ์น ์๋ฒ์ ์ ํ์ด ์๋ค.
ํ์ง๋ง ์์์ ๋ง ํ ๊ฒ ์ฒ๋ผ example.com/#/messages/messages๊ณผ ๊ฐ์ด ์ฃผ์์ ํด์ฌ๊ฐ ๋ถ๊ฒ ๋๋ค.
HashRouter์ URL ํด์๋ฅผ ์๋ฒ์์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ Server Side Rendering์ผ๋ก ์ค์ ์ ๋ฐฑ์ ํ ์๋ ์๋ค.
๋ํ HashRouter์ ํด์ ํ์คํ ๋ฆฌ๋ฅผ ์ง์ํ์ง ์๋๋ค.
BrowserRouter
- Link ์ปดํฌ๋ํธ๋ก to ์์ฑ์ ์ด๋ํ ๊ฒฝ๋ก๋ฅผ ์จ์ค๋ค.
- Route ์ปดํฌ๋ํธ path ์์ฑ์ Link์ to์์ฑ์ component mapping ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ ํ๋ค.
- ์๋ก๊ณ ์นจ ํ๋ฉด ๊ฒฝ๋ก์์ ๋ชป ์ฐพ์ ์๋ฌ๊ฐ ๋๋ค.
๋๋ถ๋ถ ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ (IE9 ์ดํ)์์๋ ์ฌ์ฉํ ์ ์๋ค
BrowserRouter์ History API๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๊ทธ๋ผ ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ๊น
์ฌ์ค ๋ง์ React ์ฝ๋์์ Routing ํ๋ ๋ก์ง์ ์ดํด๋ณด๋ฉด BrowserRouter์ด ์๋์ ์ผ๋ก ๋ง์ ๊ฒ์ ์ ์ ์๋ค.
์ด ์ด์ ๋ ๋งค์ฐ ๊ฐ๋จํ๋ฐ, ์์ ์๋ ์ฌ๋๋ค์ด URL ์์น๋ฅผ ๋ณ๊ฒฝํ๋๋ฐ javascript๋ฅผ ์ฌ์ฉํ ์ ์์๋ค.
๊ทธ๋์ HashRouter๋ฅผ ์ฌ์ฉํ๊ณ ์ต๊ทผ์๋ BrowserRouter๊ฐ ํ์ํ๊ณ ๋ง์ ์ฌ๋๋ค์ด HashRouter๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ค.
์์์ ๋ง ํ๋ฏ HashRouter๋ History location์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ถํธํจ์ด ์๋ค.
๋ฐ๋ฉด์ BrowserRouter์์๋ History location์ ์ง์ํด์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฉ์ง ์น์ ๋ง๋ค ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
๋๊ธ