๐Ÿคฟ ๋”ฅ๋‹ค์ด๋ธŒ - CSR vs SSR

์ •ํ˜œ์ธยท2024๋…„ 8์›” 27์ผ
1

๋”ฅ๋‹ค์ด๋ธŒ

๋ชฉ๋ก ๋ณด๊ธฐ
1/4

๐Ÿค”ย ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)๊ณผ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

์ตœ๊ทผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)๊ณผ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๊ณ  ํ•™์Šตํ–ˆ๋˜ ๊ณผ์ •์„ ์ž‘์„ฑํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ์ƒ ๋ฆฌ์•กํŠธ๋‚˜ ๋ทฐ๋กœ๋งŒ js๋ฅผ ์‚ฌ์šฉํ•ด๋ดค์ง€, ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•œ ๋ฐ”๋‹๋ผ js๋กœ์˜ ์›น ํŽ˜์ด์ง€ ๊ตฌํ˜„์€ ์ฒ˜์Œ์ด๋ผ ๋งŽ์ด ๋‚ฏ์„ค๊ธฐ๋„ ํ•˜๊ณ , ์–ด๋ ต๊ธฐ๋„ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ฒ˜์Œ์—๋Š” CSR๊ณผ SSR์˜ ์ฐจ์ด๋ฅผ โ€˜ํŽ˜์ด์ง€๊ฐ€ ๊นœ๋ฐ•์ด๋Š”์ง€โ€™ ์—ฌ๋ถ€๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํ›จ์”ฌ ๋” ๊นŠ๊ณ  ๋ณต์žกํ•œ ๊ฐœ๋…๋“ค์ด ์กด์žฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„์„ CSR๊ณผ SSR์˜ ์ฐจ์ด์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

(์ด๋Ÿฐ ์‹์œผ๋กœ ๊ธ€์„ ์จ๋ณธ ์ ์ด ์—†์—ˆ๋Š”๋ฐ, ์•ž์œผ๋กœ๋Š” ์ œ๊ฐ€ ํ–ˆ๋˜ ๊ณ ๋ฏผ๋“ค์„ ์ด๋ ‡๊ฒŒ ๋งค๊ฑฐ์ง„ ํ˜•์‹(?)์œผ๋กœ ํฌ์ŠคํŒ… ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.ใ…Žใ…Ž)


๐Ÿ˜…ย 1. ์ฒ˜์Œ์— ๊ฐ€์กŒ๋˜ CSR๊ณผ SSR์— ๋Œ€ํ•œ ์ดํ•ด

์ด๋ฒˆ์— ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•ด๋ณด๊ธฐ ์ „๊นŒ์ง€๋งŒ ํ•ด๋„ CSR๊ณผ SSR์— ๋Œ€ํ•ด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

(์‚ฌ์‹ค ๋ฒจ๋กœ๊ทธ์— CSR๊ณผ SSR์— ๋Œ€ํ•ด์„œ๋„ ์ •๋ฆฌํ•ด๋‘” ์ ์ด ์žˆ์—ˆ๊ณ , ๊ณต๋ถ€ํ•ด๋ณธ ์ ์ด ์žˆ์—ˆ๊ธฐ์— ๋‹ค ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹คโ€ฆ)

๋ฌผ๋ก  ๋ Œ๋”๋ง์„ ํ•ด์ฃผ๋Š” ์ฃผ์ฒด๊ฐ€ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„๋กœ ๊ฐ๊ฐ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด ์žˆ๊ธฐ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • CSR (Client-Side Rendering): ์›น ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋™์ž‘ํ•˜๋ฉด CSR์ด๋‹ค.
  • SSR (Server-Side Rendering): ์›น ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ์ด ๋ฐœ์ƒํ•˜๋ฉด SSR์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ๊ณ ์นจ(๊นœ๋ฐ•์ž„) ์œ ๋ฌด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ์นด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ํŽ˜์ด์ง€๊ฐ€ ๊นœ๋ฐ•์ด๋ฉด "์•„, ์ด๊ฑด SSR์ด๊ตฌ๋‚˜"๋ผ๊ณ  ๋‹จ์ˆœํžˆ ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿšงย 2. ๊ธฐ์กด ์ฝ”๋“œ์™€ ๊ณ ๋ฏผ

์ œ๊ฐ€ ๊ตฌํ˜„ํ•œ ์นด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญ ํ–ˆ์„ ๋•Œ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

const addButtons = document.querySelectorAll('.add-todo');

