SSR & CSR
Last updated
Last updated
์น ๊ฐ๋ฐ์๋ผ๊ณ ํ๋ฉด ํ์์ ์ผ๋ก ์์์ผ ํ๋ ๋๊ฐ์ง์ ์ฃผ์ ๊ฐ ๋ฐ๋ก CSR๊ณผ SSR์ด๋ค. ์ด๋ MPA, SPA๊ณผ ๋ฐ์ ํ ์ฐ๊ด์ ๊ฐ์ง๊ณ ์๋ค.
CSR๊ณผ SSR์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋ ๋ ๋๋ง์ ๋ฐฉ์์ ์๋ค. ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๊ฒ์ HTML์ธ๋ฐ ์ด๊ฒ์ ๋๊ฐ ํ๋๋ ์ฃผ์ต์ ๋ฐ๋ผ์ CSR๊ณผ SSR๋ก ๋๋๊ฒ ๋๋ค.
๋๋๋ง: ์๋ฒ๋ก๋ถํฐ ์์ฒญํด์ ๋ฐ์ ๋ด์ฉ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํ์ํด์ฃผ๋ ๊ฒ.
์๋ฒ์์ client์ request์ ์ํด index.html ํ์ผ์ client์ ์ ์ก
body ๋ด๋ถ์๋ ์๋์ ๊ฐ์ ์ฝ๋๋ง ๋ค์ด์์(์์)
๊ธฐ๋ณธ์ ์ผ๋ก ๋น html์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ์ผ๋ก client๋ ๋น ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ , app.js๋ฅผ ์๋ฒ์ ์์ฒญ, ์๋ฒ๋ ๋ค์ app.js๋ฅผ client์ ๋ณด๋ด์ค
์ถ๊ฐ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉด ์๋ฒ์ ์์ฒญํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ ๋ค์์ Data(JSON)๊ณผ app.js๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด์ ๋์ ์ผ๋ก HTML์ ์์ฑํจ
client๊ฐ ์๋ฒ์ ์ฝํ ์ธ ๋ฅผ ์์ฒญํ๋ฉด ๋๋๋ง ์ค๋น๋ฅผ ๋ง์น HTML, JS code๋ฅผ ์น ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋
์น ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์์ ๋ฐ์ HTML๋ฅผ ๋๋ํจ, ์ด๋ ์ฌ์ฉ์๋ ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ง๋ง JS code๋ฅผ ์์ง ๋ค์ด๋ก๋ ๋ฐ์ง ์์๊ธฐ ๋๋ฌธ์ interaction์ด ๋ถ๊ฐ๋ฅ ํจ
์น ๋ธ๋ผ์ฐ์ ๊ฐ JS code๋ฅผ ๋ค์ด๋ก๋๋ฅผ ์งํํ๊ณ ๋ค์ด๋ก๋๊ฐ ๋๋๋ฉด HTML์ JS๋ก์ง์ ์ฐ๊ฒฐํจ
์ดํ ์น ๋ธ๋ผ์ฐ์ ๋ interaction์ด ๊ฐ๋ฅํด์ง
์น ํ์ด์ง ๋ก๋ฉ ์๊ฐ
์ฒซ ํ์ด์ง ๋ก๋ฉ ์๊ฐ: CRS์ธ ๊ฒฝ์ฐ HTML, CSS์ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ค์ ํ ๋ฒ์ ๋ถ๋ฌ์ค๊ณ ๋ฐ๋ฉด SSR์ ํ์ํ ๋ถ๋ถ์ HTML๊ณผ ์คํธ๋ฆฝํธ๋ง ๋ถ๋ฌ์ค๊ฒ ๋๋ฏ๋ก ํ๊ท ์ ์ผ๋ก SSR์ด ๋ ๋น ๋ฅด๋ค.
๋๋จธ์ง ๋ก๋ฉ ์๊ฐ: CSR์ ์ด๋ฏธ ์ฒซ ํ์ด์ง ๋ก๋ฉํ ๋ ๋๋จธ์ง ๋ถ๋ถ์ ๊ตฌ์ฑํ๋ ์ฝ๋๋ฅผ ๋ฐ์์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด์ง๋ง, SSR์ ์ฒซ ํ์ด์ง๋ฅผ ๋ก๋ฉํ ๊ณผ์ ์ ์ ํํ๊ฒ ๋ค์ ์คํํ๊ธฐ ๋๋ฌธ์ CSR์ ๋นํด ๋๋ฆฌ๋ค.
SEO ๋์
CSR ๋ฐฉ์: ๋๋ถ๋ถ์ ์น ํฌ๋กค๋ฌ, ๋ด๋ค์ JS๋ฅผ ์คํ์ํค์ง ๋ชปํ๊ณ HTML์์๋ง ์ฝํ ์ธ ๋ฅผ ์์งํ๊ธฐ ๋๋ฌธ์ ๋น ํ์ด์ง๋ก ์ธ์ํ๊ฒ ๋๋ค.
SSR ๋ฐฉ์: View๋ฅผ ์๋ฒ์์ ์ ๋ถ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ HTML์ ๋ชจ๋ ์ฝํ ์ธ ๊ฐ ์ ์ฅ๋์ด ์์ด SEO๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ ์๋ค.
์๋ฒ ์์ ์ฌ์ฉ: SSR์ด ํ์ด์ง๊ฐ ๋ฐ๋ ๋ ๋ง๋ค ์๋ฒ์ ์์ฒญ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์์์ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
Blinking Issue: SSR์ธ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจ์ ํ๊ฒ ๋๋ฉด ์ ์ฒด ์น์ฌ์ดํธ๋ฅผ ๋ค์ ์๋ฒ์์ ๋ฐ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ด ์์ด์ก๋ค ๋ํ๋๋ค. ์ด๋ UX๊ด์ ์์ ๋ดค์ ๋ ์ข์ง ์๋ค.
์ง๊ธ๊น์ง ์ดํด๋ณธ ๊ฒฐ๊ณผ CSR์ SPA๊ณผ SSR์ MPA๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ์ ๋ต์ ๊ฐ์ง ์๋ค. SPA๋ ์๋ฒ๋ก๋ถํฐ ์ฒ์์๋ง ํ์ด์ง๋ฅผ ๋ฐ์์ค๊ณ ์ดํ์๋ ๋์ ์ผ๋ก DOM์ ๊ตฌ์ฑํ์ฌ ๋ ๋๋ง ๋๋ ํ๋ฉด์ด ๋ฐ๋๊ฒ ํ๋ค. ์ฌ๊ธฐ์
๋์ ์ผ๋ก DOM์ ๊ตฌ์ฑํ์ฌ ๋ ๋๋ง ๋๋ ํ๋ฉด์ด ๋ฐ๋๊ฒ ํ๋ค.
๋ถ๋ถ์ด CSR์ด๋ค. ๋ค์ ๋งํด SPA๋ ์ฒ์์๋ง ํ์ด์ง๋ฅผ ๋ฐ์์ค๊ณ ์ดํ์๋ ๋ฐ์์ค์ง ์๋๋ฐ ์ด๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ฐ์ดํฐ๊ฐ ์์ ๋๊ณ ์กฐํ๋๊ฒ ํ๊ณ ์ถ์ด CSR์ด๋ ๋ฐฉ์์ ์ฑํํ ๊ฒ์ด๋ค. SPA์ MPA๋ ํ์ด์ง๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฐ๋ ํ ๊ฐ๋ง ์ฐ๋์ ์ฐจ์ด์ด๊ณ CSR๊ณผ SSR์ ๋ ๋๋ง์ ์ด๋์ ํ๋์ ์ฐจ์ด์ด๋ค. SSR๊ณผ CSR์ MPA๊ณผ SPA๋ฅผ ๊ตฌ์ฑํ๋ ์์์ผ ๋ฟ์ด๋ค.
TTV: Time To View์ ์ฝ์๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์๋ฒ์์ ๋ฐ์ HTML์ด ๋ณด์ฌ์ง๋ ๋๋ฅผ ๋งํ๋ค.
TTI: Time To Interact์ ์ฝ์๋ก ์น ๋ธ๋ผ์ฐ์ ๊ฐ JS code๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ๋์ ์ธ ๋์๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋๋ ๋๋ฅผ ๋งํ๋ค.
CRS์์๋ TTV ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ๋ณผ ์ ์์์ ๋์์ TTI ํด๋ฆญ์ ํ๊ฑฐ๋ ์ธํฐ๋ ์ ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
SSR์์๋ TTI ์ด์ ์ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ณผ ์ ์๋ค. ํ์ง๋ง JS code๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๊น์ง๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ธํฐ๋ ์ ์ ๋ถ๊ฐ๋ฅํ๋ค.
Next.js
์๋ฒ ์ฌ์ด๋ ๋๋๋ง(SSR), ์ ์ ์น ํ์ด์ง ์์ฑ(SSG) ๋ฑ ๋ฆฌ์กํธ ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ฅ๋ค์ ๊ฐ๋ฅ์ผ ํ๋ Node.js ์์์ ๋น๋๋ ์คํ ์์ค ์น ๊ฐ๋ฐ ํ๋ ์์ํฌ์ด๋ค.
Gatsby
์ด๋ฒ ๋ด์ฉ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ฒ์ ๊ณต๋ถํ์๋ MPA, SPA๊ณผ ๋ง์ ๋ด์ฉ์ด ๊ฒน์ณ MPA๊ณผ SSR, SPA๊ณผ CSR์ด ๋๊ฐ์ ๊ฒ์ด ์๋๊ฐ ํ๋ ๊ถ๊ธ์ ์ด ์๊ฒผ๋ค. ๊ณต๋ถํ๋ฉด์ MPA๊ณผ SPA๋ Application์ผ๋ก ํด๋น Application์ด ์ด๋ป๊ฒ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋๋์ ๋ฐ๋ผ ๊ทธ ๋ฐฉ๋ฒ์ด SSR์ธ์ง CSR์ธ์ง๋ก ๋๋๋ค๊ณ ์ดํด๋ฅผ ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ ๋ ธ๋ง๋์ฝ๋์์ NextJS๋ฅผ ๋ฐฐ์ฐ๊ณ ์๋ค. ์ง๊ธ์ ์คํฐ๋ ๋๋ฌธ์ ์ง๋๋ฅผ ํํ ๋๊ฐ๊ณ ์์ง๋ ๋ชปํ์ง๋ง NextJS๊ฐ React๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ผ๋ ๊ฒ์ ์๊ณ ์์๋ค. ํ์ง๋ง NextJS๊ฐ CSR์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ญํ ์ ํ๋ ๊ฒ๊น์ง๋ ์์ธํ ์์ง ๋ชปํ์๋ค. ๋จ์ง ์ข๋ React๋ฅผ ํธํ๊ฒ ๊ฐ๋ฐ์ ํ ์ ์๋ ๊ฒ... ์ด๋ผ๊ณ ๋ง ์๊ณ ์์๋ค. ์ด๋ ๊ฒ ์ค๋๋ ํ๋๋ฅผ ์๊ณ ๊ฐ๋ ๋ฟ๋ฏํ ๋ง์์ด ๋ค๊ณ ,,, ์ง๊ธ๊น์ง ์ผ๋ง๋ ๋์ถฉ ๊ณต๋ถ๋ฅผ ํ๋์ง ์ฐธ... SSR๊ณผ CSR์ ๋ํด ๊ณต๋ถํ๋ฉด์ ์ด๋ฒ์๋ ์ ํ๋ธ ์์๋ ๋ง์ด ๋ดค๋ค. ์๋์ ์ ํ๋ธ๊ฐ ๋์์ด ๋ง์ด ๋์๋ค. ๋์ค์ ๋ค์ ๋ณด๋ฉฐ ๊ฐ๋ ์ ํ์คํ ์ก๋๋ก ํ์.
CSR/SSR, SPA/MPA, PWA Client side - Server side rendering React ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง / ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ด๋? SSR๊ณผ CSR์ ์ฐจ์ด SPA, CSR๊ณผ SSR, SEO
๋์์ด ๋ง์ด ๋์๋ ์ ํ๋ธ ๐ฌ
๐ 2022-07-14