Preface
๐ ๊ฐ๋ฐ ๊ณต๋ถ 3๊ฐ์ ์ฐจ์ธ to-be ๊ฐ๋ฐ์์ ์์ต blog๐๏พ Oct 17 ~ 23, 2021
ํ์ฌ ์ํ
React์์ ๋ฉ์ถ์ง ์๊ณ ๋ ๋ฐฐ์์ผ ํ๋ ์ด์ ์ค rendering ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ณด์๋ค.
Client Side Rendering
Single Page Application์ธ React.js, Vue.js ๋ฑ
๐
- ์ด๊ธฐ loading ์ดํ์ ์์ฒญํ ๋ถ๋ถ๋ง ์์ฒญํ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฆ
- HTML file์ ๋ผ๋๋ง ์์ผ๋ฏ๋ก server์ ๋ถํ๊ฐ ์ ์
- rendering์ด ๋น ๋ฅด๋ฏ๋ก data ๋น์ฉ ์๋ ์ ์์
- TTV์ ๋์์ TTI ๊ฐ๋ฅ
*TTV : Time To View, TTI : Time To Interact
- client์์ ์ฐ์ฐ๊ณผ router ๋ฑ์ ๋ชจ๋ ์ง์ ์ฒ๋ฆฌํด ๋ฐ์ ์๋๊ฐ ๋น ๋ฆ
- blink issue ์์ (UX๊ฐ ์ข์)
*blink issue : rendering๋ ๋์ ํ๋ฉด ๊น๋นก์
๐
- HTML file์ ์๋ JavaScript file์ download ๋ฐ๊ณ ๋์ DOM์ ์์ฑํ๋ ๊ฒ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ๋ก ์ด๊ธฐ loading ์๋๊ฐ ๋๋ฆผ
๐จ code splitting, tree-shaking, chunk ๋ถ๋ฆฌ๋ก JS bundle ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ด๊ธฐ loading ์๋ ๋ณด์ ๊ฐ๋ฅ
- HTML file์ด blank์ฌ์ SEO์ ๋ถ๋ฆฌํจ
๐จ library๋ web pack plug in์ ํตํด ๊ฐ page์ HTML์ ๋ฏธ๋ฆฌ ์์ฑํด pre-lendering๋ HTML version page๋ฅผ ๋ณด์ฌ์ฃผ์ด ๊ฐ์ ๊ฐ๋ฅ
- HTML file์ด blank์ฌ์ page caching์ด ์ ์ ๋จ
Server Side Rendering
Multi Page Application
๐
- rendering์ด ์ค๋น๋ HTML์ด ๋จผ์ ํ๋ฉด์ ๋ฟ๋ ค์ง๋ฏ๋ก ์ด๊ธฐ ๊ตฌ๋ ์๋๊ฐ ๋น ๋ฆ
- code๊ฐ HTML file์ ๋ด๊ฒจ ์์ผ๋ฏ๋ก SEO์ ์ ๋ฆฌํจ
- CloudFlare๋ CloudFront๊ฐ์ page caching ๊ธฐ์ ํ์ฉ ๊ฐ๋ฅ
๐
- TTV๋ถํฐ TTI๊น์ง ๊ณต๋ฐฑ์ด ์์ด์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ข์ง ์์
- ์์ฒญํ๋ฉด HTML file์ ํต์งธ๋ก ๊ฐ์ ธ์์ ๋๋ฆผ, ์ฌ์ฉ์๊ฐ ๋ง์ผ๋ฉด ๊ณผ๋ถํ์ ๊ฑธ๋ฆด ์ ์์
- blink issue ์์ (UX๊ฐ ์ข์ง ์์)
โ๏ธ PrelenderIO
Google์ด PrelenderIO๋ก caching๊ณผ SEO ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ํ์์ผ๋ ์์ฑ๋์ ์๋ฌธ
Isomorphic App = Universal Rendering
: CSR๊ณผ SSR์ ์ฅ์ ๋ง ๋ชจ์ ๊ฒ
- w/o framework
- express.js
- nest.js : TypeScript ์ง์
- w/ framework
- NEXT.js : code๋ React.js์ธ๋ฐ SSR์ ํ ์ ์์
- NUXT.js : Vue.js๋ฅผ ์ํ framework
๐
- cachingํ ๋ SSG๋ก ์ฒซ loading์ด ๋๋ฆฌ์ง ์๊ฒ ํ๊ณ SEO ๋ฌธ์ ํด๊ฒฐ
*SSG : Static Sties Generation
Static Rendering์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ๋ฐ๋ ์ผ์ด ๊ฑฐ์ ์๋ page์ ์ ํฉ
e.g. React + Gatsby
- ์์ฒญํ ๋ถ๋ถ๋ง ๊ฐ์ ธ์ค๋๊น ์๋๊ฐ ๋น ๋ฆ
- page caching์ด ์ ๋จ
๐
- framework๋ฅผ ์ฌ์ฉํ๋ฉด CSR์ ๋นํด code์ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ
- ์ง์ ์ ์ดํ ์ ์๋ blackbox ์์ญ ์กด์ฌ
CSR vs SSR vs CSR + SSR
- SSG
- ๊ฒ์ ๋
ธ์ถ ํ์ํจ
- ๋ชจ๋ ๊ณ ๊ฐ์๊ฒ ๋์ผํ ๋ด์ฉ์ ์ ๊ณตํจ
- ๋ด์ฉ update๊ฐ ๊ฑฐ์ ์์
- CSR
- ๊ฒ์ ๋
ธ์ถ ํ์ ์์
- ๊ณ ๊ฐ๊ณผ ์ํธ์์ฉ ๋ง์
- ๋ด์ฉ์ด ๊ณ ๊ฐ์ ๊ฐ์ธ ์ ๋ณด๋ก ์ด๋ฃจ์ด์ง
- SSR
- ๊ฒ์ ๋
ธ์ถ ํ์ํจ
- ๋ชจ๋ ๊ณ ๊ฐ์๊ฒ ๋์ผํ ๋ด์ฉ์ ์ ๊ณตํจ
- ๋ด์ฉ update๊ฐ ์ฆ์
- CSR + SSR
- ๊ฒ์ ๋
ธ์ถ ํ์ํจ
- ๊ณ ๊ฐ๊ณผ ์ํธ์์ฉ ๋ง์
- ๊ณ ๊ฐ์ ๋ฐ๋ผ ๋ด์ฉ์ด ๋ฌ๋ผ์ง
Endnote
๐ the source of this content
์ฝ๋ํฉํ ๋ฆฌ - Client Side Rendering vs Server Side Rendering
๋๋ฆผ์ฝ๋ฉ - ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง (๊ฐ๋ฐ์๋ผ๋ฉด ์์์ผ๋ก ์๊ณ ์์ด์ผ ํ๋ ๊ฐ๋
์ ๋ฆฌ โญ๏ธ)
์ฐ์ํTech - [10๋ถ ํ
์ฝํก] ๐จ ์ ์ธํํ์ CSR&SSR