addButtons.forEach(button => {
    const columnId = button.getAttribute('data-column-id');
    const cardContainer = button.closest('.column').querySelector('.column-card-container');

    button.addEventListener('click', function() {
        loadAppendCardTemplate(cardContainer, columnId);
    });
});

์ด ์ฝ”๋“œ๋Š” .add-todo ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ๋ฒ„ํŠผ์— ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค loadAppendCardTemplate ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒˆ๋กœ์šด ์นด๋“œ ํ…œํ”Œ๋ฆฟ(mustache ์‚ฌ์šฉ)์„ ๋ถˆ๋Ÿฌ์™€ ํ•ด๋‹น ์œ„์น˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์ƒˆ๋กœ์šด ์นด๋“œ ํ…œํ”Œ๋ฆฟ์—์„œ ์นด๋“œ ์ถ”๊ฐ€๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์นด๋“œ๋ฅผ ์„œ๋ฒ„์— ์ถ”๊ฐ€ํ•˜๋Š” API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ ,

์ถ”๊ฐ€๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

(๋งŒ์•ฝ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด, api ํ˜ธ์ถœ์„ ํ†ตํ•ด db์— ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ธฐ์— ์ƒˆ๋กœ๊ณ ์นจ ํ•˜๋Š” ์ž‘์—…์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.)

// ์นด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” API ํ˜ธ์ถœ
fetch('/api/addCard', {
    method: 'POST',
    body: JSON.stringify(cardData),
    headers: {
        'Content-Type': 'application/json'
    }
})
.then(response => response.json())
.then(data => {
    if (data.success) {
        location.reload();  // ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ
    }
})
.catch(error => console.error('Error:', error));

๊ทธ๋ž˜์„œ ์ด ์ฝ”๋“œ์—์„œ ์นด๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋ฉด location.reload()๋กœ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์—ฌ ์ „์ฒด UI๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค๋‹ˆ๋‹ค.

์ƒˆ๋กœ๊ณ ์นจ์ด ๋ฐœ์ƒํ•˜๋ฉด์„œ ํŽ˜์ด์ง€๊ฐ€ ๊นœ๋ฐ•์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ฒ˜์Œ์—๋Š”, ์ €๋Š” ์ด ๋ฐฉ์‹์ด SSR์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ƒˆ๋กœ๊ณ ์นจ์„ ๊ผญ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SSR์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โœ๏ธย  3. SSR์˜ ๋ณธ์งˆ

ํ•˜์ง€๋งŒ SSR์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ œ๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SSR์€ ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ๋ Œ๋”๋ง๋œ HTML์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ๊ธฐ๋ณธ ์ •์˜์ธ๋ฐ, ์ €๋Š” โ€˜ํŽ˜์ด์ง€ ๊นœ๋ฐ•๊ฑฐ๋ฆผโ€™์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ๋ณธ์งˆ์ ์ธ ์ •์˜๋ฅผ ์žŠ๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ SSR์€, ์„œ๋ฒ„์—์„œ ์ด๋ฏธ ๋ชจ๋“  HTML์„ ๊ตฌ์„ฑํ•œ ํ›„, ๊ทธ ์™„์„ฑ๋œ HTML์„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ›์€ HTML์„ ์–ด๋– ํ•œ ์ž‘์—…๋„ ์—†์ด ๊ทธ๋Œ€๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋งํ•ด์•ผ SSR์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์ ์œผ๋กœ ์ œ๊ฐ€ ์ง  ์ฝ”๋“œ๋Š” SSR์€ ์•„๋‹ˆ๊ฒ ๋‹ค๋Š” ํŒ๋‹จ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โœ’๏ธย 4. ๊ทธ๋Ÿผ ๋‚ด ์ฝ”๋“œ๋Š” CSR?

์œ„์—์„œ SSR์€ ์•„๋‹ˆ๊ฒ ๋‹ค๋Š” ํŒ๋‹จ์„ ํ•œ ๋’ค, ๊ทธ๋Ÿผ CSR์ธ๊ฐ€? ํ•˜๋Š” ์˜๋ฌธ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹์€ ๊ฐ€์žฅ ๋จผ์ € ํด๋ผ์ด์–ธํŠธ์—์„œ main.html์„ ๋กœ๋“œํ•˜๊ณ ,

