SSR & CSR

1. ๊ฐœ์š”

์›น ๊ฐœ๋ฐœ์ž๋ผ๊ณ  ํ•˜๋ฉด ํ•„์ˆ˜์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•˜๋Š” ๋‘๊ฐ€์ง€์˜ ์ฃผ์ œ๊ฐ€ ๋ฐ”๋กœ CSR๊ณผ SSR์ด๋‹ค. ์ด๋Š” MPA, SPA๊ณผ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

CSR๊ณผ SSR์˜ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋Š” ๋ Œ๋”๋ง์˜ ๋ฐฉ์‹์— ์žˆ๋‹ค. ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ๊ฒƒ์€ HTML์ธ๋ฐ ์ด๊ฒƒ์„ ๋ˆ„๊ฐ€ ํ•˜๋А๋ƒ ์ฃผ์ตœ์— ๋”ฐ๋ผ์„œ CSR๊ณผ SSR๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.

๋žœ๋”๋ง: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด์„œ ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ฒƒ.


2. CSR (Client Side Rendering)

CSR
  1. ์„œ๋ฒ„์—์„œ client์˜ request์— ์˜ํ•ด index.html ํŒŒ์ผ์„ client์— ์ „์†ก

  2. body ๋‚ด๋ถ€์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋งŒ ๋“ค์–ด์žˆ์Œ(์˜ˆ์‹œ)

    ...
    <body>
      <div id="root"></div>
      <script src="app.js"></script>
    </body>
  3. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นˆ html์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ๊ฐ„์ ์œผ๋กœ client๋Š” ๋นˆ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๊ณ , app.js๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญ, ์„œ๋ฒ„๋Š” ๋‹ค์‹œ app.js๋ฅผ client์— ๋ณด๋‚ด์คŒ

  4. ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์„œ๋ฒ„์— ์š”์ฒญํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ ๋‹ค์Œ์— Data(JSON)๊ณผ app.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ ๋™์ ์œผ๋กœ HTML์„ ์ƒ์„ฑํ•จ


3. SSR (Server Side Randering)

SSR
  1. client๊ฐ€ ์„œ๋ฒ„์— ์ฝ˜ํ…์ธ ๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋žœ๋”๋ง ์ค€๋น„๋ฅผ ๋งˆ์นœ HTML, JS code๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋ƒ„

  2. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ›์€ HTML๋ฅผ ๋žœ๋”ํ•จ, ์ด๋•Œ ์‚ฌ์šฉ์ž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ JS code๋ฅผ ์•„์ง ๋‹ค์šด๋กœ๋“œ ๋ฐ›์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— interaction์ด ๋ถˆ๊ฐ€๋Šฅ ํ•จ

  3. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JS code๋ฅผ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋๋‚˜๋ฉด HTML์— JS๋กœ์ง์„ ์—ฐ๊ฒฐํ•จ

  4. ์ดํ›„ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” interaction์ด ๊ฐ€๋Šฅํ•ด์ง


