์น ํ๋ก ํธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ, React
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณต์กํ ์ํ๊ณ
์๋ฐ์คํฌ๋ฆฝํธ ๊ทธ ์์ฒด๋ก๋ ํ๋ ์์ํฌ๊ฐ ์๋ ์ธ์ด์ ๋ถ๊ณผํ๋ค. ์น ๊ฐ๋ฐ์ ๋ชฉ์ ์ ๋ฐ๋ผ ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๊ณ , ์๋ก ์ต๊ณ ๋ผ๊ณ ์ฃผ์ฅํ๋ ๋ค์ํ ๊ธฐ์ ๋ค์ด ๋งค๋ฒ ์๋กญ๊ฒ ์ถํํ๊ณ ์๋ค.
React.js๋ ์ด๋ฌํ ๋ฐฐ๊ฒฝ์์ ๋ฑ์ฅํ ์น ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ํนํ, React๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๋งค์ฐ ์ค์ํ ์์น๋ฅผ ์ฐจ์งํ๋ฉฐ, ์ฌ์ค์ Java์ฒ๋ผ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ์ค์ฒ๋ผ ์ฌ์ฉ๋๊ณ ์๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ
์์์ ์์ ์ด์ ์ ํฌ์คํ ํ ๊ธ์ ์ฐธ๊ณ ํ์. (์์ ์์ฑ ๊ธ์ด๋ผ ๊ฐ๋ ์ฑ์ด ๋ณ๋ก ์์ข์์ ์ด ๊ธ์์ ๋ค์ ์ ๋ฆฌ)
https://1000sang-dev.tistory.com/13
SPA (Single Page Application)
SPA(Single Page Application)๋ ๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ฏธํ๋ฉฐ, React, Vue, Angular๋ ๋ํ์ ์ธ SPA๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ด๋ค.
SPA์ ํน์ง
- ํด๋ผ์ด์ธํธ ์ธก์์ ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ์์ฑํ๋ค. ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง ์ด๋ ์์ด ํ๋ฉด์ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ค.
- ๋ชจ๋ฐ์ผ ์ฑ์ฒ๋ผ ๋น ๋ฅด๊ณ ๋ถ๋๋ฌ์ด ํ๋ฉด ์ ํ์ ์ ๊ณตํ์ฌ ์ค์๊ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์ค์ํ ์น ํ์ด์ง์ ์ ํฉํ๋ค.
SPA์ ์ฃผ์ ์ฅ์ ์ค ํ๋๋ ๋น ๋ฅธ ๊ฒฝ๋ก ์ ํ(Fast Rout Transition)์ผ๋ก URL์ด ๋ฐ๋๋๋ผ๋ ์๋ฒ์ ์ ์์ฒญ์ ๋ณด๋ด์ง ์๊ณ ํด๋ผ์ด์ธํธ ์ธก์์ ํ๋ฉด์ ๊ฐฑ์ ํ๋ค. ํ์ด์ง์ ๊น๋นก์ ์์ด ๋ถ๋๋ฌ์ด ์ ํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
→ ๋ชจ๋ฐ์ผ ์ฑ๊ณผ ์ ์ฌํ ํ๋ฉด์ ํ: SPA Route(SPA ๋ผ์ฐํ ) ์์ ํํ์ด์ง https://codepen.io/hejx/pen/eJKwPm
SPA = CSR
SPA๋ Client-Side Rendering(CSR)์ ์ฌ์ฉํ์ฌ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๋ค. ์ฆ, ํ ํ๋ฆฟ ์์ง์ด ์๋ฒ๊ฐ ์๋ ์น ๋ธ๋ผ์ฐ์ ์ธก์ ์กด์ฌํ๋ค. ์ด๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์์ ํด์ํ์ฌ ํ๋ฉด์ ๋์ ์ผ๋ก ํ์ํ๋ค.
โ๏ธ ํน์ง ์์ฝ
- ์๋ฒ ๋ถํ์: ๋จ์ํ HTML, CSS, JS๋ง ์์ผ๋ฉด ๋์ํ์ง๋ง, ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด API ์๋ฒ๋ ํ์ํ๋ค.
- ์ด๊ธฐ ๋ก๋ฉ ๋๋ฆผ: ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ํฌ๊ธฐ ๋๋ฌธ์ Initial Loading์ด ๋๋ ค์ง ์ ์๋ค.
- SEO ๋ถ๋ฆฌํจ: ์น ํฌ๋กค๋ฌ๊ฐ ๋์ ํ์ด์ง๋ฅผ ์์งํ์ง ๋ชปํด SEO(Search Engine Optimization, ๊ฒ์ ์์ง ์ต์ ํ)๊ฐ ์ด๋ ต๋ค.
SPA(CSR) ๊ณผ MPA(SSG ํน์ SSR) ์ฐจ์ด
- SPA (CSR): ๋ชจ๋ ํ์ด์ง๊ฐ ํ ๋ฒ์ ๋ก๋ฉ๋๋ฉฐ, ์ดํ ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ด์ง ์ ํ์ด ์ด๋ฃจ์ด์ง๋ค. ํ์ด์ง ์ ํ ์ ์๋ฒ์์ ๋คํธ์ํฌ ์์ฒญ์ด ๋ฐ์ํ์ง ์์ ๋น ๋ฅธ ์ ํ์ด ๊ฐ๋ฅํ์ง๋ง, ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆฌ๋ค.
- MPA(SSR/SSG): ์๋ฒ๊ฐ ๋ฏธ๋ฆฌ ํ์ด์ง๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํ๋ฏ๋ก SEO์ ์ ๋ฆฌํ๋ค. ํ์ด์ง๋ฅผ ์์ฒญํ ๋ ๋ง๋ค ์๋ก ๋ก๋ฉ์ด ์ด๋ฃจ์ด์ง์ง๋ง, ๊ฒ์์์ง์์ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์๋ค.
์ฉ์ด์ ๋ฆฌ
SPA(Single-Page-Application, ๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ) = CSR: Client-Side-Rendering
MPA: (Multiple Page Application, ๋ค์ค ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ) = SSR: Server Side Rendering = SSG(Static Site Generation, ์ ์ ์ฌ์ดํธ ์์ฑ)
Vue์ Angular๋ ํ๋ ์์ํฌ์ธ๋ฐ, React๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๊ฐ?
- React๋ ๊ธฐ๋ณธ์ ์ UI ์ปดํฌ๋ํธ๋ง์ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. VDOM(Virtual DOM)์ ํ์ฉํ์ฌ ํ๋ฉด์ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ์ง๋ง, ๊ทธ ์ธ์ ๊ธฐ๋ฅ(๋ผ์ฐํ , ์ํ ๊ด๋ฆฌ ๋ฑ)์ ์ ๊ณตํ์ง ์๋๋ค.
- SPA์ ํ์ํ ๋ผ์ฐํ ๊ธฐ๋ฅ์ด๋ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๋ฑ์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ๋ก ์ฌ์ฉํด์ผํ๋ค. ์๋ฅผ ๋ค์ด React-Router-Dom์ ์ฌ์ฉํด SPA ๋ผ์ฐํ ์ ์ฒ๋ฆฌํ๋ค.
๋ฐ๋ณ์, Vue์ Angular๋ ํ๋ ์์ํฌ๋ก, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ผ์ฐํ , ์ํ ๊ด๋ฆฌ, ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ฉฐ, ํ์ํ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋ ์์ํฌ ๋ด๋ถ์์ ์ฒ๋ฆฌํ ์ ์๋ค.
SPA Routing/Navigation ์ด๋?
SPA(Single Page Application) Routing ์ด๋? = React-Router-Dom ์ ์ด๋ค ์ญํ ์ ํ๋๊ฐ?
SPA ๋ผ์ฐํ ์ ์ฌ์ฉ์๊ฐ URL์ ๋ณ๊ฒฝํ์ ๋ ์ ํ์ด์ง๋ฅผ ๋ก๋ํ์ง ์๊ณ ํด๋ผ์ด์ธํธ์์ ํ๋ฉด์ ์ ํํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. ์ด๋ ๋คํธ์ํฌ ์์ฒญ์ ์ต์ํํ๊ณ , ๋ถ๋๋ฝ๊ณ ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
- Routing์ 2๊ฐ์ง๋ก ๋๋๋ค = URL์ ๋ฐ๋ผ ํ์ด์ง๊ฐ ๋ฐ๋๋ ๋ฐฉ์์ 2๊ฐ์ง.
- Hard Navigation → ๋คํธ์ํฌ ์ฌ์ฉ = SSR, SSG ๋ฐฉ์: `window.history`
- SPA Navigation → ๋คํธ์ํฌ ๋ฏธ์ฌ์ฉ = CSR(SPA) ๋ฐฉ์: `navigate = useNavigate()`
Hard Navigation (SSR / SSG)
- ๋คํธ์ํฌ ์์ฒญ์ ํตํด ์ธ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ์ ํต์ ์ธ ๋ฐฉ์์ด๋ค. ์ฌ์ฉ์๊ฐ URL์ ๋ณ๊ฒฝํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ์๋ก์ด ํ์ด์ง ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ ๊ทธ์ ๋ง๋ ํ์ด์ง๋ฅผ ๋ฐํํ๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ `history.back()`์ ํธ์ถํ๋ฉด ์ด์ ํ์ด์ง๋ก ๋์๊ฐ๋ ๊ธฐ๋ฅ์ ์๋ก ๋ค ์ ์๋ค.
SPA Navigation (CSR)
- ๋คํธ์ํฌ ์์ฒญ ์์ด ๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง ์ ํ์ ์ฒ๋ฆฌํ๋ค. React์ ๊ฐ์ ํ๋ ์์ํฌ์์ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด, ๋คํธ์ํฌ ์์ฒญ์ ์๋ตํ๊ณ ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์ ํํ๋ค.
- React์์๋ `useNavigate()`๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์์ฒญ ์์ด ํ์ด์ง๋ฅผ ์ด๋์ํฌ ์ ์๋ค.
SSG / SSR / CSR ์์ฝ
- SSG(Static Site Generation, ์ ์ ์ฌ์ดํธ ์์ฑ): ๋ฏธ๋ฆฌ ์ ์ ์ธ HTML ํ์ผ์ ์์ฑํ์ฌ ๋น ๋ฅธ ๋ก๋ฉ๊ณผ SEO์ ์ ๋ฆฌํ์ง๋ง ๋์ ์ธ ํ์ด์ง ์ ๋ฐ์ดํธ๊ฐ ์ด๋ ต๋ค.
- SSR(Server Side Rendering, ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง): ์๋ฒ์์ ์ค์๊ฐ์ผ๋ก ํ์ด์ง๋ฅผ ๋ ๋๋งํ์ฌ SEO์ ๋์ ๋ฐ์ดํฐ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ์๋ฒ์ ๋ถํ๊ฐ ์๊ณ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
- CSR(Client Side Rendering, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง): ํด๋ผ์ด์ธํธ์์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ์ฌ ๋น ๋ฅธ ํ์ด์ง ์ ํ์ด ๊ฐ๋ฅํ์ง๋ง, ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆฌ๊ณ SEO์ ๋ถ๋ฆฌํ๋ค.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
https://medium.com/@mkaanaltin/mpa-spa-1a37d3cc93f4
'๐ปDEV-STUDY > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React์ State, Props, Ref์ ์ญํ (1) | 2024.09.18 |
---|---|
[React] Vite๋ก React ์ด๊ธฐ ์ฑ ์ค์ (2) | 2024.09.18 |
[React] JSX ๋ฌธ๋ฒ + ๋จ๋ฐฉํฅ ๋ฐ์ธ๋ฉ + VDOM (1) | 2024.09.17 |
[React] React์ ๋ฑ์ฅ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ vs ํ๋ ์์ํฌ (1) | 2024.09.17 |