CSR๊ณผ SSR ๊ทธ๋ฆฌ๊ณ  Universal Rendering

@choi2021 ยท November 18, 2022 ยท 11 min read

๐Ÿ‘“ Next JS

next
next
Next js๋Š” typescript์™€ ํ•จ๊ป˜ ํ”„๋ก ํŠธ์—”๋“œ์˜ ๋‰ด๋…ธ๋ฉ€์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋‚ด๊ฐ€ ๊ด€์‹ฌ์ด ๊ฐ”๋˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…๋“ค์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๊ธฐ์ˆ ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋จผ์ € ์›น์˜ ์—ญ์‚ฌ๋ฅผ ๋จผ์ € ์ •๋ฆฌํ•ด ๋ณด๊ณ , CSR๊ณผ SSR์˜ ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ๊ณผ ๋‘˜์˜ ๋ฐฉ์‹์„ ํ•ฉ์นœ Universal Rendering์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

๐Ÿ’ฟMPA(Multi Page Application)

SSR (server-side-rendering)์€ ์‚ฌ์‹ค CSR(Client Side Rendering) ๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜๋œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด๋‹ค.

MPA (Multi Page Application) ์‹œ์ ˆ์—๋Š” ์„œ๋ฒ„๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” url์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น url์— ํ•ด๋‹นํ•˜๋Š” html์„ ๋ณด๋‚ด์ฃผ๊ณ  ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. Web์˜ ๋ฐœ์ „๊ณผ Javascript์˜ ๋ฐœ์ „์œผ๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด ์ง€๋ฉด์„œ, ๊ธฐ์กด์˜ MPA์—์„œ ๊ฐ€์ง„, ์—…๋ฐ์ดํŠธ ๋œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด HTML ์ „์ฒด๋ฅผ ๋ฐ›์•„ ์™€์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ๋‹ค ๋ฐ›์•„์˜ค์ง€ ์•Š๊ณ  ๋ฐœ์ „๋œ Javascript๋ฅผ ์ด์šฉํ•ด ๋‹จ ํ•˜๋‚˜์˜ html๋งŒ ๋ฐ›์•„ ์™€์„œ, Javascript๋กœ ๋™์ ์œผ๋กœ Dom ์š”์†Œ๋“ค์„ ๋ณ€ํ˜•ํ•˜๋Š” SPA (Single Page Application)๋ฐฉ์‹์ด ์‹œ์ž‘๋˜์—ˆ๋‹ค.

mpa
mpa

๐Ÿ“€CSR๊ณผ SSR

SPA ์˜ ํฐ ํŠน์ง•์€ html์„ ํ•˜๋‚˜๋งŒ ๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กญ๊ฒŒ ๋ฐ˜์˜๋œ ํ™”๋ฉด์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์œผ๋กœ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๊ณ , ์ „์ฒด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋Š” ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์„œ๋ฒ„์™€ ๋ถ„๋ฆฌ๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ javascript๋ฅผ ์ด์šฉํ•ด ์–ด๋–ป๊ฒŒ ์›นํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ• ์ง€ ์ •ํ•˜๋Š” ๋ฐฉ์‹์„ CSR (Client Side Rendering)์ด๋ผ๊ณ  ํ•˜๊ณ , SPA๋ฅผ ์ด์šฉํ•œ CSR์˜ ๋ฐฉ๋ฒ•์œผ๋กœ React๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

CSR์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„๋Š” ํ•˜๋‚˜์˜ html์„ ์‘๋‹ต์œผ๋กœ ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์ ์€ ์žฅ์ ๊ณผ javascript๋ฅผ ๋‹ค ๋ฐ›์•„๋’€๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์ด ์งง์€ ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค.

์ด๋ ‡๊ฒŒ ์ข‹์•„ ๋ณด์ด๋Š” CSR์€ 2๊ฐ€์ง€ ํฐ ๋‹จ์ ์„ ๊ฐ€์ง€๋Š”๋ฐ, ๋ฐ”๋กœ SEO (Search Engine Optimization)์™€ ์ฒซ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๊นŒ์ง€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ์ ์ด๋‹ค.

SEO

SEO๋Š” ๊ตฌ๊ธ€์ด๋‚˜ ๋„ค์ด๋ฒ„์˜ ๊ฒ€์ƒ‰์—์„œ ๊ฒ€์ƒ‰์„ ํ–ˆ์„ ๋•Œ, ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” googling์ด๋ž€ ๋‹จ์–ด๊ฐ€ ์ƒ๊ธธ ์ •๋„๋กœ ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด์„œ ์–ป๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋ฅผ ๊ฒ€์ƒ‰์—”์ง„์—๊ฒŒ ์ž˜ ๋ณด์—ฌ์ฃผ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž์ฃผ ๋ณด์—ฌ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋„ˆ๋ฌด๋‚˜ ์ค‘์š”ํ•˜๋‹ค. ๊ฒ€์ƒ‰์—”์ง„์˜ ๋ด‡์ด ์šฐ๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์ž˜ ํฌ๋กค๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ SEO๋ผ๊ณ  ํ•˜๊ณ , ์—ฌ๊ธฐ์„œ CSR์ด ํฐ ๋‹จ์ ์„ ๊ฐ€์ง„๋‹ค.

