[React] BrowserRouter VS HashRouter
BrowserRouter VS HashRouter
๊ฐ์์์๋ ๊ทธ๋ ๊ณ ์ฑ ์์๋ ๊ทธ๋ ๊ณ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ๋ ์ด๋๋ ์ด ๋ผ์ฐํฐ๊ฐ ์ข ๋ ํจ์จ์ ์ด๊ณ ,,,์ด๋ฐ ๋ง๋ค์ด ๋ง์๋ค. ๋๋ ์ด ์ค๋ช ๋ค์ด ํ ๋ฒ์ ์ดํด๊ฐ ์๊ฐ๊ธฐ ๋๋ฌธ์ ๋ผ์ฐํฐ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ๋ง์์ ๋จน์๋ค.
์ผ๋จ ์ด ๋ฌด๋น ์น์ ๋ง๋๋๋ฐ ๋น๊ตํ์๋ ๋ผ์ฐํฐ๋ BrowserRouter์ HashRouter ์ด ๋ ๊ฐ์ด๋ค. ๊ทธ๋์ ์ด ๋๊ฐ๋ฅผ ๋จผ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋๋ฐ ์ด ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑํด๋ณด์๋ค.
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ค๋ช ์ ํด๋ณด๋ ค๊ณ ํ๋ค.
Router
๋ผ์ฐํฐ์๋ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ฐํ ์์ฑ๋ค๋ง ์ ์๋์ด์๊ธฐ ๋๋ฌธ์ ์๋์ฒ๋ผ 5๊ฐ์ง ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- BrowserRouter
- HashRouter
- MemoryRouter
- NativeRouter
- StaticRouter
๊ทธ ์ค์์ ์ค๋์ BrowserRouter์ HashRouter์ ๋ํด์ ์ค๋ช ํ๊ฒ ๋ค.
BrowserRouter
import React from 'react';
import { BrowerRouter, Route, Link } from 'react-touter-dom';
import TestChild from './TestChild';
const Test () => {
return (
<BrowserRouter>
<Link to="์ฃผ์">๋ผ์ฐํฐ๋ณด๊ธฐ</Link>
<Route path="./๊ฒฝ๋ก" component={TestChild}></Route>
</BrowserRouter>
)
};
<BrowserRouter></BrowserRouter>๋ก ๊ฐ์ธ์ค์ ์ฌ์ฉํด์ผ ํ๋ค.
์ผ๋จ <Link to= >์์ = ๋ค์ ์ด๋ํ ๊ฒฝ๋ก๋ฅผ ์จ์ค๋ค. ํ์ง๋ง, Link๋ ํ์ด์ง ์ด๋์ด๋ผ๊ธฐ๋ณด๋ค ๋ณด์ฌ์ง๊ฒ ํ๋ด๋ด๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Link๋ ํ์ด์ง์ ์ ํ์ ๋ฐฉ์งํด์ ์ฒ์๋ถํฐ ๋ ๋๋ง๋๋ ๋์ฐธ์ฌ๋ฅผ ๋ง์์ค๋ค.
ํ์ง๋ง, ์ด ์ฃผ์์์ ์๋ก๊ณ ์นจ์ ํ๋ฉด ๊ฒฝ๋ก์์ ๋ชป ์ฐพ์ ์๋ฌ๊ฐ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, BrowserRouter๋ History API๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ ์ถ๊ฐ์ ์ธ ์ธํ ์ผ๋ก ํด๊ฒฐํด์ค ์ ์๋ค.
๋ฐ๋ผ์, BrowserRouter๋ ๋์ ์ธ ํ์ด์ง์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
www.domain.com/path
BrowserRouter์ฌ์ฉ์ url์ ์์ ๊ฐ์ด ์ ์ํ๊ฒ ๋๋ค.
HashRouter
www.domain.com/#/path
BrowserRouter์ ์ ์ฌํ์ง๋ง ์ฃผ์ ์ฌ์ด์ # ํด์ฌ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
url์ด ์์ ๊ฐ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋๋๋ฐ #์ด์ ์ www.domain.com ์ ๋ํ ์์ฒญ๋ง ์๋ฒ๊ฐ ๋ฐ์๋ค์ด๊ฒ ๋๋ฏ๋ก
์ฃผ์ ์ด๋ํ, ์๋ก๊ณ ์นจํด๋ ์๋ฌ๋ฐ์ X
๊ฒ์์์ง์ด ์ฝ์ง ๋ชปํจ
์๋ฒ์ ์์ฒญ์ด ๊ฐ์ง ์๋๋ค -> ๋ฐฑ์๋ ์๋ฒ๊ฐ ํ์ํ์ง ์๋ ์ํฉ (์ ์ ์ธ ํ์ด์ง)์์ ์ฃผ๋ก ์ฌ์ฉ๋จ
-> ์๋ฒ๊ฐ ์ฃผ์์ ์ด๋์ ๋ชจ๋ฅด๊ฒ ๋จ (ํ์ด์ง ์กด์ฌ์ ๋ฌด์ ๋ํด์ ๋ชจ๋ฆ)
import React from 'react';
import { HashRouter, Route } from "react-router-dom";
function App() {
return (
<HashRouter>
<Navigation />
<Route path="/" exact={true} component={Home} />
<Route path="/about" component={About} />
<Route path="/movie/:id" component={Detail} />
</HashRouter>
)
}
์์ ์ฝ๋์ฒ๋ผ <HashRouter></HashRouter>๋ก ๊ฐ์ธ์ค์ผํ๋ฉฐ ์์ ์จ๋์ ๊ฒ๊ณผ ๊ฐ์ ํน์ง์ ์ง๋๊ณ ์์ด ์ ์ ์ธ ํ์ด์ง์ ์ฌ์ฉ๋๋ค.
๋ญ๊ฐ ์ด์ ์ข ์ดํด๊ฐ ๋๋๊ฒ๊ฐ๋ค. ๋ญ๊ฐ ๊ฐ์ด ์ข ๋ ์ค๋ ๊ฒ ๊ฐ์๋ฐ ๋นจ๋ฆฌ ๋ ๊ณต๋ถํด๋ณด๊ณ ๋ด๊ฐ ์ง์ ๋ชธ์ ๋๊ปด๋ณด๊ณ ์ถ๋ค. ๊ทผ๋ฐ ๋ญ๊ฐ ์ด๊ฒ ์ ํํ๊ฐ ์๋ฌธ์ด ๋ค์ด์ ํน์ ์ด ๊ธ์ ๋ณด์๋ ๋ถ๋ค ์ค์ ๋ญ๊ฐ ์๋ชป ๋๋ค๊ณ ๋๋ผ์๋ ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์ใ