June 11, 2021
๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ค๋ฉด์ ์ฌ์ฉํ gatsby SSG๊ฐ ๋ฌด์์ธ์ง, SSG๋ ์ ์๊ฒจ๋ฌ๋์ง ์์๋ณด๋๋ก ํ์.
SSG๋ฅผ ์ดํดํ๊ธฐ ์ํด MPA/SPA, SSR/CSR์ ๋จผ์ ์ดํด๋ณผ ๊ฒ์ด๋ค.
MPA(Multiple Page Applicaiton)๋ ๋ค์์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋์ด ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์ ์ ๋ฆฌ์์ค๋ฅผ ๋ฐํํด์ฃผ๋ ๋ฐฉ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค. ๋ฒํผ ํด๋ฆญ๊ณผ ๊ฐ์ ์ฌ์ํ ์์ฒญ์ด ๋ค์ด์๋ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ฆฌ๋ ๋๋ง ํด์ผํ๋ฉฐ, ์ด ๊ณผ์ ์์ ํ๋ฉด ๊น๋นก์ ํ์์ด ๋ฐ์ํ๋ค.
SPA(Single Page Application)๋ ์ต์ด ์์ฒญ์์ ํ์ํ ๋ชจ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ํ๋ฒ์ ๋ค์ด ๋ฐ๊ณ , ์ดํ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋น๋๊ธฐ ํต์ (AJAX)์ ํตํด ํ์ด์ง ์ ์ฒด๋ฅผ ๋ฆฌ๋ ๋๋ง ํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ๋ถ๋ถ๋ง ๊ฐฑ์ ํ๋ ๋ฐฉ์์ด๋ค.
MPA๋ ์ฌ์ ์ ์์ฑ๋ ์ ์ ํ์ด์ง๋ค์ ์๋ฒ๊ฐ ๊ฐ๊ณ ์๋ค๊ฐ (์ต์ด ์์ฒญ ์ดํ์) ์์ฒญ์ด ๋ค์ด์ฌ ๋ ๊ทธ์ ๊ฑธ๋ง๋ ํ์ด์ง๋ฅผ ๋ฐํํ๋ ํ์์ด๋ค. ์ด๋ ์๋ฒ์ธก์์ ๋ ๋๋ง์ด ์๋ฃ๋์ด ์ต์ข ๋ฌธ์๋ฅผ ๋ฐํํ๋ ํํ๋ค. ์ฆ, MPA๋ SSR ๋ฐฉ์์ผ๋ก ๋ ๋๋ง๋๋ค.
SPA๋ ๋ธ๋ผ์ฐ์ ์์์ ๋์ํ๋ ์ฑ์ผ๋ก ์ต์ด ์์ฒญ์ ์๋ฒ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ HTML ๋ฌธ์๋ฅผ ๋ฐํ์ผ๋ก ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ๋จ์์ ๋ ๋๋ง์ ์งํํ๋ค. ์ฆ, SPA๋ CSR ๋ฐฉ์์ผ๋ก ๋ ๋๋ง๋๋ค. ์ต์ด ์์ฒญ ์ดํ ์ฌ์ฉ์ค์๋ ์๋ก์ด ํ์ด์ง๋ฅผ ์์ฒญํ์ง ์๋๋ค. AJAX๋ฅผ ํตํด ์๋ฒ์ ๋ฐ์ดํฐ๋ง ์ฃผ๊ณ ๋ฐ์ ๋ฟ์ด๋ค.
์ข์ ์ฌ์ฉ์ ๊ฒฝํ.
๊ฐ๋ฐ์ ์นํ์
local storage๋ฅผ ํจ๊ณผ์ ์ผ๋ก cacheํ ์ ์๋ค.
SEO ๊ด์ ์์ ๋ถ๋ฆฌํ๋ค.
๋ณด์์ ์ทจ์ฝํ ํธ(MPA์ ๋น๊ตํ์ ๋)
๊ฐ๋ฐ์ ๋ณต์ก์ฑ.
SSR(Sever Side Rendering)
๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ HTML ํ์ผ์ ์๋ฒ์์ ๋ ๋๋ง์ ๋ง์น ํ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ก๋ฉ ์๊ฐ์ด ์งง๋ค. ๊ทธ๋ผ์๋ JS ํ์ผ์ ๋ค์ด๋ฐ๊ณ ์ ์ฉํ๋ ๋์ ์ธํฐ๋์ ํ ์ ์๋ค๋ ์ฌ์ค์ ์ ์.
CSR(Client Side Rendering)
ํ๋์ ํ์ด์ง์์ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ํ์ด์ง์ ์ผ๋ถ ํน์ ์ ์ฒด๋ฅผ ๊ฐ์์น์ฐ๋ ๊ฒ์ด๋ค. ์ฌ๋ฌ ๊ฐ์ .jsํ์ผ์ด ํ๋์ ๊ฑฐ๋ํ .jsํ์ผ๋ก ๋ฒ๋ค๋ง๋์ด SPA๋ฅผ ์ด๋ฃฌ๋ค๊ณ ๋ณด์๋ ๋ฌด๋ฐฉํ๋ค.
๋ ๋๋ง ๋ฐฉ์์ ์ธ๋ถํํ์๋ฉด ์์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ์ฐธ๊ณ ๋ง ํ๋๋ก ํ์.
์ง๊ธ๊น์ง ์ดํด๋ณธ MPA(SSR), SPA(CSR)์ ์ฅ์ ์ ๋ฒ๋ฌด๋ฆฌ๊ณ ์ถ๋ค. SPA ๊ตฌ์กฐ๋ก ์ ์ํ์ฌ ํ๋ฉด ๊น๋นก์ ์์ด ๋ค์ํ ์ธํฐ๋์ ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด๋ด๋ฉด์๋, SSR ๋ฐฉ์์ฒ๋ผ ์ด๊ธฐ ๋ก๋ฉ์ด ๋น ๋ฅด๊ณ SEO์๋ ๋ฌด๋ฆฌ๊ฐ ์๋ ์น ์ฌ์ดํธ๋ฅผ ์ ์ํ ์ ์๋ค๋ฉด ๋ํ ๋์๊ฐ ์๊ฒ ๋ค.
์ด๋ด ๋ React์ ๊ฐ์ CSR์ ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Gatsby ๋๋ Next.js ๊ฐ์ SSG ํ๋ ์์ํฌ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋๋ค. Gatsby์ Next.js๋ ๊ตฌ์ฒด์ ์ธ ์๋ ๋ฐฉ์์ ๋ค๋ฅด์ง๋ง, pre-rendering ๊ธฐ๋ฒ์ ํตํด ์ ์ ์ผ๋ก ์นํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋๊ณ ์๋ฒ์ ๋ฐฐํฌํด๋์๋ค๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ตํ๋ ๋ฐฉ์์ผ๋ก ์ด๊ธฐ ๋ก๋ฉ์ ๋จ์ถํ๋ ๊ตฌ์กฐ์ธ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ์ฆ, ์ต์ด ์์ฒญ์ SSR ๋ฐฉ์์ฒ๋ผ ๋น๋ ํ์์ pre-renderํ ํ์ด์ง๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๊ณ , ์ดํ์๋ CSR ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
gatsby ๊ณต์ ํํ์ด์ง์์ ์ ์ํ SSG๋, MarkDown์ ๋น๋กฏํ ํ ์คํธ ํ์ผ ๋ฑ์ source๋ก ๋ฐ์ HTML ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ๋ค. SSG๋ ์์ ์ธ๊ธํ pre-rendering ๊ธฐ๋ฅ ์ด์ธ์๋ ์น ํ์ด์ง ๊ฐ์ค, SEO ์ต์ ํ, ๋ณด์ ๋ฑ ์ฌ๋ฌ ์ญํ ์ ์ํํ๋ ๊ฒ ๊ฐ๋ค.
์ ํต์ ์ธ ์น ์ฌ์ดํธ ๊ตฌ์กฐ ๋ฐฉ์์ธ MPA, ํ๋์ ์ธ ์น ์ฌ์ดํธ ๊ตฌ์กฐ ๋ฐฉ์์ธ SPA์ ์ฅ๋จ์ ๊ณผ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํด๋ณด์๋ค. MPA๋ SSR ๋ฐฉ์์ผ๋ก, SPA๋ CSR ๋ฐฉ์์ผ๋ก ๋ ๋๋งํ๋ค๋ ์ ์ ๋ฐฐ์ ๋ค. ๋ง์ฝ ๋น์ ์ด React, Vue, Angular๋ฅผ ์ด์ฉํ SPA ๊ตฌ์กฐ์ ์น์ฌ์ดํธ๋ฅผ ์ ์ํ๋ค๋ฉด CSR ๋ ๋๋ง ๋ฐฉ์์ ๋จ์ ๋ค๊ณผ ๋ง์ฃผํ ๊ฒ์ด๋ค. ์ด๋ gatsby, Next.js, Hugo, Jekyll ๊ณผ ๊ฐ์ SSG์ ๋์์ ๋ฐ์ ์ ์ํ๋ฉด ์ข ๋ ์งฑ์งฑํ ์น ์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ์ด๋ค.
CSR(Client-Side-Rendering) vs SSR(Server-Side-Rendering) (feat. React๋ฅผ ์ค์ ์ผ๋ก)
SSR(Server-Side-Rendering) ๊ทธ๋ฆฌ๊ณ SSG(Static-Site-Generation) (feat. NEXT๋ฅผ ์ค์ฌ์ผ๋ก)
JAMStack๊ณผ SSG (Definition of JAMStack and SSG)
[๊ฐ๋ฐ์์]SSR vs CSR ๋น์ ์ ์ ํ์? (feat. ์น์ ๋ณ์ฒ์ฌ)