์œ ์ €์˜ ์ž‘์—…์— ๋”ฐ๋ผ Mustache ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง์ ‘ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์นด๋“œ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์นด๋“œ ์ถ”๊ฐ€ ํ…œํ”Œ๋ฆฟ์„ ๋ Œ๋”๋งํ•˜๊ณ , ์ถ”๊ฐ€ ํ™•์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์„œ๋ฒ„๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ ์„ฑ๊ณต ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด location.reload()๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์นด๋“œ ์ถ”๊ฐ€ ํ™•์ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ (api๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•  ๋•Œ)๋Š” ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์—†์ด ํ™”๋ฉด๋งŒ ๋ณ€๊ฒฝํ•ด๋„ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด .innerHTML์„ ํ†ตํ•ด ํ™”๋ฉด์— mustache ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ํŽ˜์ด์ง€ ์ผ๋ถ€๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค๋‹ˆ๋‹ค.

function fetchColumnsAndRender() {
    fetch('/api/columns')
        .then(response => response.json())
        .then(data => {
            fetch('../components/column.mustache')
                .then(response => response.text())
                .then(template => {
                    const renderedColumns = data.columns.map(column => {
                        return Mustache.render(template, column);
                    }).join('');
                    const contentSection = document.querySelector('.content');
                    
                    // innerHTML += ์„ ํ†ตํ•ด ํ™”๋ฉด์— ์ถ”๊ฐ€
                    contentSection.innerHTML = renderedColumns;
                })
                .then(data => {
                    loadDeleteModal();
                })
                .then(data => {
                    registerCardEventListeners();
                    registerMoveCardEventListeners();
                })
                .catch(error => console.error('Error loading template:', error));
        })
        .catch(error => console.error('Error loading columns from API:', error));
}

์ฆ‰, HTML์˜ ์ผ๋ถ€๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ JavaScript๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๋ฐฉ์‹์€ CSR์— ๊ฐ€๊น๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค.

(CSR : ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ณ , HTML์„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹)

๐Ÿ—‘๏ธย 5. CSR๋„, SSR๋„ ์•„๋‹Œ๊ฐ€..?

๊ทธ๋Ÿฐ๋ฐ ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋ด๋„ CSR์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด์ž ์œ ์ผํ•œ(?) ์žฅ์ ์ด ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜์ง€ ์•Š์•„ ํ™”๋ฉด์ด ๊นœ๋ฐ•๊ฑฐ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์ œ ์›น์‚ฌ์ดํŠธ๋Š” ๊นœ๋ฐ•๊ฑฐ๋ฆฌ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๋ฌผ๋ก  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด CSR์ด๋ผ๋Š” ์ •์˜๋Š” ์•Œ๊ณ  ์žˆ์ง€๋งŒ,

๊ณผ์—ฐ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ธ ๊นœ๋ฐ•๊ฑฐ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š”๋ฐ, ๊ทธ๊ฑธ CSR์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

ํ•˜๋Š” ๋”œ๋ ˆ๋งˆ์— ๋น ์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋”œ๋ ˆ๋งˆ ๋•Œ๋ฌธ์— ์ •๋ง ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ์™„์ „ํ•œ ๋‹ต์„ ์ฐพ์ง€๋Š” ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Žย 5. ๋˜ ๋‹ค์‹œ โ€ฆ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์ธ๊ฐ€? ์ƒˆ๋กœ์šด ๊ด€์ ์—์„œ์˜ ๊ณ ๋ฏผ

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋˜ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ์—์„œ JavaScript๋ฅผ ํ†ตํ•ด ํ…œํ”Œ๋ฆฟ์„ ๋ Œ๋”๋งํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋Š” ๋งˆ์น˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ์•„๋‹๊นŒ?

SSR์€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ €๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„œ๋ฒ„๋ผ๋Š” ๋‹จ์–ด ๋•Œ๋ฌธ์— SSR์—์„œ ์˜๋ฏธํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋Š”๋ฐ,

SSR์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ, โ€œ๊ทธ๋ƒฅ ๋‹จ์ˆœํ•œ ์„œ๋ฒ„โ€, โ€œ์‰ฝ๊ฒŒ ๋งํ•ด ์ธํ„ฐ๋„ท์ด ๋˜๋Š” ์ปดํ“จํ„ฐโ€๋ผ๊ณ  ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ โ€œ์„œ๋ฒ„ = ์ธํ„ฐ๋„ท์ด ๋˜๋Š” ์ปดํ“จํ„ฐโ€, โ€œ์„œ๋ฒ„ โ‰  ๋ฐฑ์—”๋“œโ€์ธ ๊ฒƒ์ธ๋ฐ,

์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” SSR์€ ์„œ๋ฒ„์—์„œ HTML์„ ์ƒ์„ฑํ•ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ,