4. CSR vs SSR

  1. ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„

    • ์ฒซ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„: CRS์ธ ๊ฒฝ์šฐ HTML, CSS์™€ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๋“ค์„ ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋ฐ˜๋ฉด SSR์€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ HTML๊ณผ ์ŠคํŠธ๋ฆฝํŠธ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ ํ‰๊ท ์ ์œผ๋กœ SSR์ด ๋” ๋น ๋ฅด๋‹ค.

    • ๋‚˜๋จธ์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„: CSR์€ ์ด๋ฏธ ์ฒซ ํŽ˜์ด์ง€ ๋กœ๋”ฉํ•  ๋•Œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์™”๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด์ง€๋งŒ, SSR์€ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•œ ๊ณผ์ •์„ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— CSR์— ๋น„ํ•ด ๋А๋ฆฌ๋‹ค.

  2. SEO ๋Œ€์‘

    • CSR ๋ฐฉ์‹: ๋Œ€๋ถ€๋ถ„์˜ ์›น ํฌ๋กค๋Ÿฌ, ๋ด‡๋“ค์€ JS๋ฅผ ์‹คํ–‰์‹œํ‚ค์ง€ ๋ชปํ•˜๊ณ  HTML์—์„œ๋งŒ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ํŽ˜์ด์ง€๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋œ๋‹ค.

    • SSR ๋ฐฉ์‹: View๋ฅผ ์„œ๋ฒ„์—์„œ ์ „๋ถ€ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTML์— ๋ชจ๋“  ์ฝ˜ํ…์ธ ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์–ด SEO๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

  3. ์„œ๋ฒ„ ์ž์› ์‚ฌ์šฉ: SSR์ด ํŽ˜์ด์ง€๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋งˆ๋‹ค ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ž์›Œ์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

  4. Blinking Issue: SSR์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ „์ฒด ์›น์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์‹œ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™”๋ฉด์ด ์—†์–ด์กŒ๋‹ค ๋‚˜ํƒ€๋‚œ๋‹ค. ์ด๋Š” UX๊ด€์ ์—์„œ ๋ดค์„ ๋•Œ ์ข‹์ง€ ์•Š๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ CSR์€ SPA๊ณผ SSR์€ MPA๊ณผ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •๋‹ต์€ ๊ฐ™์ง€ ์•Š๋‹ค. SPA๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ฒ˜์Œ์—๋งŒ ํŽ˜์ด์ง€๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์ดํ›„์—๋Š” ๋™์ ์œผ๋กœ DOM์„ ๊ตฌ์„ฑํ•˜์—ฌ ๋ Œ๋”๋ง ๋˜๋Š” ํ™”๋ฉด์ด ๋ฐ”๋€Œ๊ฒŒ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋™์ ์œผ๋กœ DOM์„ ๊ตฌ์„ฑํ•˜์—ฌ ๋ Œ๋”๋ง ๋˜๋Š” ํ™”๋ฉด์ด ๋ฐ”๋€Œ๊ฒŒ ํ•œ๋‹ค.๋ถ€๋ถ„์ด CSR์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด SPA๋Š” ์ฒ˜์Œ์—๋งŒ ํŽ˜์ด์ง€๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์ดํ›„์—๋Š” ๋ฐ›์•„์˜ค์ง€ ์•Š๋Š”๋ฐ ์ด๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜๊ณ  ์กฐํšŒ๋˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์–ด CSR์ด๋ž€ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•œ ๊ฒƒ์ด๋‹ค. SPA์™€ MPA๋Š” ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์“ฐ๋ƒ ํ•œ ๊ฐœ๋งŒ ์“ฐ๋ƒ์˜ ์ฐจ์ด์ด๊ณ  CSR๊ณผ SSR์€ ๋ Œ๋”๋ง์„ ์–ด๋””์„œ ํ•˜๋ƒ์˜ ์ฐจ์ด์ด๋‹ค. SSR๊ณผ CSR์€ MPA๊ณผ SPA๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ์ผ ๋ฟ์ด๋‹ค.


5. TTV & TTL

  • TTV: Time To View์˜ ์•ฝ์ž๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์„œ๋ฒ„์—์„œ ๋ฐ›์€ HTML์ด ๋ณด์—ฌ์ง€๋Š” ๋•Œ๋ฅผ ๋งํ•œ๋‹ค.

  • TTI: Time To Interact์˜ ์•ฝ์ž๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JS code๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋™์ ์ธ ๋™์ž‘๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ๋•Œ๋ฅผ ๋งํ•œ๋‹ค.

  • CRS์—์„œ๋Š” TTV ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ์— ๋™์‹œ์— TTI ํด๋ฆญ์„ ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋ ‰์…˜์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

  • SSR์—์„œ๋Š” TTI ์ด์ „์— ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ JS code๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊นŒ์ง€๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐ๋ ‰์…˜์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

6. React์—์„œ์˜ SSR

  • Next.js

    • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง(SSR), ์ •์  ์›น ํŽ˜์ด์ง€ ์ƒ์„ฑ(SSG) ๋“ฑ ๋ฆฌ์•กํŠธ ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” Node.js ์œ„์—์„œ ๋นŒ๋“œ๋œ ์˜คํ”ˆ ์†Œ์Šค ์›น ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

  • Gatsby


7. Conclusion

์ด๋ฒˆ ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ €๋ฒˆ์— ๊ณต๋ถ€ํ•˜์˜€๋˜ 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

๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋˜ ์œ ํŠœ๋ธŒ ๐ŸŽฌ

  • ์™„์ „ ์ƒˆ๋กœ์šด ๋ฆฌ์•กํŠธ๊ฐ€ ์˜จ๋‹ค? ํ•ต์‹ฌ์ •๋ฆฌ 10๋ถ„์ปท. ์™„์ „ ์ƒˆ๋กœ์šด ๋ฆฌ์•กํŠธ๊ฐ€ ์˜จ๋‹ค? ํ•ต์‹ฌ์ •๋ฆฌ 10๋ถ„์ปท.

  • ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ƒ์‹์œผ๋กœ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฐœ๋… ์ •๋ฆฌ โญ๏ธ) ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ƒ์‹์œผ๋กœ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฐœ๋… ์ •๋ฆฌ โญ๏ธ)

  • 10๋ถ„ ๋ฐ์ฝ”ํ†ก [10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐ŸŽจ ์‹ ์„ธํ•œํƒ„์˜ CSR&SSR


๐Ÿ“… 2022-07-14

Last updated