seo
seo

์•ž์„  ๊ณผ์ œ์—์„œ CSR์—์„œ react-helmet๊ณผ react-snap์„ ์ด์šฉํ•ด์„œ CSR์—์„œ route์— ๋งž๋Š” html์„ ๋งŒ๋“ค์–ด head๋ถ€๋ถ„์— ๋„ฃ์„ ๋ถ€๋ถ„๋“ค์„ ๋„ฃ์–ด์ฃผ์—ˆ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ–ˆ๋˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” CSR์ด ํ•˜๋ ค ํ–ˆ๋˜ ํšจ์œจ์ ์ธ ์ „๋žต, ๋‹จ ํ•˜๋‚˜์˜ HTML์„ ์ด์šฉํ•ด Javascript๋กœ ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋ ค ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ HTML์€ ๋น„์–ด์žˆ์–ด ์šฐ๋ฆฌ๊ฐ€ ๋™์ ์œผ๋กœ Javascript๋กœ DOM์š”์†Œ๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์—”์ง„์ด ํฌ๋กค๋งํ•  ๋•Œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์•„๋ฌด ์ •๋ณด๋ฅผ ์ฃผ์ง€ ์•Š์œผ๋ฉด ๋‹น์—ฐํžˆ ๊ฒ€์ƒ‰์—”์ง„์€ ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€์ ธ๊ฐ€์ง€ ๋ชปํ•œ๋‹ค...

CSR์˜ ๋ Œ๋”๋ง ๊ณผ์ •์˜ ๋‹จ์ 

CSR์€ FCP (First Contentful Paint) ์™€ TTI (Time To Interactive) ์š”์†Œ์—์„œ ํฐ ๋‹จ์ ์„ ๊ฐ€์ง„๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฐ˜๋ณต์ ์œผ๋กœ ์–ธ๊ธ‰ํ•œ ํ•˜๋‚˜์˜ html์— Javascript๋กœ ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. server์— ๋จผ์ € Html์„ ์š”์ฒญ ํ›„ ์ฒซ ๋ฒˆ์งธ contents๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์‹œ๊ฐ„ TTFB (Time To First Byte)๋Š” ๋น„์–ด์žˆ๋Š” HTML์ด๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด์ง€๋งŒ, ์ดํ›„ Javascript๋ฅผ ๋ฐ›์•„ ์˜ค๊ณ  javascript๋ฅผ ์‹คํ–‰ํ•˜๊ณ , react๋ฅผ ์‹คํ–‰ํ•ด Rendering์ด ์‹œ์ž‘๋˜์–ด ๋™์ ์œผ๋กœ DOM์„ ๊ตฌ์„ฑํ•œ๋‹ค.

๊ทธ๋กœ ์ธํ•ด FCP, ์‹ค์ œ ํ™”๋ฉด์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ๊ทธ๋กœ ์ธํ•ด TTI, user์˜ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๊ธฐ๊นŒ์ง€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— javascript ๋ฒˆ๋“ค ํฌ๊ธฐ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ๋นˆ ํ™”๋ฉด์„ ์˜ค๋žœ ์‹œ๊ฐ„ ๋ด์•ผ ํ•  ์ˆ˜ ์žˆ๋Š” ํฐ ๋‹จ์ ์„ ์ง€๋‹Œ๋‹ค.

csr
csr

CSR์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” SSR?

์œ„์˜ ์–ธ๊ธ‰ํ•œ ๋‹จ์ ๋“ค SEO์™€ ๋А๋ฆฐ FCP๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด SSR์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. SSR์€ SEO๋ฅผ ์œ„ํ•ด ๊ฐ๊ฐ route์— ํ•ด๋‹นํ•˜๋Š” html์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ํ•ด๋‹น html์„ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์—”์ง„์ด ํฌ๋กค๋งํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“์€ html์„ ๋จผ์ € ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋นˆ ํŽ˜์ด์ง€์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด ์‹คํ–‰ ์ „ ๋จผ์ € ๊ทธ๋ ค์ง„ ํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด ๋น ๋ฅธ FCP๋ฅผ ๊ฐ€์ง€๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๋ฉฐ, ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€ ๋กœ์ง๊ณผ ๋ Œ๋”๋ง์„ ์‹คํ–‰ํ•ด TTI๋„ ๋น ๋ฅด๋‹ค.

ssr
ssr

ํ•˜์ง€๋งŒ ์—ญ์‹œ ๋ฌด์กฐ๊ฑด ์ข‹์€ ์ ๋งŒ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ SSR๋„ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ๋‚ด์šฉ์ด ์ฐจ์žˆ๋Š” html ํŽ˜์ด์ง€๋ฅผ ๋ณด๋‚ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— CSR๊ณผ ๋‹ฌ๋ฆฌ TTFB๊ฐ€ ๋А๋ฆฐ ๋‹จ์ ์„ ๊ฐ€์ง€๋ฉฐ, ์„œ๋ฒ„์—์„œ ์š”์ฒญ์— ๋”ฐ๋ผ ์ฃผ์–ด์•ผ ํ•˜๋Š” ๋‚ด์šฉ์ด ๋งŽ์•„์ ธ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง€๋Š” ๋‹จ์ ๋„ ๊ฐ€์ง„๋‹ค. ์ดˆ๊ธฐ html์— ๋‹ด์•„์ค˜์•ผ ํ•  ์–‘์ด ๋งŽ๋‹ค๋ฉด ์˜คํžˆ๋ ค ํŽ˜์ด์ง€ ๋กœ๋“œ์— ๋‹จ์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

