์ฌ์ ๊ฐ๋ ์ ๋ฆฌ
CSR๊ณผ SSR์ ๋ํด ๊ณต๋ถํ๊ธฐ ์ ์ ์์๋์ด์ผ ํ๋ ์ฌ์ ์ง์์ ๋ํด ๋จผ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
1. MPA์ SPA
โถ MPA (MultiPage Application)
- ์ ํต์ ํ์ด์ง Lifecycle, ํญ์ ์ด๋ํ ๋ (๋งํฌ ํด๋ฆญ ์) ๋ง๋ค ์๋ฒ๋ก๋ถํฐ ์๋ก์ด HTML ํ์ผ์ ๋ฐ์์์ ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ก ๋ ๋๋ง ํ๋ ๋ฐฉ์
- ๋ ๋๋ง ๋ฐฉ์์ผ๋ก SSR์ ์ฌ์ฉ
โถ SPA (Single Page Application)
- ํ๋์ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ , ํ์ด์ง๊ฐ ์ ์ฒด์ ์ผ๋ก ๋ ๋๋ง ๋์ง ์๊ณ ํ์ํ ๋ถ๋ถ๋ง ๋์ ์ผ๋ก ๋ ๋๋ง ๋๋ ๋ฐฉ์
- ๋ ๋๋ง ๋ฐฉ์์ผ๋ก CSR์ ์ฌ์ฉ
2. SPA ์ฌ์ฉ๊น์ง์ ์น์ ์ญ์ฌ
โถ ์์
- Static Site(์ ์ ์ธ ํ์ด์ง)๋ก ์ฃผ๋ก ๊ตฌ์ฑ๋์ด ์์
- ๋ฐฉ์
- ์๋ฒ์ ์ด๋ฏธ ์ ๋ง๋ค์ด์ง HTML ๋ฌธ์๋ค์ด ์กด์ฌ
- ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท์ ์ฃผ์๋ฅผ ์ ๋ ฅ
- ์๋ฒ์ ์ด๋ฏธ ๋ฐฐํฌ๋์ด ์๋ HTML๋ฌธ์๋ฅผ ๋ฐ์์์ ๋ณด์ฌ์ฃผ๋ ์ ์ ์๊ฒ ๋ณด์ฌ ์ค
- ๋ถํธํ ์
- ํ์ด์ง ๋ด์์ ๋งํฌ๋ฅผ ํด๋ฆญํด์ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ ค๋ฉด HTMLํ์ผ ์ ์ฒด๋ฅผ ์๋ก ๋ฐ์์์ผ ํจ
โถ 1996
- ๋ฌธ์ ๋ด์์ ๋ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ๋ด์ ์ ์๋ <iframe>ํ๊ทธ๊ฐ ๋์ → ๋ฌธ์๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์๊ฒ ๋จ
โถ 1998
- ์ฐ๋ฆฌ๊ฐ ๋ง์ด ์ฐ๋ fetch API์ ์์กฐ์ธ XMLHttpRequest API๊ฐ ๊ฐ๋ฐ๋จ → HTML ๋ฌธ์ ์ ์ฒด๊ฐ ์๋ ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ฒ์์ ๋ฐ์์ฌ ์ ์๊ฒ ๋จ
- ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ js๋ฅผ ์ด์ฉํด์ ๋์ ์ผ๋ก HTML์์๋ฅผ ์์ฑํด์ ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์
โถ 2005
- AJAX(Asynchronous JavaScript And XML) ํ์
- ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์๋ฒ์์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ ์์ฒญ ๊ฐ๋ฅ → ํ์ฌ ๋๋ฆฌ ์ฐ์ด๋ SPA(single page application)๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ค
- ์ง๋ฉ์ผ, ๊ตฌ๊ธ ๋งต์์ ์ฌ์ฉํ๋ ๋ฐฉ์
์ด๋ฌํ ์น์ ๋ฐ์ ์ผ๋ก ์น์ฌ์ดํธ์ ์ฌ์ฉ์ฑ์ด ์ข์์ง์ ๋ฐ๋ผ SPA๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ฒ ๋์๊ณ , ๋์์ ์ฌ์ฉ์์ PC๋ ์ฑ๋ฅ ํฅ์๋๋ฉด์ ์น์ ๋ง์ ๊ฒ๋ค์ ๋ฌด๋ฆฌ ์์ด ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์๋ค.
๋ํ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์คํ๋๊ณ , ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ๊ฐ ํ์ฑ๋๋ฉด์ Angular, React, Vue์ ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ์ถํํ๊ฒ ๋์๋ค. ์ด์ ํจ๊ป ์น์ฌ์ดํธ๋ CSR(Client Side Rendering)์ ์๋๋ก ์ ์ด๋ค๊ฒ ๋๋ค.
CSR๊ณผ SSR
1. CSR (Client Side Rendering)
[STEP]
- ์ ์ ๊ฐ ์น์ฌ์ดํธ์ ์์ฒญ์ ๋ณด๋ธ๋ค. (๋งํฌ๋ ๋ฉ๋ด ํด๋ฆญ)
- ์๋ฒ ๋์ CDN์ผ๋ก ์ ์ HTML ํ์ผ๊ณผ javaScript ๋งํฌ๋ค์ ์ ์ ์๊ฒ ๋น ๋ฅด๊ฒ ์ ๊ณตํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ HTML์ ๋ค์ด๋ก๋ํ ํ javaScriptํ์ผ๋ ๋ค์ด๋ก๋ ํ๋ค.
(์ด๋ ์ ์ ๋ ํ๋ฉด์ ๋ณผ ์ ์๊ณ ๋ก๋ฉ ํ๋ฉด์ ๋ณด๊ณ ์์ ๐) - ๋ธ๋ผ์ฐ์ ๊ฐ javaScript๋ฅผ ๊ฐ์ ธ์จ๋ค.
- JS๊ฐ ์คํ๋๊ณ ajax๋ฅผ ํตํด API ์์ฒญ์ ๋ง๋ค์ด ๋์ ์ปจํ
์ธ ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ด๋ฅผ ํตํด ์ต์ข
์ปจํ
์ธ ๋ฅผ ๋ ๋๋ง ํ๋ค.
(์ด๋ ์ ์ ๋ placeholder๋ฅผ ๋ณด๊ฒ ๋๋ค.) - ์๋ฒ๋ API๊ฐ ์์ฒญํ ๋ฐ์ดํฐ ์์ฒญ์ ์๋ตํ๋ค.
- ์ต์ข
์ปจํ
์ธ ๊ฐ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์์ DOM์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ๋๋ค.
(์ด๋๋ถํฐ ์ ์ ๋ ํ๋ฉด๊ณผ Interaction์ด ๊ฐ๋ฅํด์ง๋ค.)
[ํน์ง]
- Client ์ชฝ์์ data๋ฅผ ์์ฒญํ๋ฉด Server์์ ๋ ๋๋ง์ ํ์ํ ์ฌ๋ฃ(app์ ํ์ํ ๋ก์ง, app์ ๊ตฌ๋ํ๋ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ค์ฝ๋ ๋ฑ)๋ฅผ ๋ฐ์์ Client ์ชฝ์์ HTMLํ๋ฉด์ ๊ตฌ์ฑํ๋ค.
- ์ด๊ธฐ HTML์ <body> ์์ id, root, app์ ํ์ํ jsํ์ผ ์ ๋๋ก ๊ฑฐ์ ๋น์ด์๋ ์ํ์ด๋ค.
- ์ค๋๋ ์ SPA์ธ Angular, React, Vue ๋ฑ์ CSR์ ํด๋น๋๋ค.
[์ฅ์ ]
- ์๋ฒ ์ธก ๋ถํ๊ฐ ์ ๋ค
- Server๋ ๋น์ด์๋ ๋ผ๋๋ง ์๋ HTML์ Client์ ์ ๋ฌํด ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฐ์์๋๊ฐ ๋น ๋ฅด๊ณ UX๋ ์ฐ์ํจ
- Client์์ ์ฐ์ฐ, ๋ผ์ฐํ ๋ค์ ๋ชจ๋ ์ง์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
[๋จ์ ]
- ์ฒซ ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋๋ฌด ๊ธธ๋ค.
- V-dom์ ๋ง๋ค๊ธฐ ์ํด ๋ ๋๋ง์ ํ์ํ ํ์ผ์ ํต์งธ๋ก ๋ค ๋ถ๋ฌ์์ผ ํ๋ค.
- ex) /index, /two ๋ฑ์ ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ํ์ํ ๊ฒ์ ์ฒ์์ ๋ค ๊ฐ์ ธ์์ผ ๋ง๋ค ์ ์์
- SEO(Search Engine Optimization, ๊ฒ์์์ง ์ต์ ํ)์ ์ข์ง ์์ (Low SEO)
- ๊ฒ์ ์์ง(ex ๊ตฌ๊ธ, ๋ค์ด๋ฒ) ๋ฑ์ ์น ํฌ๋กค๋ฌ ๋ก๋ด์ด ์น์ฌ์ดํธ์ html์ ๋ถ์ํด์ ์ด๋ค ๊ฒ์์ด๋ก ์ฐพ์ ์ ์๋ ์ฌ์ดํธ ์ธ์ง ํ๋จํ์ฌ ๊ฒ์ ์ต์ ํ๋ฅผ ํด์ฃผ๋๋ฐ, CSR์ HTML body๋ ๋๋ถ๋ถ ํ ํ ๋น ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ด ๊ณผ์ ์์ ๋ถ๋ฆฌํ๋ค.
- ๊ตฌ๊ธ์์๋ JSํ์ผ์ ์ธ์ํ์ฌ ํ์ด์ง๊ฐ ๋ค ๋ก๋ฉ๋ ํ์ ์น ํฌ๋กค๋ฌ๊ฐ ๋์ํ๋ค๊ณ ํ์ง๋ง ์์ง๊น์ง ์ ์ ๋๋ค.
- ํ์ด์ง ์บ์ฑ์ด ์ ์ ๋๋ค.
- ํด๋ผ์ด์ธํธ์์ ์๋ก ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ ์ฒ์์๋ ๋น ํ๋ฉด์ผ๋ก ์ค๋๊น ์บ์ฑํ ๋ฐฉ๋ฒ์ด ์์
2. SSR (Server Side Rendering)
์์ ๊ฐ์ CSR์ ๋ฌธ์ ์ ์ ๊ฐ์ ํ๊ธฐ ์ํด 1990๋ ๋์ ์ฌ์ฉํ๋ Static Site์์ ์๊ฐ์ ๋ฐ์ SSR์ด ๋ฑ์ฅํ๊ฒ ๋๋ค.
[STEP]
- ์ ์ ๊ฐ ์น์ฌ์ดํธ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ๋ ๋๋ง ํ ์ค๋น๊ฐ ๋ HTML ํ์ผ๋ค์ ๋ง๋ ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ HTML์ ๋น ๋ฅด๊ฒ ๋ ๋๋ง ํ ์ ์๋ค.
(์ด๋ ์ ์ ๋ ์ ์ ์ธ ํ๋ฉด์ ๋ณผ ์๋ ์์ง๋ง, Interaction ํ ์๋ ์๋ค.) - ๋ธ๋ผ์ฐ์ ๋ javaScript๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ๋์ ์ธ ํ๋ฉด์ ๋ง๋ ๋ค.
- ์ ์ ๋ ์ปจํ ์ธ ํ๋ฉด์ ๋ณผ ์๋ ์๊ณ , Interaction๋ ํ ์ ์๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ JS ํ๋ ์์ํฌ๋ฅผ ์คํํ๋ค.
- ๊ทธ๋ค์ ๋ธ๋ผ์ฐ์ ๋ javaScript๋ฅผ ๋ค์ด๋ก๋ํ๊ณ js๋ฅผ ์คํํ๋ฉด์ ํ์ด์ง๋ฅผ ๋ํ์์ผ๋ก ๋ง๋ ๋ค.
[ํน์ง]
- ์๋ฒ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์์ HTML๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๊ฒ ๋๊ณ , ์ด๋ ๊ฒ ์ ๋ง๋ค์ด์ง HTML ํ์ผ์ ๋์ ์ผ๋ก ์กฐ๊ธ ์ ์ดํ ์ ์๋ ์์ค์ฝ๋์ ํจ๊ป ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด์ค๋ค.
- ํด๋ผ์ด์ธํธ์์๋ ์ ๋ง๋ค์ด์ง HTML ๋ฌธ์๋ฅผ ๋ฐ์์์ ์ฌ์ฉ์์๊ฒ ๋ฐ๋ก ๋ณด์ฌ์ค ์ ์๋ค.
[์ฅ์ ]
- CSR๋ณด๋ค ์ฒซ ํ์ด์ง ๋ก๋ฉ์ด ๋น ๋ฆ
- ์๋ฒ์์ ๋ ๋๋ง ์ค๋น๋ฅผ ๋ง์น(๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด) HTML์ด Client๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ํจ์จ์ SEO ๊ฐ๋ฅ
- ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฒ์์ ๋ ๋๋ง ์ค๋น๋ฅผ ๋ง์น(๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด) HTML์ด Client๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ JS๋ฅผ ๋ชจ๋ฅด๋ ์น ํฌ๋กค๋ฌ๋ ์ฒซ ํ์ด์ง๋ฅผ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
[๋จ์ ]
- Static Sites์์ ๋ฐ์ํ๋ blinking ์ด์ ์ฌ์ ํ ๋ฐ์
- ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ฒ ๋๋ฉด ์ ์ฒด์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ค์ ์๋ฒ์์ ๋ฐ์ ์ค๋ ๊ฒ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ UX(์ฌ์ฉ์ ๊ฒฝํ)๋ฅผ ๊ฒฝํํ ์ ์์
- ์๋ฒ ๊ณผ๋ถํ์ ๊ฑธ๋ฆฌ๊ธฐ ์ฌ์
- ์ฌ์ฉ์๊ฐ ํด๋ฆญ์ ํ ๋๋ง๋ค ์๋ฒ์ ์์ฒญํด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ htmlํ๋ฉด์ ๊ตฌ์ฑํด์ผ ํ๋ฏ๋ก ์ฌ์ฉ์์ ์๊ฐ ๋ง์์๋ก ์น๋ช ์ ์ด๋ค.
- ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋นจ๋ฆฌ ํ์ธํ ์๋ ์์ผ๋ ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ js๋ ์์ง ์ฐ๊ฒฐ๋์ง ๋ชปํด์ ํด๋ฆญ ์ ๋ฐ์์ด ์์ ์ ์์(๋งค์ฐ ์น๋ช
์ ๋จ์ )
- ์ฆ TTV์ TTI์ ๊ฐ๊ฒฉ์ด ํฐ ํธ (์๋ ๋ ๋ณด๊ธฐ ํด๋ฆญ)
- TTV (Time To View) : ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ณผ ์ ์๋ ์๊ฐ
- TTI(Time To Interact) : ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์์ ํด๋ฆญ๋ฑ์ Interaction์ ํ ์ ์๋ ์๊ฐ
๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
โถ CSR
- ์ต์ข ์ ์ผ๋ก ๋ฒ๋ค๋ง ํด์ ์ ์ ์๊ฒ ๋ณด๋ด์ฃผ๋ jsํ์ผ์ ์ด๋ป๊ฒ ํ๋ฉด ํจ์จ์ ์ผ๋ก ๋ง์ด ๋ถํ ํ ์ ์์์ง ๊ณ ๋ฏผํด์ผ ํ๋ค.
- jsํ์ผ์ ๋ถํ ํ์ฌ ์ ๋ง ํ์์ ์ธ ํ์ผ๋ง ๋ณด๋ด๋ฉด ์ฌ์ฉ์๊ฐ ์นํ์ด์ง์ ์ฒซ ํ๋ฉด์ ๋ณด๋ ์๊ฐ์ ์ค์ฌ์ค ์ ์๋ค.
โถ SSR
- TTV์ TTI์ ๋จ์ฐจ๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ์ค์ฌ์ ์ฌ์ฉ์์๊ฒ ๋งค๋๋ฌ์ด UI, UX๋ฅผ ์ ๊ณตํ ์ ์์์ง ๊ณ ๋ฏผํด์ผ ํ๋ค.
CSR๊ณผ SSR์ ํน์ง๊ณผ ์ฅ, ๋จ์ ์ ๋ํด ํฌ์คํ ํด๋ณด์๋๋ฐ, ๋ค์ ํฌ์คํ ์๋ ๋์ ์ฅ์ ์ ๋ชจ์๋ ์ฑ์ด๋, ๋ค๋ฅธ ํด๊ฒฐ๋ฐฉ์๋ค์ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง์ ๋ํด ํฌ์คํ ํด๋ด์ผ๊ฒ ๋ค.
์ฐธ๊ณ ์๋ฃ
๋๊ธ