์ด ๊ธ์ ๋ฆฌ์กํธ์ ์ด์ฌ์๋ค์ ์ํ ๊ธ๋ก ๊น์ ๋ด์ฉ์ ์ต๋ํ ๋ฐฐ์ ํ๊ณ ์ฌ์ด ๊ฐ๋ ์ ๋ํด ์์ฑํ์๊ณ , ๋ฆฌ์กํธ์ ์ง์ ์ฅ๋ฒ ์ ๋ฎ์ถ๊ธฐ ์ํ ์์๋ก ์ด๋ ค์ด ๋ด์ฉ์ด ์๋ต๋์ด ์์ ์๋ ์์ต๋๋ค.
์ด ๋ถ๋ถ์ ๊ฝค๋ ํต์ฌ์ ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ 3๋ถ์์ผ๋ก ๋๋ ์ ์ค๋ช ํด๋ณด๋๋ก ํ๊ฒ ๋ค. ํด๋น ๊ธ์ ๋ํด์ ๋ณธ์ธ์ด ์ด ๋ถ๋ถ์ ๋์ด๊ฐ๋ ๋๊ฒ ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ์ ๋์ด๊ฐ์ ํ์ธํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ํ์ง๋ง ๊ธธ์ง ์์ ๊ธ์ด๋ฏ๋ก ๊ฐ๋ณ๊ฒ ์ฝ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
- 1๋ถ ๋ฆฌ์กํธ๊ฐ ํ์ด์ง๋ฅผ ๋ผ์ฐํ ํ๋ ๋ฐฉ๋ฒ
- 2๋ถ Broswer History API๋ฅผ ์ฌ์ฉํด์ ํ์ด์ง ๋ผ์ฐํ ํ๊ธฐ
- 3๋ถ react-router-dom์ ์ด์ฉํด์ ํ์ด์ง ๋ผ์ฐํ ํ๊ธฐ
์ด๋ฒ ์ฃผ์ ์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ํ๊ธฐ ์ํด์ ์ฐ์ ํ์ด์ง๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋์ง ์์์ผ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์น ์๋น์ค๋ฅผ ์ด์ฉํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค.
- ์ต์ด์ ์ฌ์ฉ์๊ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ
- ์๋ฒ์์ ํด๋น ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ต.
- ์ฌ์ฉ์๋ ์๋ฒ์์ ๋ฐํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ ํน์ ์๋น์ค ์์ฒญ
- ์๋ฒ๋ ๋ ํน์ ์๋น์ค๋ฅผ ์๋ก์ด ํ์ด์ง๋ก ์๋ต.
์์ ๊ฐ์ ๋ฐฉ์์ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ์น ์๋น์ค์ ์ ์ฐจ์ด๋ค.
์ด๋ฅผ Multi Page Application ์ด๋ผ๊ณ ํ๋ค. ์ด๋ ์๋น์ค์ ๋ฐ๋ฅธ ์๋น์ค ํ์ด์ง๊ฐ ํ์ํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ปํ๋ค.
ํ์ง๋ง React๋ ์ด๋ฐ ๋ฐฉ์์ ๊ถ์ฅํ์ง ์๋๋ค.
๊ทธ๋ผ ๋ฆฌ์กํธ๋ ์ด๋ค ๋ฐฉ์์ ๊ถ์ฅํ ๊น?
๋ฆฌ์กํธ๋ SPA ๋ผ๊ณ ํ๋ Single Page Application์ ๊ถ์ฅํ๋ค.
MPA vs SPA
Multi page Application ๊ณผ Single Page Application์ ๋น๊ตํ์ฌ ๊ทธ๋ฆผ์ผ๋ก ๋ณด์ฌ์ฃผ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์์ SPA์์๋ ํ์์์๋ Data๋ฅผ ์์ฒญํ์ง๋ง ๋ค๋ฅธ ๋๋จธ์ง ์ ๋ณด๋ค์ ํ์ด์ง ์์ฒด๋ผ์ฐํ ์ผ๋ก ํด๊ฒฐํ๋ค.
์ด๋ฅผ ์ํด์๋๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑํด๊ฑฐ๋ ๋๋ ๋ค๋ฅธ ๋ฐฉ์์ ์ด์ฉํ๋๋ฐ ์ด๋ฐ SPA๋ฅผ React์์๋ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ API
react-route-dom
๋ฐฉ์
์ด ๋ ๊ฐ์ง ๋ฐฉ์์ ๋ชจ๋ ์์๋ณผ ๊ฒ์ธ๋ฐ ์ผ๋จ SPA์ ๋ํด์ ๋จผ์ ํ์ธํด๋ณด์.
Single Page Application
SPA๋ ํ์ด์ง๋ ์ต์ด์ 1ํ๋ง ๋ก๋๋๊ณ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์์ฒญํ ๋ ํ์ด์ง ์ ์ฒด๊ฐ ๋ก๋๋๋ ๊ฒ์ด ์๋๋ผ, ๋น๋๊ธฐ์ ์ผ๋ก ์ผ๋ถ๋ถ๋ง ๋ก๋๋๋ ๋ฐฉ์์ด๋ค.
์ด๋ฅผ ๋ค๋ฅธ ๋ง๋ก ํ๋ฉด ์ต์ด ์์ฒญ์ ์๋ฒ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ก๋ํ๊ณ , ๋ค๋ฅธ ์ ๋ณด๋ค์ ํด๋ผ์ด์ธํธ์์ ๋ผ์ฐํ ํ๋ค๊ณ ๋ ํ๋ค.
์ฐ๋ฆฌ๊ฐ create-react-app
์ผ๋ก ๋ง๋ค์๋ app.js์์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ฉด SPA๋ฅผ ์ ๊น ๊ฒฝํํ ์ ์๋ค.
์์ componentDidMount
๋ ๋ฌด์ํ๊ณ ์ฝ๋๋ฅผ ๋ด๋ณด์. ๊ฐ๋จํ ์ค๋ช
ํ์๋ฉด onpopstate
๋ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ์๋ ์คํ์์ ํ์ด์ง๋ฅผ ๋นผ์จ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฒํผ์ ํด๋ฆญ๋จ๋ค๋ฉด page1์ผ๋ก ๋ก๋ํ๊ณ ๋ค๋ฅธ ๋ฒํผ์๋ page2๋ก ๋ก๋ํ๊ฒ ํ๋ค.
๊ทธ๋ผ ๊ฒฐ๊ณผ ํ๋ฉด์ด
์ด์ ๊ฐ์ด localhost:3000/์ผ๋ก ๋ค์ด์ค๊ฒ ๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ page1 ๋ฒํผ์ ํด๋ฆญํ๋ฉด url์ด
์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ ์๋กญ๊ฒ ํ์ด์ง๋ ๋ก๋๋์ง ์๋๋ค.
์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ SPA๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์๋ค.
๋ค์ ์๊ฐ์๋ ์ ๋๋ก ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ ๋ฐฉ์์ ๊ตฌ์ฑํด๋ณด๊ณ react-route-dom
๋ฐฉ์์ ์ฌ์ฉํด์ ๋ผ์ฐํ
์ ํด๋ณด์.
๋๊ธ