#frontend
Written by Paul
JAM Stack ๊ทธ๋ฆฌ๊ณ SPA, CSR, SSR
๋ชฉ์ฐจ
- JAM Stack ์ด๋ ๋ฌด์์ธ๊ฐ?
- JAM Stack์ SSR / CSR๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
- ๊ทธ๋ผ SSR ๋ฐฉ์์ ํ์๊ฐ ์์ด์ง ๊ฒ ์ผ๊น?
1. JAM Stack ์ด๋ ๋ฌด์์ธ๊ฐ?
- J: Javascript
- A: API
- M: Markup
Javascript์ API ๊ทธ๋ฆฌ๊ณ Markup(HTML)์ผ๋ก๋ง ์ด๋ฃจ์ด์ง ์น์ ๊ตฌ์ฑ์ ์ด์ผ๊ธฐ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ SPA ๊ณผ๋ ๋น์ทํ์ง๋ง ๋ค๋ฅด๋ค๊ณ ํ๋ค.
JAM Stack์ ํน์ ๊ธฐ์ (ex. React, Vue)์ ์ฑํํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๊ด์ ์ด๋ฉฐ, ์ด๋ค์ ์ด์ฉํด์ ์น์ฌ์ดํธ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง์ ๋ํ ๊ด์ ์ด๋ค.
JavaScript Client ์ ๋ชจ๋ ์ฒ๋ฆฌ๋ Javascript ์๊ฒ ๋ง๊ธด๋ค. API ๋ชจ๋ ๊ธฐ๋ฅ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ API ๋ก ์ถ์ํํ๋ค. Markup SSG (Static Site Generator) ๋ Template Engine (Webpack ๋ฑ) ์ ์ด์ฉํ์ฌ Markup ์ ๋ฏธ๋ฆฌ ์์ฑํ๋ค.
๋น์ทํ๊ฒ
MERN Stack
์ด ์๋ค.- M: Mongo DB
- E: Express
- R: React
- N: Node.JS
2. JAM Stack์ SSR / CSR๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
React, Angular, Vue์ ๊ฐ์ ๋ชจ๋ ์น ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ค๊ธฐ ์ ์ SSR๋ก ์น ์ฌ์ดํธ๋ฅผ ๋ณด์ฌ์ฃผ์๋ค. SSR์ด๋ผ ํจ์ ๋ธ๋ผ์ฐ์ ์ ์์ฒญ์ ๋ฐ์ ์๋ฒ์์ html์ ๋ด๋ ค์ฃผ์ด ๋ ๋๋ง ํด์ฃผ๋ ๋ฐฉ์์ ๋งํ๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ CSR์ ๋นํด ์๋ฒ์ ์์์ ๋ง์ด ์ฐ๊ฒ ๋๋ฏ๋ก ๊ทธ๋ฐ ๋ถ๋ถ์์ ๋นํจ์จ ์ ์ด๋ค.
๋ํ ์๋์ธก๋ฉด์์๋ CSR์ ์๋ฒ๋ฅผ ํ์ง ์๊ณ ๋ ๋๋ง์ ํด์ฃผ๊ธฐ ๋๋ฌธ์, SSR์ ๋นํด ํจ์จ์ ์ด๋ค.
ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ๋ง๋ค ์๋ฒ์์ html์ ๋ฐ์์ ๋ทฐ๋ฅผ ๊ทธ๋ ค์ฃผ๋ ๊ฒ๋ณด๋ค๋ http request๋ฅผ ํตํด์ ํ์ํ ์์๋ง ๋ฐ์์ ๋ทฐ์ ๊ทธ๋ ค์ฃผ๋ ๊ฒ์ด ์๋์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ React์ ๊ฐ์ SPA (Single Page App) ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ html ๋งํฌ์
๋ถ๋ถ์ ์ฌ์ค์ title ๋ฐ meta ๋ฅผ ๋ํ๋ด๋ head ํ๊ทธ์ body ํ๊ทธ๋ด์์ javascript๋ฅผ ์ด์ฉํ์ฌ ๋ ๋๋ง ํ tag๋ฅผ ์ง์ ํด์ฃผ๋ ํ๊ทธ ์ธ์๋ ๋ง์ ๋ถ๋ถ์ด ๋น์ด์๋ค.
SPA ๋ฐฉ์์ ์๋ฒ์์ ์์กดํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ทธ๋ ค์ฃผ๋ ๋ฐฉ์์์ ๋ง์ด ํํผํ ๋ฐฉ์์ด๋ค.
์๋ฒ์์ html์ ๊ทธ๋ฆฌ๋๋ฐ ํ์ํ ์์์ ๋ชจ๋ ๋ฐ์์ค๋ SSR ๋ฐฉ์์์ ์๋ฒ์์๋ ํ์ํ ์์(ํด๋ผ์ด์ธํธ์ ๋ถ๋ฆฌ๋ ์๋ฒ API๋ฅผ ํตํด์)๋ง์ ๋ฐ์์ค๋ฉฐ html์ ๊ธฐ๋ณธ ํ ๋๋ง์ ๋ด๋น ํ๋ฉฐ ๋๋จธ์ง ํด๋ผ์ด์ธํธ์์ ๋ณด์ฌ์ฃผ๋ ๋ชจ๋ ๋ทฐ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ์ css๊ฐ ๋ด๋นํ๋ค.
3. ๊ทธ๋ผ SSR ๋ฐฉ์์ ํ์๊ฐ ์์ด์ง ๊ฒ ์ผ๊น?
SPA๋ฅผ ํตํ CSR ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ๋๊ฐ์ง ๋จ์ ์ ๊ฐ์ง๋ค.
- SSR์ ๋นํด์ ์ฒซ ๊ทธ๋ฆผ์ ๊ทธ๋ ค์ฃผ๊ธฐ ์ ๊น์ง ๋๋ ์ด๊ฐ ๊ฑธ๋ฆฐ๋ค.
- HTML์ด ๊ฑฐ์ ๋น์ด์๊ธฐ ๋๋ฌธ์, SEO (๊ฒ์์์ง ์ต์ ํ)์ ์ข์ง ์๋ค.
SPA๋ฅผ ์ฌ์ฉํ CSR ๋ฐฉ์์ ์ ๋๊ฐ์ง ๋จ์ ์๋ ๋๋ฌด๋ ๋งค๋ ฅ์ ์ธ ์คํ์ด๊ธฐ ๋๋ฌธ์, ์ ๋๊ฐ์ง ๋จ์ ์ ๋ณด์ํ๊ณ ์ ํ๋ ๋ฐฉ์๋ค์ด ๋์ค๊ฒ ๋์๋ค.
์๋ฅผ๋ค๋ฉด ๋ถ๋ถ์ ์ผ๋ก SSR ๋ฐฉ์์ ์ฑํํ Next (React)์ Nuxt (Vue) ๋ฑ์ด ์๋ค.
์ฒซ ํ์ด์ง๋ SSR๋ก ๋ณด์ฌ์ฃผ๊ณ , ๋๋จธ์ง๋ SPA์ javascript๋ฅผ ์ฌ์ฉํ์ฌ CSR๋ก ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ด๋ก์จ ๋จ์ 1๋ฒ์ ๋ณด์ํ์ฌ ์ฒซ ํ์ด์ง๋ ์์ฑ๋ html์ ๋ณด์ฌ์ฃผ์ด
First meaningful paint
์ ์๋๋ฅผ ํฅ์์ํค๊ณ ๋จ์ 2๋ฒ์ ๋ณด์ํ์ฌ ๊ฒ์ ๋ด์ด html์ ํฌ๋กค๋ง ํด์ SEO๋ฅผ ํฅ์ ์์ผฐ๋ค.