CSR vs SSR ๐Ÿ‘Œ

c_yjยท2022๋…„ 9์›” 19์ผ
0

CSR vs SSR

Client Side Rendering (CSR)

๋ง ๊ทธ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ชจ๋“  ๋กœ์ง, ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ, ํ…œํ”Œ๋ฆฟ, ๋ผ์šฐํŒ…์€ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ชจ๋‘ ํด๋ฆฌ์ด์–ธํŠธ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

CSR์˜ ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ์˜ ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ ๊ทน์ ์ธ ์ฝ”๋“œ ๋ถ„ํ• (code splitting)์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฉฐ, "ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ œ๊ณต"ํ•ด์•ผ ํ•œ๋‹ค.

CSR ๋™์ž‘ ๋ฐฉ์‹

์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.
1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด(request), ๋ธŒ๋ผ์šฐ์ €๋Š” ์ตœ์†Œํ•œ์˜ HTML ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ(response) ํ•œ๋‹ค. ์ด HTML ํŒŒ์ผ์€ script, meta, link ๋“ฑ์˜ ํƒœ๊ทธ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ๋นˆ ์ปจํ…์ธ ์˜ index.html ํŒŒ์ผ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
2. ๋ธŒ๋ผ์šฐ์ €๋Š” index.html์— ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ๋‹ค์Œ AJAX๋ฅผ ํ†ตํ•ด API ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋™์  ์ปจํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํŒŒ์‹ฑํ•˜์—ฌ ์ตœ์ข… ์ปจํ…์ธ ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.
3. ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๊ฒฝ์šฐ, ์„œ๋ฒ„์— ์ถ”๊ฐ€ HTMLํŒŒ์ผ์„ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ๋ฐ›์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ Œ๋”๋ง ํ•œ๋‹ค.

CSR ์žฅ์ 

ํ›„์† ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์ด ๋” ๋น ๋ฅด๋‹ค. CSR์„ ์œ„ํ•ด ์ด๋ฏธ ๋ชจ๋“  ์ง€์› ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฌ์ „์— ๋กœ๋“œ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— CSR์˜ ๋กœ๋“œ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ ๋‹ค.

๋ณ„๋„์˜ API๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ํŽ˜์ด์ง€์ด๊ฑฐ๋‚˜ ์ง€์—ฐ ๋กœ๋”ฉ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค, ์ด๋ฏธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์บ์‹ฑ๋œ ๊ฒฝ์šฐ ์ธํ„ฐ๋„ท ์—†์ด๋„ ํ•ด๋‹น CSR ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

CSR์€ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด UI๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

CSR ๋‹จ์ 

์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์ด SSR์— ๋น„ํ•ด ๋Š๋ฆฌ๋‹ค. CSR์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปจํ…์ธ ๋กœ HTML์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์ „์— ๊ธฐ๋ณธ HTML, CSS ๋ฐ ๋ชจ๋“  ํ•„์ˆ˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

SEO์— ์นœํ™”์ ์ด์ง€ ์•Š๋‹ค. ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ๊ฐ€ ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ์„๋•Œ๋Š” ๋นˆ ํŽ˜์ด์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋ฌผ๋ก  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ธ€ ํฌ๋กค๋Ÿฌ์™€ ๊ฐ™์€ ๊ฒ€์ƒ‰์—”์ง„ ํฌ๋กค๋Ÿฌ๊ฐ€ ๋“ฑ์žฅํ•˜๊ณ  ์žˆ๊ธดํ•˜์ง€๋งŒ, ์•„์ง ๋งŽ์€ ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ๋“ค์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ ํŽ˜์ด์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค. ํ•œ ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ณ€ํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์ธ์ง€ ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์ „์— HTML ๋ฐ JavaScript ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๋Š” ๋นˆํŽ˜์ด์ง€๋ฅผ ๋ณด๊ฒŒ ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)๊ฐ€ ์ข‹์ง€ ์•Š๋‹ค.

ํด๋ผ์ด์–ธํŠธ์˜ ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด์— ๋„ˆ๋ฌด ๋งŽ์ด ์˜์กดํ•œ๋‹ค. ์‚ฌ์šฉ์ž ๊ธฐ๊ธฐ์— ๋”ฐ๋ผ, ํ•˜์œ„ ์ง€์›๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์ž๋ผ๋ฉด, ์ตœ์ ์˜ ์‹œ๊ฐ„์— ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋  ํ™•๋ฅ ์ด ํฌ๋‹ค. ํŽ˜์ด์ง€์˜ ์ดํƒˆ๋ฅ ์€ ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ๊ฐ„์— ์ •๋น„๋ก€ํ•œ๋‹ค. ๋˜ํ•œ ์ดํƒˆ๋ฅ ์ด ๋†’์„์ˆ˜๋ก ๊ฒ€์ƒ‰์—”์ง„ ์ˆœ์œ„๋„ ๋‚ฎ์•„ ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Server Side Rendering (SSR)

