TL;DR: ๊ฐ๋จํ๊ฒ ํ๋ก ๋ณด๊ธฐ
ํน์ง | SSR | CSR |
---|
์ฅ์ | โ ์ ์ ์ธ ์ฌ์ดํธ์์ ์ด์์ ์ด๋ค. โ ์ฒซ ํ์ด์ง ์ ๊ทผ์ด ๋น ๋ฅด๋ค. โ JS์ ์์กดํ์ง ์๋๋ค. โ ํฌ๋กค๋ง์ ์ฉ์ดํ์ฌ SEO์ ์ ํฉํ๋ค. | โ ๋์ ์ธ ์น ์ฑ์์ ์ด์์ ์ด๋ค. โ ์ฒซ ๋ก๋ ์ดํ์ ํ์ด์ง ๋ ๋๋ง์ด ๋น ๋ฅด๋ค. โ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์์ฑ์ด ๋น ๋ฅด๊ฒ ๊ฐ์ ๋์ด ์ฌ์ฉ์์์ ์ํธ์์ฉ์ด ๋ถ๋๋ฝ๋ค. โ CSR ๊ตฌํ์ ์ต์ ํ๋ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ํ๋ค. |
๋จ์ | โ ์๋ฒ ์์ฒญ์ด ๋ง์ด ๋ฐ์ํ๋ค. โ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ฉํด์ผ ํด์ CSR์ ๋นํด ํ์ด์ง ๋ก๋ ์๋๊ฐ ๋๋ฆฌ๋ค. โ ์ฌ์ฉ์์ ์ฌ์ดํธ ๊ฐ์ ์ํธ์์ฉ์ด ๋ถ๋๋ฝ์ง ๋ชปํ๋ค. โ ์๋ฒ์์ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ๋ณด์ ์ทจ์ฝ์ ์ ๋
ธ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. | โ ๊ฒ์ ์์ง ํฌ๋กค๋ฌ๊ฐ ํ์ด์ง ๋ด์ฉ์ ์ธ์ํ๊ธฐ ์ด๋ ค์ SEO์ ์ ํฉํ์ง ์๋ค. โ ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ์ฌ API ์๋ต ์๋๊ฐ ๋๋ฆฌ๋ค. โ ์ฒซ ํ์ด์ง ๋ก๋ฉ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. โ ์ถ๊ฐ์ ์ธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ค. โ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๋์ด ํฌ๋ค. |
๐ข ์กฐ๊ธ ๋ ์์ธํ ์์๋ด
์๋ค!
MPA์ SPA
์ด๋ฏธ์ง ์ถ์ฒ
๐ฅ MPA
- ๊ณ ์ ์ ์ธ ์น ํ์ด์ง ๊ตฌ์ฑ ๋ฐฉ์์ผ๋ก, ์ฌ๋ฌ ๊ฐ์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น์ ์๋ฏธํ๋ค.
- ํ์ด์ง ๋ณ๋ก ํด๋น ํ์ด์ง์ ๋ง๋ HTML, CSS, JS ํ์ผ์ ๋ฐ์ ํ๋ฉด์ ๊ตฌ์ฑํ๋ค.
- ํ์ดํผ๋งํฌ๋ฅผ ํด๋ฆญํ์ ๋ ํด๋น ํ์ด์ง๋ก ์ด๋ํ๊ณ , ํ๋ฉด์ด ๊น๋นก์ด๋ฉด์ ์๋ก์ด ํ์ด์ง์ ๋ง๋ ํ๋ฉด์ด ๊ทธ๋ ค์ง๋ ๋ฐฉ์์ด๋ค.
- ์ด๋ฏธ ํ๋์ฝ๋ฉ๋ ์ ์ ํ์ด์ง๋ค์ ์๋ฒ์์ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค๊ฐ ์์ฒญ์ ๋ฐ๋ผ ํด๋น ์์ฒญ์ ์์ํ๋ ์ ์ ํ์ด์ง๋ฅผ ์ฐพ์ ๋ฐํํ๋ค.
- ๋ ๋๋ง์ด ์๋ฒ ์ฌ์ด๋์์ ์๋ฃ๋์ด ์ต์ข
์์ฑ๋ ๋ฌธ์๋ฅผ ๋ฐํํ๊ณ ์๋ ํํ!
- ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ ๋๋ง๋ค ํด๋น ํ์ด์ง์ HTML ๋ฌธ์๋ฅผ ์๋ฒ๋ก๋ถํฐ ๋ค์ ๋ฐ์์์ผ ํ๋ค.
- ์ด๋์ HTML ๋ฌธ์๋ ์ฌ์ง๊ณผ ๊ฐ์ ์ปจํ
์ธ ๋ค์ด ์ด๋ฏธ ํฌํจ๋, ์๋ฒ๊ฐ ๋ ๋๋งํ ํ์ผ์ด๋ค.
- MPA๋ SSR ๋ ๋๋ง ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๐ค SPA
- ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
- ํ์ฌ์ ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํจ์ผ๋ก์จ ์ฌ์ฉ์์ ์ํตํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
- ์ต์ด ํ ๋ฒ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ก๋ฉํ ๋ค ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
- ์ด๋ค ํ์ด์ง์ ์ ์ํ๋๋ผ๋ ๋์ผํ HTML, CSS, JS ํ์ผ๋ก ์ ์ํ ํ์ด์ง์ ๋ง๊ฒ ํ๋ฉด์ ๊ตฌ์ฑํ๋ค.
- ์ฐ์๋๋ ํ์ด์ง ๊ฐ์ UX๋ฅผ ํฅ์์ํค๊ณ , ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
์ฒ๋ผ ๋์ํ๋๋ก ๋๋๋ค.
SPA์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ๋ํ ์์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ชจ๋ฐ์ผ ์น์ ๋ํ ์ฑ๋ฅ ์ต์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- PC์ ๋นํด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค์ ์น ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด SPA๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๋ค.
๐ง SPA๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ!
- ์ฌ์ฉ์ ์
์ฅ์์๋ ๋จ์ํ ํ์ด์ง ๋ด์ฉ์ด ๋ฐ๋๊ณ , ๋ธ๋ผ์ฐ์ ์์์ ๋ณด์ด๋ URL์ด ๋ค๋ฅด๋ค๋ฉด ๋ค๋ฅธ ํ์ด์ง๋ก ๋ณด์ผ ๊ฒ์ด๋ค.
- ์ด๋ฌํ ์ฌ์ค์์ ์ฐฉ์ํ์ฌ, SPA๋ ํ๋์ ํ์ด์ง์์ JS๋ฅผ ํตํด ๋ณด๊ณ ์๋ DOM์ ๋ด์ฉ์ ๋ชจ๋ ์ง์ฐ๊ณ ๋ค๋ฅธ ์ปจํ
์ธ ๋ก DOM์ ์ฑ์ด ๋ค ๋ธ๋ผ์ฐ์ ์์ URL์ ๋ณ๊ฒฝํ์ฌ ๋ฐ๋ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ง๋ค์ด์ค๋ค.
- ํ์ด์ง ์ปจํธ๋กค ์ History API๋ฅผ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ์ธ์
์ ํ์คํ ๋ฆฌ ์คํ์ ์กฐ์ ํ๋ค.
- ๊ทธ ๋ค์ JS๋ก DOM ์ปจํธ๋กค์ ํ๋ฉด์ ์ง์ ํ๋ฉด์ ๋ณ๊ฒฝ์์ผ์ค๋ค.
- ์: React์ React-Router-Dom
- React๋ฅผ ํตํด ๊ธฐ๋ฅ ๊ตฌํ ์ (CRA ํ๊ฒฝ์์๋) WebPack๊ณผ ๊ฐ์ ๋ฒ๋ค๋ง ๋๊ตฌ๋ฅผ ๊ฑฐ์ณ ํ๋(๋๋ ์ฌ๋ฌ ๊ฐ์) ๊ฑฐ๋ํ JS ํ์ผ๋ก ๋ฒ๋ค๋ง ๋๊ณ , SPA์์๋ ์ด๋ฌํ JS ํ์ผ์ ์ ๋ฌ๋ฐ์ ํ์ด์ง๋ฅผ ๊ตฌ์ถํ๊ฒ ๋๋ค.
- ์ด์ ๋ฐฉ์์์๋ ํ์ด์ง ์ด๋ ์ ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ๊ณ , ํ์ด์ง๋ฅผ ๋ก๋ํ ๋๋ง๋ค ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ด๋ฅผ ํด์ํ๊ณ ํ๋ฉด์ ๋ ๋๋งํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ์ด์ ๋ฌ๋ฆฌ SPA๋ ๋ธ๋ผ์ฐ์ ์ ๋ก๋๋ ํ ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ฒ์ ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ, ์ฒ์ ํ ๋ฒ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ก๋ํ ํ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ๋ค.
- ์ด๋ฅผ ํตํด ํธ๋ํฝ์ ๊ฐ์์์ผ DB ๊ณผ๋ถํ๋ฅผ ์ต์ํํ๊ณ , ํ๋ฉด ๊น๋นก์์ด ์ฌ๋ผ์ ธ ์ฌ์ฉ์์๊ฒ ๋ ๋์ UX๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ๋์๋ค.
- ์๋ฒ๋ ๋จ์ง JSON ํ์ผ๋ง์ ๋ณด๋ด์ฃผ๊ณ , ํด๋ผ์ด์ธํธ ์ธก์์ JS ํ์ผ์ ์ด์ฉํด ๋์ ์ผ๋ก HTML ์์๋ฅผ ์์ฑํด ํ์ด์ง๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ!
๐ข ์ด ๋ฐฉ์์ด ๋ฐ๋ก CSR!
CSR (Client-Side-Rendering)
ํด๋ผ์ด์ธํธ ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ฃผ์ฒด!
์ด๋ฏธ์ง ์ถ์ฒ
- ํด๋ผ์ด์ธํธ์ธ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ์๋ฒ๋ ์ฌ๋ ค๋์ ํ์ผ์ ์ ๋ฌํด์ฃผ๊ธฐ๋ง ํ๊ณ , ๋ธ๋ผ์ฐ์ ๊ฐ ์ด JS ํ์ผ์ ์คํํ๋ฉด์ DOM์ ๋ด์ฉ์ ์ถ๊ฐํ์ฌ ๋ ๋๋งํ๊ฒ ๋๋ค.
- ํ์ด์ง ์ฒซ ๋ก๋ ์ ์๋ฒ์์ ๋ชจ๋ ๋์์ ๋ด๋ ค์ฃผ๊ณ , HTML์ ๋น ๋ถ๋ถ์ ํด๋ผ์ด์ธํธ๊ฐ ์์์ ๋ค๋ฃฌ Ajax ๋น๋๊ธฐ ํต์ ์ ํตํด ์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ๋ฅผ fetchํด์ค๊ณ , ํ์ด์ง๋ฅผ ๊ทธ๋ฆฐ๋ค.
- SPA์ ๋ฐ์ , CPU์ ์ฑ๋ฅ ์์น, JS์ ํ์คํ ๋ฐ React, Vue, Angular์ ๊ฐ์ ํ๋ ์์ํฌ์ ๋ฑ์ฅ๊ณผ ํจ๊ป ๋ณธ๊ฒฉ์ ์ผ๋ก ๋์
๋์๋ค.
- ๊ด๋ จ ์น ํ๋ ์์ํฌ:
React.js, Angular.js, Vue.js
// index.html
<html>
...
<body>
<div id="root"></div>
<script src="app.js"></script>
</body>
</html>
- ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด๋ฉด, body ํ๊ทธ ์์ root์ ์ดํ๋ฆฌ์ผ์ด์
์ ํ์ํ JS์ ๋งํฌ๋ง ํฌํจ๋ HTML ์ฝ๋๊ฐ ์๋ฒ๋ก๋ถํฐ ์ ์ก๋๋ค.
- ๋ฐ๋ผ์ ์ฒซ ์ ์ ์ ๋น HTML ํ๋ฉด์ด ๋ณด์ด๊ฒ ๋๋ค.
- ์ดํ ์๋ฒ๋ก๋ถํฐ
app.js
ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ผ๋ฉด ์ดํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ก์ง, ๊ตฌ๋์ ํ์ํ ํ๋ ์์ํฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค ์ฝ๋ ๋ฑ์ด ์ ๊ณต๋๋ค.
- ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์๋ฒ๋ก๋ถํฐ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ํด๋ผ์ด์ธํธ ์ธก์์ JS์ ํจ๊ป ๋์ ์ผ๋ก HTML ํ์ผ์ ์์ฑํด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
npx create-react-app
์คํ ์ดํ ์์ฑ๋ public/index.html
ํ์ผ์ ์๊ฐํด๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๊ธฐ์ JS์ ์ฝ์ผ๋ฉฐ ๋ฌด์์ ๊ทธ๋ฆด์ง ํ๋จํ๊ณ ๋ ๋๋งํ๋ ์์
์ ํ๋ ๋์ ์ง์ฐ์ด ์๊ธด๋ค.
- ์ดํ ์์
์ ์์ด์๋ ์๋ฒ์ ์์กดํ์ง ์๊ณ ํด๋ผ์ด์ธํธ ํผ์ ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค.
โ๏ธ CSR์ ๋จ๊ณ
-
์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ณด๋ธ๋ค.
-
CDN์ด HTML ํ์ผ๊ณผ JS๋ก ์ ๊ทผํ ์ ์๋ ๋งํฌ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ค.
- CDN: ์ฌ์ฉ์์ ์์ฒญ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ๊น์ด ์๋ฒ์์ ์์ฒญ์ ์๋ตํ๋๋ก ํ๋ ๋ฐฉ์
-
ํด๋ผ์ด์ธํธ๋ HTML๊ณผ JS ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.
- ์ด๋ ์ ์ ๋ ๋น ํ๋ฉด๋ง์ ๋ณด๊ฒ ๋๋ค.
-
๋ค์ด๋ก๋๊ฐ ์๋ฃ๋ JS ํ์ผ์ด ์คํ๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ธฐ ์ํ API๊ฐ ํธ์ถ๋๋ค.
- ์ด๋ ์ฌ์ฉ์๋ค์ placeholder(์: skeleton UI)๋ฅผ ๋ณด๊ฒ ๋๋ค.
-
์๋ฒ์ API ์์ฒญ์ ์๋ตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
-
ํด๋ผ์ด์ธํธ๋ API๋ก๋ถํฐ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ placeholde ์๋ฆฌ์ ๋ฃ์ด์ฃผ๊ณ , ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ํ์ด์ง๊ฐ ๋๋ค.
โค๏ธโ๐ฅ ์ฅ์
๋น ๋ฅธ ํ๋ฉด ์ ํ๊ณผ ์ธํฐ๋ ์
๊ตฌํ ๊ฐ๋ฅ
- View ๋ ๋๋ง์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๊ฒ ๋๋ฏ๋ก ์๋ฒ ํธ๋ํฝ์ ๊ฐ์์ํค๊ณ , ์ด๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅธ ์ํธ์์ฉ์ ์ ๊ณตํ๋ค.
- ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ์ง ์์ ์ฌ์ฉ์๊ฐ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋น์ทํ ๊ฒฝํ์ด ๊ฐ๋ฅํด์ง๋ค.
- ๋ค์ดํฐ๋ธ ์ฑ
- Android, iOS์ฒ๋ผ ๊ตฌ์ฒด์ ์ธ ํ๋ซํผ๋ง์ ์ํด ๋ง๋ค์ด์ง ์์ฉ ํ๋ก๊ทธ๋จ
- ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ฉฐ ๋ฐ์์ด ๋น ๋ฅธ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
- HTML๋ง ๋ฐ์์์ ๋์๋ ์๋ฌด๊ฒ๋ ๋ณด์ด์ง ์๋ค๊ฐ ๋งํฌ๋ ๋ชจ๋ ๋ก์ง์ ์ฒ๋ฆฌํ๋ JS ํ์ผ์ด ๋์ฐฉํ๋ฉด ์น ์ฌ์ดํธ๊ฐ ๋ณด์ฌ์ง๋ ๋์์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํด์ง๋ค.
๐ ๋จ์
SSR์ ๋นํด ๋๋ฆฐ ์ฒซ ํ์ด์ง ๋ก๋ฉ ์๋
- ์๋ฒ์ ์ฒซ ์์ฒญ์ ํ ๊ฒฝ์ฐ ์ ์ฒด ํ์ด์ง์ ๋ํ ๋ชจ๋ ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฒ ๋์ด SSR๋ณด๋ค ๋ก๋ฉ ์๋๊ฐ ๋๋ฆฌ๋ค.
- ์ฒ์ ์ฌ์ดํธ์ ์ ์ํ ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ฐ์ ๋ค์ด๋ก๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ฒซ ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.
- ์ด ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์๋น๋๋ ์ปจํ
์ธ ์ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ํฉ์ด ์ข์ง ์์ ํ์ด์ง๊ฐ ๋
ธ์ถ๋๊ธฐ๊น์ง์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
SEO์ ๋ํ ์ถ๊ฐ ๋ณด์ ์์
ํ์
- ์์ ์ฝ๋ ์์์์ ์ ์ ์๋ฏ, CSR์์ ์ฌ์ฉ๋๋ HTML์ body ๋ถ๋ถ์ ๋น ์ํ์ด๊ธฐ ๋๋ฌธ์ HTML ๋ฌธ์๋ฅผ ๋ถ์ํด ์น ์ฌ์ดํธ์์ ๊ฒ์๋๋๋ก ๋๋ ๊ฒ์ ์์ง์ ํฌ๋กค๋ฌ์ ๋ฐฉ์์ ์ ํฉํ์ง ์๋ค.
- Google์ ๊ฒ์ ์์ง์๋ JS ์์ง์ด ๋ด์ฅ๋์ด ์์ด ํฌ๋กค๋ง์ด ๋๊ธด ํ์ง๋ง ๋ค๋ฅธ ํฌํธ ์ฌ์ดํธ ๊ฒ์ ์์ง์ ํฌ๋กค๋ฌ์์๋ ์ ๋๋ก ์น ์ฌ์ดํธ์ ๋ฐ์ดํฐ๊ฐ ์์ง๋๊ฒ ํ๋ ค๋ฉด ๋ณ๋์ ๋ณด์ ์์
์ด ํ์ํ๋ค.
- ์: sitemap ์์ฑ (๊ฒ์ ์์ง์ ๊ฒ์ ๋ ์์ ์ ์น ์ฌ์ดํธ ์ฝํ
์ธ ์ ํฌ๋กค๋ง ๋ฐ ์ธ๋ฑ์ฑ์ ๋๋ ํ์ด์ง ๋ชฉ๋ก ํ์ผ)
SSR (Server-Side-Rendering)
์๋ฒ ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ฃผ์ฒด!
์ด๋ฏธ์ง ์ถ์ฒ
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋งค๋ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ์๋ฒ์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ์ ์ ์ธ ์น์ฌ์ดํธ์์ ์๊ฐ์ ๋ฐ์ ๋์
๋ ๋ฐฉ์์ด๋ค.
- ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ๋งค๋ฒ ์๋ฒ์์ ์๋ก์ด View ํ๋ฉด์ ์์ฑํ์ฌ ์ ๊ณตํ๋ค.
- ์๋ฒ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ HTML ํ์ผ๊ณผ ์ด๋ฅผ ๋์ ์ผ๋ก ์ ์ดํ ์ ์๋ ์์ค์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค.
- ํด๋ผ์ด์ธํธ ์ธก์์๋ HTML ํ์ผ์ ๋ฐ์ ๋ฐ๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ ์๋ค.
- ๊ด๋ จ ์น ํ๋ ์์ํฌ:
Next.js, Flask
์์ธํ ์์๋ณด๊ธฐ
- ํด๋ผ์ด์ธํธ์์๋ ๋ธ๋ผ์ฐ์ ์์ ๋ณผ ํ์ผ์ ์์ฑํ ๋ก์ง์ ํฌํจํ ํ์ผ๋ง์ ์๋ฒ์ ์ฌ๋ฆฐ๋ค.
- ์๋ฒ์์๋ HTML, CSS, JS๋ฅผ ๋ ๋๋งํ๋ ๋ก์ง์ ์คํํด ์ต์ข
ํ์ผ์ ๋ง๋ค์ด ์ด๋ฏธ DOM ๊ตฌ์ฑ์ด ์๋ฃ๋ ํ์ผ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
- ์๋ฅผ ๋ค์ด ๋ฐฑ์๋๊ฐ Spring ๊ธฐ๋ฐ์ด๋ฉด Java, django ๊ธฐ๋ฐ์ด๋ผ๋ฉด Python, Node.js์ ๊ฒฝ์ฐ JS๋ฅผ ์ฌ์ฉํ์ฌ SSR๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ๋ก์ง์ ์์ฑํ๋ค.
- ์ด๋ฅผ ํตํด ๋ฐฑ์๋์์๋ ์์ฒญ URL์ ๋์ํ๋ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ์คํํด ์์ฒญ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ง(DB์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, API์์ ๋ฐ์ดํฐ ํธ์ถํ๊ธฐ)ํ๊ณ , HTML ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋ค.
- ์ดํ ์๋ฒ ์ธก์์ ๋ ๋๋ง ์์ง์ ์ฌ์ฉํด HTML, CSS, JS ํ์ผ๋ค์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ผ ์ ์๋ ํํ๋ก ์ฒ๋ฆฌํ ๋ค ์ ์กํ๋ค.
- ์๋ฒ ๋จ์์ ๋ชจ๋ data fetching ์์
๊ณผ ๋ ๋๋ง ์์
์ ์ฒ๋ฆฌํ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๋ JS ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๋ ๋์ ๋ฏธ๋ฆฌ ํ๋ฉด์ ๋ ๋๋งํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
- ์ฌ์ฉ์ ์
์ฅ์์๋ ๋ก๋ฉ ๋ฐ๋ Skeleton UI๋ฅผ ๋ณด์ง ์๊ณ ๋ ๋ฐ๋ก ๋ ๋๋ง๋ ์น ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค.
- ์ฝ๋๋ฅผ ํตํด ๋ณด๋ฉด, ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ์๋์ ๊ฐ์ด ์ด๋ฏธ ๋ค ๊ทธ๋ ค์ง DOM ํ์ผ์ ๋ฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.
// index.html
<html>
...
<body>
<h1>WOW!:D</h1>
<div>
<p>ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ด์ฉ์ด ๋ชจ๋ ๋ค์ด์์ต๋๋ค!</p>
</div>
</body>
</html>
โ๏ธ SSR์ ๋จ๊ณ
-
์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ณด๋ธ๋ค.
-
์๋ฒ๋ ๋ฆฌ์์ค๋ฅผ ํ์ธํ๊ณ , ์ปดํ์ผ๋งํ์ฌ ์ฆ์ ๋ ๋๋ง ๊ฐ๋ฅํ HTML ํ์ผ์ ์์ฑํ๋ค.
-
ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋๋ ์๊ฐ ์ด๋ฏธ ๋ ๋๋ง ๋ ์ค๋น๊ฐ ๋์ด ์์ผ๋ฏ๋ก HTML์ ์ฆ์ ๋ ๋๋ง๋๋ค.
- ์ด๋ JS ํ์ผ์ ์ฝํ๊ธฐ ์ ์ด๋ฏ๋ก ์ฌ์ดํธ ์์ฒด์ ์กฐ์์ ๋ถ๊ฐ๋ฅํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ JS ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.
- ๋ค์ด๋ก๋ ๋๋ ์ค์ ์ฌ์ฉ์๋ ์ปจํ
์ธ ๋ฅผ ๋ณผ ์๋ ์์ง๋ง ์กฐ์์ ํ ์ ์๋ค.
- ์ด๋ ํ์ด์ง์์๋ ์ฌ์ฉ์์ ์กฐ์์ ๊ธฐ์ตํ๊ณ ์๋๋ค.
-
๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ด๋ก๋ ๋ JS ํ๋ ์์ํฌ๋ฅผ ์คํํ๋ค.
-
JS๊น์ง ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผ๋ง ๋ ํ์๋ ๊ธฐ์ต๋ ์ฌ์ฉ์ ์กฐ์์ด ์คํ๋๊ณ , ์ํธ ์์ฉ์ด ๊ฐ๋ฅํ ์น ํ์ด์ง๊ฐ ๋๋ค.
โค๏ธโ๐ฅ ์ฅ์
CSR์ ๋นํด ๋น ๋ฅธ ์ฒซ ํ์ด์ง ๋ก๋ฉ ์๋
์ด๋ฏธ์ง ์ถ์ฒ
- CSR ๋ฐฉ์๋ณด๋ค ์ฒ์ ์๋ฒ์ ์์ฒญํ๋ ๋ฐ์ดํฐ์ ์์ด ์๋์ ์ผ๋ก ์ ๋ค.
- ์ฒซ ํ์ด์ง์ ํด๋น ํ๋ ๋ฌธ์๋ง ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๋ฌํ์ฌ ๋ ๋๋ง์ํค๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ CSR์ ๋นํด ๋น ๋ฅด๋ค.
SEO์ ์ ํฉ
- CSR๊ณผ ๋ฌ๋ฆฌ ๋ชจ๋ ์ปจํ
์ธ ๊ฐ HTML ํ์ผ์ ๋ด๊ฒจ์ ์ค๊ฒ ๋๋ฏ๋ก ํจ์จ์ ์ธ SEO๊ฐ ๊ฐ๋ฅํ๋ค.
๋ณด์์ ์ฐ์
- ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์๋ฒ ์ธก ์ธ์
์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํ์ฌ CSR ๋ฐฉ์์ ๋นํด ๋ณด์์ด ์ฐ์ํ๋ค.
ํ๋ก ํธ์๋ ์์ญ๊ณผ ๋ฐฑ์๋ ์์ญ์ ์์ ํ ๋ถ๋ฆฌํ์ฌ ์์ฐ์ฑ ํฅ์ ๊ฐ๋ฅ
์ด๋ฏธ์ง ์ถ์ฒ
- CSR ๋ฐฉ์์์๋ CSR ํ์ด์ง๋ฅผ ํ๋ก ํธ์๋์์, SSR ํ์ด์ง๋ ๋ฐฑ์๋์์ ๊ฐ๋ฐํด์ผ ํ๋ค.
- ํ์ง๋ง SSR ํ๊ฒฝ์ ๊ตฌ์ถํ ๊ฒฝ์ฐ ํ์ด์ง๋ฅผ ์จ์ ํ ํ๋ก ํธ์๋์์ ๊ฐ๋ฐํ๊ฒ ๋๋ฏ๋ก ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฐ์ํ๋ ๋ถํ์ํ ์ปค๋ฎค๋์ผ์ด์
์ ์ค์ผ ์ ์๋ค.
- ์ด๋ฅผ ํตํด ๋ฐฑ์๋์์๋ API ๊ฐ๋ฐ ๋ฐ ๋ฐ์ดํฐ ํ์ฉ์๋ง ์ง์คํ ์ ์๊ฒ ๋์ด ์ปค๋ฎค๋์ผ์ด์
๋น์ฉ์ด ์ค๊ณ , ์์
์์ฑ๋ ๋ฐ ์ด์ ๋์ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค.
๐ ๋จ์
์ด๊ธฐ ๋ก๋ฉ ์ดํ ํ์ด์ง ์ด๋ ์ ์๋ ์ ํ
- ํ์ด์ง๋ฅผ ์ด๋ํ ๋๋ง๋ค ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ฒ ๋์ด ์๋๊ฐ ๋๋ฆฌ๋ค.
Blinking Issue
- ์ ์ ์ธ ์ฌ์ดํธ์ฒ๋ผ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๋งํฌ๋ก ๊ฐ๊ฒ ๋ ๊ฒฝ์ฐ ์ ์ฒด HTML ๋ฌธ์๋ฅผ ๋ค์ ๋ฐ์์์ผ ํ๋ค.
- ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจ์ ํ ๊ฒฝ์ฐ ์ ์ฒด ์น ์ฌ์ดํธ๋ฅผ ์๋ฒ์์ ๋ค์ ๋ฐ์์์ผ ํด์ ํ๋ฉด์ด ์์ด์ก๋ค๊ฐ ๋ํ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ UX์ ๊ด์ ์์ ์ข์ง ์๋ค.
์๋ฒ ๊ณผ๋ถํ ๋ฐ ๋น์ฉ ๋ฌธ์
- ์๋ฒ๊ฐ ๊ฐ ์ฌ์ฉ์์ ํด๋ฆญ์ ๋ฐ๋ฅธ HTML ๋ฌธ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก, ์ดํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์๊ฐ ๋ง์์๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ํ์๊ฐ ๋ง์์ ธ ๊ณผ๋ถํ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ์๋ฒ์ ์์์ ์ฌ์ฉํ๊ฒ ๋๋ฏ๋ก ์๋ฒ์ ์ฑ๋ฅ์ ๋ฐ๋ผ CSR๋ณด๋ค ์ฒ๋ฆฌ ์๋๊ฐ ๋จ์ด์ง ์ ์๋ค.
- ๋งค๋ฒ ์๋ฒ์์ ๋ก์ง์ ์คํํ๋ ๋น์ฉ์ด ๋ฐ์ํ๊ณ , ๋์ ์ปจํ
์ธ ๊ฐ ๋ง์ ๊ฒฝ์ฐ ์บ์ฑ ๋ํ ๋ฌดํจํ๋๋ฏ๋ก CSR์ ๋นํด ์๋ฒ ๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ ์ ์๋ค.
TTV์ TTI ๊ฐ ๊ณต๋ฐฑ ์๊ฐ ๋ฐ์
- HTML ํ์ผ์ ๋ฐ์์์๋ ๋์ ์ผ๋ก ์น์ ์ ์ดํ๋ JS ํ์ผ์ ๋ฐ์ง ๋ชปํด ์ฌ์ฉ์๊ฐ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ํด๋ฆญํด๋ ์น์ด ๋ฐ์ํ์ง ์๋ ๋ฌธ์ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
- ์ต์ข
์ ์ผ๋ก JS ํ์ผ์ด ๋์ฐฉํด์ผ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์ํธ์์ฉ์ด ๊ฐ๋ฅํด์ง๋ค.
- ์ด ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ๋ณผ ์ ์๋ ์๊ฐ(TTV)๊ณผ ์ค์ ๋ก ์ธํฐ๋ ์
์ด ๊ฐ๋ฅํ ์๊ฐ(TTI) ์ฌ์ด์ ๊ณต๋ฐฑ ์๊ฐ์ด ์๊ธด๋ค.
๐ฅ Hydration
๐ฅ ๋ ๋๋ง์ด ์ ๋ง ๋งค๋ฒ ์์ฒญํ ๋๋ง๋ค ํ์ํ๊ฐ์?
๐ References
์ฐธ๊ณ ์๋ฃ ๋ชจ์