๐Ÿ“˜ CSR vs SSR

[meษช]ยท2021๋…„ 10์›” 20์ผ
0

3. Today I Learned. Basic

๋ชฉ๋ก ๋ณด๊ธฐ
7/11

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

profile
๋Š๋ ค๋„ ํ•  ๊ฑฐ์•ผ.......

0๊ฐœ์˜ ๋Œ“๊ธ€