์—ญ์‹œ ๋ฌด์กฐ๊ฑด ์ข‹์€ ๊ฒƒ๊ณผ ๋ฌด์กฐ๊ฑด ์•ˆ ์ข‹์€ ๊ฒƒ์€ ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋‘ ๊ฐ€์ง€ ์ค‘ "์–ด๋–ค ๊ฑธ ์ด์šฉํ•ด์•ผ ํ• ๊นŒ?" ๋ผ๋Š” ๊ณ ๋ฏผ์ด ๋“ค ๋•Œ, ๊ฐ๊ฐ์˜ ์žฅ์ ์„ ์ด์šฉํ•˜์ž๋Š” ๋ฐฉ์‹์ธ universal Rendering์ด๋ผ๋Š” ๋ฐฉ์‹์ด ์žˆ๊ณ  ์ด ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ NEXT js๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ˜Universal Rendering

Universal Rendering์€ Next JS๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ SSR์„ ์ด์šฉํ•ด ๋จผ์ € ๊ฒฝ๋กœ์— ๋งž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ์ „๋‹ฌํ•œ ํ›„์— client์—์„œ rehydration์„ ํ•ด ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” CSR์˜ ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋Š”, SSR๊ณผ CSR์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. CSR์˜ ๋‹จ์ ์ธ ๋А๋ฆฐ FCP๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

๋จผ์ € ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•  ๋‚ด์šฉ์„ ๋งŒ๋“  ํ›„์— ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋ฌธ์ž์—ด๋กœ ํด๋ผ์ด์–ธํŠธ์— ๋„˜๊ฒจ์ค€๋‹ค. (serialization) ํด๋ผ์ด์–ธํŠธ๋Š” ๋„˜๊ฒจ๋ฐ›์€ ํŽ˜์ด์ง€์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•œ๋‹ค. (hydration)

์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์šฐ๋ฆฌ๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๊ณผ์ •๊ณผ ์œ ์‚ฌํ•œ๋‹ค. JSON์„ ์ด์šฉํ•ด ํ†ต์‹ ํ•  ๋•Œ JSON.stringfy๋กœ ๋œ ๋‚ด์šฉ์„ ์ „๋‹ฌํ•œ ํ›„์— ์ „๋‹ฌ ๋ฐ›์•„์„œ client์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” JSON.parse๋ฅผ ์ด์šฉํ•ด ํŒŒ์‹ฑํ•ด์ค€๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜๋Š” ์ „๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค,

universal rendering์—์„œ๋„ ์ด์™€ ๋™์ผํ•˜๊ฒŒ ์„œ๋ฒ„์—์„œ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€ ๋‚ด์šฉ์„ html ํŽ˜์ด์ง€๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌํ•ด์ฃผ๊ณ , client์—์„œ๋Š” ์ „๋‹ฌ๋ฐ›์€ html ๋ฌธ์ž์—ด์„ ์ด์šฉํ•ด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์ ์ ˆํ•œ ํ•จ์ˆ˜์™€ ์ด๋ฒคํŠธ๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๋‘๊ฐ€์ง€ ์ผ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— javascript๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ํด ๊ฒฝ์šฐ์—๋Š” ํ™”๋ฉด์€ SSR์ฒ˜๋Ÿผ ๋จผ์ €๋ณด์ด์ง€๋งŒ TTI๋Š” ๋Šฆ์–ด์ง€๋Š” ๋‹จ์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

universal
universal

๋งˆ์น˜๋ฉฐ

์—ญ์‹œ ์™„๋ฒฝํ•œ ๊ธฐ์ˆ ์€ ์—†๋‹ค. ํ•ญ์ƒ ์ƒํ™ฉ์— ๋งž๋Š” ์•Œ๋งž์€ ๊ธฐ์ˆ ์ด ์กด์žฌํ•  ๋ฟ์ด๋‹ค๋Š” ๊ฑธ ๋А๋‚€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ๊ทธ ์ƒํ™ฉ์— ๋งž๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ค„ ์•„๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด ๊ณผ์ •์„ ์ดํ•ดํ•˜๋Š” ์ค‘์š”์„ฑ์„ ๋„ˆ๋ฌด ๋А๋‚€ ์‹œ๊ฐ„์ด์—ˆ๋‹ค. ์ด์ œ ์ง์ ‘ ๊ณผ์ œ์— NEXT js๋ฅผ ์จ๋ณด๋ ค ํ•œ๋‹ค.

@choi2021
๋งค์ผ์˜ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฐœ๋ฐœ์ผ์ง€์ž…๋‹ˆ๋‹ค.