ํด๋ผ์ด์–ธํŠธ์ธก ๋˜๋Š” ์œ ๋‹ˆ๋ฒ„์…œ ์•ฑ์„ ์„œ๋ฒ„์˜ HTML๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‘๋‹ต์„ ๋ฐ›๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ ํŒจ์นญ ๋ฐ ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ์ด ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ์œ„ ํ–‰์œ„์— ๋Œ€ ์ถ”๊ฐ€ ์™•๋ณต์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

SSR ๋™์ž‘ ๋ฐฉ์‹

์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.
1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด(request), ์„œ๋ฒ„๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  ํŽ˜์ด์ง€ ๋‚ด์— ์žˆ๋Š” ์„œ๋ฒ„์ธก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ํ›„ HTML ์ปจํ…์ธ ๋ฅผ ์ปดํŒŒ์ผ ๋ฐ ์ค€๋น„ํ•œ๋‹ค.
2. ์ปดํŒŒ์ผ๋œ HTML์€ ์ถ”๊ฐ€ ๋ Œ๋”๋ง ๋ฐ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก๋œ๋‹ค(response).
3. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
4. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด์„œ ํŽ˜์ด์ง€๋ฅผ ๋Œ€ํ™”ํ˜•(interactive)์œผ๋กœ ๋งŒ๋“ ๋‹ค.
5. ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๊ฒฝ์šฐ, ์œ„ ๋™์ž‘์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

SSR ์žฅ์ 

์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค(FP ๋ฐ FCP๊ฐ€ ๋น ๋ฅด๋‹ค). ๋ Œ๋”๋ง์ด ์ค€๋น„๋œ HTML ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— CSR์— ๋น„ํ•ด ๋” ๋น ๋ฅด๋‹ค.

์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€ ๋กœ์ง ๋ฐ ๋ Œ๋”๋ง์„ ์‹คํ–‰ํ•˜๋ฉด ๋งŽ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ TTI(Time to Interactive)๋ฅผ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

SEO์— ์นœํ™”์ ์ด๋‹ค. ์ด๋ฏธ ๋‹ค ๋งŒ๋“ค์–ด์ง„ ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰์—”์ง„ ํฌ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›๋Š”๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๋Š” ๋” ๋†’์€ ์ปดํ“จํŒ… ์„ฑ๋Šฅ๊ณผ ํ›จ์”ฌ ๋” ๋†’์€ ๋„คํŠธ์›Œํ‚น ์†๋„๋ฅผ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์„œ๋ฒ„์—์„œ ์™„์„ฑ๋œ ํŽ˜์ด์ง€๋งŒ ๋ Œ๋”๋งํ•ด ์ฃผ๋ฉด ๋œ๋‹ค. ์ฆ‰ ํด๋ผ์ด์–ธํŠธ์˜ ๋ถ€๋‹ด์ด CSR์— ๋น„ํ•ด ๋œํ•˜๋‹ค.

SSR ๋‹จ์ 

ํŽ˜์ด์ง€ ์ด๋™์‹œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— TTFB(Time to First Byte)๊ฐ€ ๋Š๋ฆฌ๋‹ค.

ํŽ˜์ด์ง€ ๋กœ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ฌด๊ฒ๋‹ค๋ฉด, ์˜คํžˆ๋ฆฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ•ด์น  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•œ ๋Œ€์‹œ ๋ณด๋“œ๊ฐ€ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„๋Š” ํ•ญ์ƒ ๊ฐ ์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค HTMLํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— CDN ์ˆ˜์ค€์—์„œ์˜ ์ปจํ…์ธ  ์บ์‹œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŒ…์ด ํ•„์š”ํ•˜๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ๋ Œ๋”๋งํ•˜๋Š” CSR์— ๋น„ํ•ด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ HTMLํŒŒ์ผ๊ณผ ์•ˆ์— ๋‚ด์šฉ์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ…์ด ํ•„์š”ํ•˜๋‹ค.

CSR์— ๋น„ํ•ด ๋” ๋งŽ์€ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋ฉฐ, SSR ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€์ ์ธ ๋Ÿฌ๋‹ ์ปค๋ธŒ์— ๋Œ€ํ•œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ถœ์ฒ˜ : https://ajdkfl6445.gitbook.io/study/

profile
FrontEnd Developer

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