ํด๋ผ์ด์–ธํŠธ์—์„œ Javascript๋กœ HTML์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ๋„ ์ผ์ข…์˜ ์„œ๋ฒ„ ์—ญํ• ์ด ์•„๋‹๊นŒ?

ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

javascript๊ฐ€ html ๋”์— ์ ‘๊ทผํ•ด ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ๋„ ์„œ๋ฒ„๋กœ ๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š๋‚˜?

๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜๋ฉด CSR์€ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ JavaScript๊ฐ€ HTML์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ,

"๋ˆ„๊ฐ€ HTML์„ ์ƒ์„ฑํ•˜๋Š”๊ฐ€"์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค๋ฉด,

CSR ์—ญ์‹œ "์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง"์˜ ๋„“์€ ๋ฒ”์ฃผ์— ์†ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ์ƒ๊ฐ๋“ค์„ ๊ณ„์† ํ•˜๋‹ค๋ณด๋‹ˆ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ๊นŒ์ง€ ์˜จ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ ,

CSR ์—ญ์‹œ "์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง"์˜ ๋„“์€ ๋ฒ”์ฃผ์— ์†ํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์–ด์ฐจํ”ผ ๋‚ด ์ฝ”๋“œ๋Š” ์–ด๋””์— ์†ํ•˜๋Š”์ง€ ์ด ๋…ผ์˜๋กœ๋Š” ์ •์˜ํ•  ์ˆ˜ ์—†๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ์ƒ๊ฐ์„ ๋ฉˆ์ถ”๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹คโ€ฆ

6. ๊ฒฐ๋ก 

๊ฒฐ๋ก ์ ์œผ๋กœ, ์ œ๊ฐ€ ์ง  ์ฝ”๋“œ๊ฐ€ CSR์ธ์ง€ SSR์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

SSR๊ณผ CSR์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€๊ณ ,

๋‹ค๋งŒ CSR์„ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„ ์ค‘์—์„œ๋„ (์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์นด๋“œ ์ถ”๊ฐ€) ๋ Œ๋”๋ง ์ •์˜๋กœ๋งŒ ๋”ฐ์ง€์ž๋ฉด CSR์ด ๋งž์ง€๋งŒ ๊นœ๋ฐ•์ž„์ด ์—†๋‹ค๋Š” CSR์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ๋ฆฌ์•กํŠธ๋งŒ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ฐ”๋‹๋ผ js๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋‹ˆ, ์ƒˆ์‚ผ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๋‹ค์‹œ๊ธˆ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๊ณ , ๋˜ ๋•๋ถ„์— ๊นŠ์ด ์žˆ๊ฒŒ ๊ณต๋ถ€ํ•ด๋ณผ ์ƒ๊ฐ์กฐ์ฐจ ํ•˜์ง€ ๋ชปํ–ˆ๋˜ CSR๊ณผ SSR์— ๋Œ€ํ•ด์„œ๋„ ํ•™์Šตํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

CSR๊ณผ SSR์˜ ์ฐจ์ด๋Š” ๋‹จ์ˆœํžˆ ํŽ˜์ด์ง€์˜ ๊นœ๋ฐ•์ž„ ์—ฌ๋ถ€๋‚˜ ์ƒˆ๋กœ๊ณ ์นจ ์œ ๋ฌด๋กœ๋งŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

HTML์„ ์ƒ์„ฑํ•˜๊ณ  ๋ Œ๋”๋งํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ,

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ ๋ฐฉ์‹์˜ ํŠน์„ฑ๊ณผ ์žฅ์ ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ,

๊ทธ๋ฆฌ๊ณ  SSR์—์„œ ์ง€์นญํ•˜๋Š” ์„œ๋ฒ„๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ค‘์š”ํ•˜๊ฒŒ ๊ธฐ์–ตํ•ด๋‘์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.


์ฒ˜์Œ์œผ๋กœ ์ œ ๊ณ ๋ฏผ ๊ณผ์ •์„ ๋งค๊ฑฐ์ง„ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด์•˜๋Š”๋ฐ, ํ™•์‹คํžˆ ์ œ ๊ณ ๋ฏผ์„ ๊ธฐ์–ตํ•ด๋‘˜ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ตœ๋Œ€ํ•œ ์ž์ฃผ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋”ฅ๋‹ค์ด๋ธŒ ํ•ด๋ณด๊ณ , ๊ทธ ๊ฒฝํ—˜๊ณผ ๊ณ ๋ฏผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด