Intro
์ค๋์ SPA ํ๋ก์ ํธ์ ๋ค์ด๊ฐ๊ธฐ์ ์์, ๋ฆฌ์กํธ์ ์ค์ํ ํน์ง๊ณผ React Router ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๊ณต๋ถํ๋ค.
์ค ์ฐํด๊ฐ ๋๋๊ณ ๋ค์๋ ์ด๋ผ ๊ทธ๋ฐ์ง.. ๊ณต๋ถ ์ง์ค๋๊ฐ ๋จ์ด์ก๋ค. ๊ฐ์๊ฐ ๊ธธ์ง ์์ ๋คํ์ด์๋ค...
์ค๋ ํ์ตํ ๋ด์ฉ
: React SPA & CSR, React Router
Page Routing
๐ฌ Routing์ด๋?
์ด๋ค ๋คํธ์ํฌ ๋ด์์ ํต์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ ์ผ๋ จ์ ๊ณผ์
- ์ํค๋ฐฑ๊ณผ
- Router
๋ฐ์ดํฐ์ ๊ฒฝ๋ก๋ฅผ ์ค์๊ฐ์ผ๋ก ์ง์ ํด์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ
- Route + ing
๊ฒฝ๋ก๋ฅผ ์ ํด์ฃผ๋ ํ์ ์์ฒด์ ๊ทธ๋ฐ ๊ณผ์ ๋ค์ ๋ชจ๋ ํฌํจํ์ฌ ์ผ์ปซ๋ ๋ง
- Page Routing
์น ์๋ฒ๊ฐ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์๋ง์ ํ์ด์ง๋ฅผ ์ ํํ๊ณ ํด๋น ํ์ด์ง๋ฅผ ๋ฐํํด์ ์ฌ์ฉ์๊ฐ ํ์ด์ง์ ์ ์ํ๋ ๊ณผ์
MPA(Multi Page Application) & SPA(Single Page Application)
- MPA (Multi Page Application)
- ์ฌ๋ฌ ํ์ด์ง๋ฅผ ์ค๋นํด ๋๊ณ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ฒ์์ ์ ์ ํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์
- ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋๋ฉด์ ํ์ด์ง๊ฐ ์ด๋ํ๊ฒ ๋๋ค.
- SPA๋ณด๋ค ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ณต์กํ๋ค.
- SEO์ ์ ๋ฆฌํ๋ค.
- SPA (Single Page Application)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ๋ชจ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ต์ด ํ ๋ฒ ๋ค์ด๋ก๋ํ์ฌ ๋ ๋๋งํ๊ณ , ์ดํ ์๋ก์ด ํ์ด์ง์ ๋ํ ์์ฒญ์ด ์์ ๋ ๋ณํ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ง์ ๋ด๋ ค๋ฐ์ ๋ฆฌ๋ ๋๋งํ๋ ๋ฐฉ์
- ๋ค์์ ํ์ด์ง๋ฅผ ๋ง์น ํ๋์ ํ์ด์ง์ธ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ๋ค.
- ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ๊น๋นก์ด์ง ์๋๋ค.
- React๋ Single Page Application์ด๋ค.
CSR (Client Side Rendering)
์๋ฒ์์ ์๋ต์ ๋ฐ์์ค๋ ๋ฐฉ์์ด ์๋ ํด๋ผ์ด์ธํธ ํ๊ฒฝ(๋ฆฌ์กํธ ์ฑ)์์ ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์
์๋ฒ์ ํต์ ์ด ํ์ ์์ด ํ์ด์ง ์ด๋ ์๋๊ฐ ๋น ๋ฅด๋ค.
โ React๋ SPA์ด๋ฉด์ CSR๋ก ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ค.
React Router
: React์ CSR์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ผ์ฐํ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Home v6.22.0 | React Router
I'm on v5 The migration guide will help you migrate incrementally and keep shipping along the way. Or, do it all in one yolo commit! Either way, we've got you covered to start using the new features right away.
reactrouter.com
- ์ค์น (์ํ๋ ๋ฒ์ ์ผ๋ก ์ค์นํ๊ธฐ ์ํด @v๋ฒ์ ์ ์ ๋ ฅ)
npm install react-router-dom@v6
- ์ฌ์ฉ ๋ฐฉ๋ฒ
App.js
import './App.css';
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import RouteTest from './components/RouteTest';
import Home from './pages/Home';
import New from './pages/New';
import Edit from './pages/Edit';
import Diary from './pages/Diary';
function App() {
return (
<BrowserRouter>
<div className="App">
<h2>App.js</h2>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/new" element={<New />} />
<Route path="/edit" element={<Edit />} />
<Route path="/diary" element={<Diary />} />
</Routes>
<RouteTest />
</div>
</BrowserRouter>
);
}
export default App;
: <Routes> ํ๊ทธ๋ก ๊ฐ์ผ ๋ถ๋ถ๋ค์ด ํ์ด์ง๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๋ถ๋ถ์ด๋ค. Route ํ๊ทธ๋ก path๊ฐ ๋ฐ๋์์ ๋ ํ์๋๋ ํ์ด์ง๋ฅผ ์ค์ ํ ์ ์๋ค.
RouteTest.js
import { Link } from 'react-router-dom';
const RouteTest = () => {
return (
<>
<Link to={'/'}>HOME</Link>
<br />
<Link to={'/diary'}>DIARY</Link>
<br />
<Link to={'/new'}>NEW</Link>
<br />
<Link to={'/edit'}>EDIT</Link>
</>
);
};
export default RouteTest;
: ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ฌ ๋ถ๋ฌ์ค๋ aํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ React Router์ Link ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ฐํ ํ๋ค.
๋ง๋ฌด๋ฆฌ
์ค๋์ ํฌ๊ฒ ์ด๋ ค์ด ๋ด์ฉ์ ์์๋ค. ์ด๋ฒ ํ๋ก์ ํธ ์ค์ต๋ ์ด์ฌํ ๋ฐ๋ผ ํด๋ด์ผ์ง!!
