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

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

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

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

๐Ÿค”ย ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(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์—์„œ ์ง€์นญํ•˜๋Š” ์„œ๋ฒ„๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ค‘์š”ํ•˜๊ฒŒ ๊ธฐ์–ตํ•ด๋‘์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.


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

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

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

comment-user-thumbnail
2025๋…„ 12์›” 22์ผ

์˜ค๋žœ๋งŒ์— ๊นƒํ—ˆ๋ธŒ ๊ตฌ๊ฒฝํ•˜๋‹ค๊ฐ€ ์žฌ๋ฐŒ์–ด๋ณด์—ฌ์„œ ์ฝ์–ด๋ณด๊ณ  ๋Œ“๊ธ€ ๋‚จ๊น๋‹ˆ๋‹ค.

๊ธ€์—์„œ ์ด๋ฏธ ๋งŽ์€ ๊ณ ๋ฏผ์ด ๋А๊ปด์ง€์ง€๋งŒ SSR๊ณผ CSR์„ ์™œ ํ•˜๋Š”์ง€๋ฅผ ์ค‘์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์กฐ๊ธˆ ๋” ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1.

์ดˆ๊ธฐ์—๋Š” CSR๊ณผ SSR์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋‚˜๋‰˜์–ด์žˆ์ง€๋Š” ์•Š์•˜์–ด์š”. CSR ์ด๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๊ฐ€ ์—†์—ˆ์ฃ . ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๋ผ๋Š” ๊ฐœ๋…์—์„œ "์„œ๋ฒ„", ํŠนํžˆ ๊ทธ ์ค‘์—์„œ "์›น์„œ๋ฒ„"๋Š” html์„ "์„œ๋น™"ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋˜ ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋ฒ„๊ฐ€ html์„ ๋‚ด๋ ค์ฃผ๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋‹น์—ฐํ•œ ์—ญํ• ์ด์—ˆ์–ด์š”. ๊ทธ ๋‹น์‹œ html์€ ์ •์ ์ธ html ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.

2.

์›น์‚ฌ์ดํŠธ์— ์ ์  ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์š”๊ตฌ๋˜๋ฉด์„œ cgi๋ผ๋Š” ๊ฐœ๋…์ด ๋‚˜์™”์–ด์š”. ์›น์‚ฌ์ดํŠธ๋Š” ์ด์ œ ๋‹จ์ˆœํžˆ ์ •์ ์ธ ์‚ฌ์ดํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž์— ๋งž๋Š” ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์ด ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” cgi ๊ธฐ๋ฐ˜์˜ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋œ html์„ ๋‚ด๋ ค์ฃผ๊ธฐ ์‹œ์ž‘ํ–ˆ์–ด์š”. ์ด๋•Œ๋ถ€ํ„ฐ ์ผ์ข…์˜ ๋™์  ๋ Œ๋”๋ง์ด๋ผ๋Š” ๊ฐœ๋…์ด ์ƒ๊ฒผ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ํŽธํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ€๋ น, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์„œ html table ํ˜•ํƒœ๋กœ ๊ฒŒ์‹œํŒ์„ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ์ œ๊ณตํ•œ๋‹ค๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์˜ form ์š”์ฒญ์„ ๋ฐ›์•„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ์˜ crud ๋™์ž‘์„ ์›นํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณตํ•˜๊ฒŒ ๋œ ๊ฑฐ์ฃ .

์ด๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ ์ด ๊ธ€์˜ ๋ณธ๋ฌธ์ฒ˜๋Ÿผ "๊นœ๋นก"์ด๋Š” ํŽ˜์ด์ง€ ์ด๋™์„ ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์กŒ์–ด์š”. ๊ฐ€๋ น form ์ „์†ก์ด๋ผ๊ฑฐ๋‚˜, ํŽ˜์ด์ง€ ์ด๋™์ด๋ผ๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์œผ๋กœ ํŽ˜์ด์ง€๊ฐ€ ํ†ต์งธ๋กœ ์›€์ง์ด๋Š” ๋™์ž‘์ธ ๊ฑฐ์ฃ .

3.

์›น์‚ฌ์ดํŠธ๊ฐ€ ์ ์  ๋ณต์žกํ•ด์ง€๋ฉด์„œ ํŽ˜์ด์ง€๊ฐ€ ์ด๋™ํ•˜์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹ˆ์ฆˆ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋ น ํŽ˜์ด์Šค๋ถ์˜ ๋ฌดํ•œ์Šคํฌ๋กค์ฒ˜๋Ÿผ์š”. ๊ธฐ์กด์—๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋‚˜ (์ด๋ฏธ ๋งํ•ด๋ฒ„๋ฆฐ) ํ”Œ๋ž˜์‹œ ๊ฐ™์€ ๊ฒƒ์„ ํ†ตํ•ด ์›น์‚ฌ์ดํŠธ์˜ ํšจ๊ณผ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋Š” ์žˆ์—ˆ์ง€๋งŒ, ํŽ˜์ด์ง€ ์ด๋™ ์—†์ด ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง„ ๋ชปํ–ˆ๊ฑฐ๋“ ์š”.

ajax ๋ผ๋Š” ๊ธฐ์ˆ ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ajax๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์„œ๋ฒ„์— ๋น„๋™๊ธฐ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”. (๊ณผ๊ฑฐ๋ถ€ํ„ฐ ๋งŽ์ด ์“ฐ์ธ XMLHttpRequest, ์ตœ๊ทผ ๋“ฑ์žฅํ•œ fetch, ๋„๋ฆฌ ์“ฐ์ด๋Š” axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€๊ฒŒ ajax๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์—์š”.) ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์กด์—๋Š” ํŽ˜์ด์ง€ ์š”์ฒญ์„ ํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋”ธ๊น ํ•ด์„œ ์š”์ฒญ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฑฐ์ฃ .

ajax๊ฐ€ ๋“ฑ์žฅํ•œ ํ›„์—๋Š” ํŽ˜์ด์ง€ ๋‚ด ์ผ๋ถ€ ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋™์ž‘์— ๋”์ด์ƒ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€ ์š”์ฒญ์„ ๋ณด๋‚ผ ํ•„์š”๊ฐ€ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. ajax๋กœ ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ๊ทธ๊ฑธ ๋ฐ›์•„์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ html์„ ๊ทธ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฑฐ์˜€์ฃ . ๊ธฐ์กด์—๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ html์„ ๊ทธ๋ฆด ์ˆ˜๋Š” ์žˆ์—ˆ์ง€๋งŒ, ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ๋ฐ›์•„ ์ƒˆ๋กœ์šด "๋ฐ์ดํ„ฐ"๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ html์„ ๊ทธ๋ฆฐ๋‹ค๋Š” ์ ์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ajax ํ•˜๋ฉด ๋‹จ์ˆœํžˆ xml, json ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฑธ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ดˆ๊ธฐ์—” ๊ทธ๋ƒฅ html ์ž์ฒด๋ฅผ ๋‚ด๋ ค์ฃผ๋Š” ์‹์œผ๋กœ๋„ ๋งŽ์ด ๊ตฌํ˜„ํ•˜๊ณค ํ–ˆ์—ˆ์–ด์š”. (์ง€๊ธˆ์€ json ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค์ฃผ๋ฉด ๋ฏธ์นœ์‚ฌ๋žŒ ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๊ฒ ์ง€๋งŒ์š”.) ๊ฐ€๋ น ํŽ˜์ด์Šค๋ถ์˜ ๋ฌดํ•œ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋  ์—˜๋ฆฌ๋จผํŠธ๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ๋„ ์žˆ๊ฒ ์ง€๋งŒ(์ด๊ฒŒ ์ง€๊ธˆ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ฐฉ์‹์ด์ฃ ), ์„œ๋ฒ„์—์„œ ๊ทธ๋ƒฅ ์—˜๋ฆฌ๋จผํŠธ๋“ค์„ html๋กœ ๊ทธ๋ ค์„œ html์„ ๋‚ด๋ ค์ฃผ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ทธ html์„ innerHTML๋กœ ๋ง๋ถ™์ด๋Š” ์‹์œผ๋กœ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
-> ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฑด CSR์ผ๊นŒ์š”? SSR์ผ๊นŒ์š”?

4.

ajax๊ฐ€ ๋“ฑ์žฅํ•œ ์ดํ›„๋กœ html์„ ๊ทธ๋ฆฌ๋Š” ์—ญํ• ์ด ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋งŽ์ด ๋„˜์–ด์™”์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด์•ผ html์„ ๊ทธ๋ฆดํ…๋ฐ, ์ด์ œ ๋ธŒ๋ผ์šฐ์ €๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฒผ์œผ๋‹ˆ๊นŒ์š”. ์ด ์‹œ๊ธฐ๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ html์„ ์ ๊ทน์ ์œผ๋กœ ๋ฐ”๊พธ๋Š” ์‹์œผ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์ด ๋˜์—ˆ์–ด์š”.

์•„์˜ˆ ๋ธŒ๋ผ์šฐ์ €์— html ๊ทธ๋ฆฌ๋Š” ์ „๊ถŒ์„ ๋„˜๊ฒจ๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š”..)๋“ค๋„ ๋“ฑ์žฅํ–ˆ์–ด์š”. AngularJS, React, Vue.js ๊ฐ™์€ ์นœ๊ตฌ๋“ค์ด์—์š”.

ajax๊ฐ€ ๋“ฑ์žฅํ•œ ํ›„๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŽ˜์ด์ง€๋ฅผ ์—ด์‹ฌํžˆ ์ œ์–ดํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋“ค์ด ์žˆ์—ˆ๊ฑฐ๋“ ์š”.
1. DOM ์š”์†Œ๋ฅผ ์ง์ ‘ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๊ณ  ์žˆ์œผ๋‹ˆ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค. (์ € html์€ ๊ทธ๋ž˜์„œ ๋ˆ„๊ฐ€ ๊ทธ๋ฆฐ๊ฑด๋ฐ? ์ด ์ด๋ฒคํŠธ๋Š” ์™œ ๊ฐ‘์ž๊ธฐ ๋ฐ”์ธ๋”ฉ ๋œ ๊ฑด๋ฐ?)
2. ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ html์„ ๋ฎ์–ด์“ฐ๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„๋ฒ…์ธ๋‹ค. (์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒฝํ—˜ํ•˜๊ธด ํž˜๋“ค๊ฒ ์ง€๋งŒ)

์ƒˆ๋กœ ๋“ฑ์žฅํ•œ ๋„๊ตฌ๋“ค์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฉด์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ์–ด์š”.
AngularJS๋Š” ์„œ๋ฒ„์—์„œ๋‚˜ ํ•˜๋˜ MVC๋ผ๋Š” ํŒจํ„ด์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์˜ฎ๊ฒจ์˜ค๋Š” ์‹œ๋„๋ฅผ ํ–ˆ๊ณ ,
React, Vue.js๋Š” ๋ Œ๋”๋ง ๋ฐฉ๋ฒ• ์ž์ฒด๋ฅผ ์ถ”์ƒํ™”์‹œ์ผœ๋ฒ„๋ ธ์–ด์š”.

์ƒˆ๋กœ์šด ๋„๊ตฌ๋“ค์€ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋“ค๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ๋‹จ์ˆœํžˆ "์ˆ˜์‹ "ํ•˜๋Š” ์—ญํ• ์—์„œ, ์ ๊ทน์ ์œผ๋กœ "์ƒ์‚ฐ"ํ•˜๋Š” ์—ญํ• ๋กœ, ์‹ฌ์ง€์–ด๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ๊ทธ๋ฆฌ๋Š” ์ „๊ถŒ์„ ๊ฐ€์ ธ๊ฐ€๋„๋ก ๋งŒ๋“ค์–ด๋ฒ„๋ ธ์–ด์š”. ์ด์ œ๋Š” ํŽ˜์ด์ง€ ์ด๋™ ์ด๋ฒคํŠธ๊นŒ์ง€๋„ ๊ฐ„์„ญํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ฑฐ๋“ ์š”.

์ด๋Ÿฐ ์ผ๋ จ์˜ ๊ณผ์ •๋“ค์„ ๊ฑฐ์ณ ์„œ๋ฒ„์—์„œ๋Š” html ์•ˆ์— ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ •๋ณด ์—†์ด ๋‹จ์ˆœํžˆ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ Œ๋”๋ง ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” html๋งŒ ๋˜์ ธ์ฃผ๋Š” ๊ทน๋‹จ์ ์ธ ํ˜•ํƒœ์˜ ํŽ˜์ด์ง€๊ฐ€ ๋งŽ์ด ์ƒ๊ฒจ๋‚ฌ์–ด์š”.

5.

์‚ฌ์‹ค ์ด๊ฑด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์„œ๋ฒ„์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ฟผ๋ฆฌ ํ•œ ๋ฒˆ์œผ๋กœ ๋๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ, ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์„œ๋ฒ„์— ajax ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ํ”„๋ก์‹œํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ์œผ๋‹ˆ๊นŒ์š”. (๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด 1 hop์ด ๋” ์ƒ๊ธด ๊ฑฐ์ฃ .) ํŽ˜์ด์ง€๋Š” ๋‹น์—ฐํžˆ ๋А๋ ค์ง€๊ฒ ์ฃ . ๋А๋ ค์ง€๋Š” ๊ฑธ ๊ฐ์ˆ˜ํ•  ๋งŒํผ์˜ ์ฝ”๋“œ ํ€„๋ฆฌํ‹ฐ ์ƒ์Šน์ด ์žˆ์—ˆ๊ฒ ์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ๊ทธ๋Ÿฐ๊ฑฐ ๊ด€์‹ฌ ์—†์ฃ .

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

์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ html ๊ทธ๋ฆฌ๋Š” ์—ญํ• ์„ ์„œ๋ฒ„์™€ ๋‚˜๋ˆด์–ด์š”.

์ด์ œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•ด์š”. ํŠน์ • ํŽ˜์ด์ง€ ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๊ฐ€ ๊ทธ ํŽ˜์ด์ง€ ์‘๋‹ต์„ ํ•ด์ฃผ๊ณ , ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ทธ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ ค์ฃผ๋Š” ์‹์œผ๋กœ์š”. ๋‘ ๊ฐœ์˜ ์žฅ๋‹จ์ ์„ ๊ณต์œ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฑฐ์ฃ .


CSR, SSR ์ด๋ผ๋Š” ์šฉ์–ด์— ์ง‘์ฐฉํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.
(๊ฐœ์ธ์ ์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์ง„์˜์€ ๊ณผํ•˜๊ฒŒ ๋ณต์žกํ•œ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœ๋…์ด ๊ผฌ์•„์ ธ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๋ฆฌ์•กํŠธ๊ฐ€ ์ฃผ๋ฅ˜์ด์ง€๋งŒ ๋ฆฌ์•กํŠธ ์•ˆ์—์„œ๋„ ์„ธ๋ถ€์ข…ํŒŒ๊ฐ€ ๋‚˜๋‰˜๋Š” ํ˜ผ๋ˆ์˜ ์‹œ๊ธฐ์ธ ๊ฒƒ ๊ฐ™์•„์š”.)

๋ณธ์งˆ์— ์ง‘์ค‘ํ•ด์„œ, ์›นํŽ˜์ด์ง€๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์ด๊ณ , ์—ฌ๊ธฐ์„œ์˜ ์ •๋ณด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๊ณต๋œ ๊ฒฐ๊ณผ๋ฌผ์ด์—์š”. ์›นํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋Š” html์ด๊ฒ ์ฃ . (์ •ํ™•ํžˆ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ทธ๋ ค์ค€ ํ™”๋ฉด์ด ์ •๋ณด์ด๊ฒ ์ง€๋งŒ.. ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ํ™”๋ฉด์„ ๊ทธ๋ ค์ฃผ๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ ํฌ๋งท์ด html์ด๋‹ˆ ์ด๋Ÿฐ ์„ธ๋ถ€ ๋™์ž‘์€ ์ƒ๋žตํ• ๊ฒŒ์š”)

๋ Œ๋”๋ง์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ๋‹จ์ˆœํžˆ "html์„ ๊ทธ๋ฆฐ๋‹ค" ๊ฐ€ ์•„๋‹ˆ๋ผ "์ •๋ณด๋ฅผ ๊ทธ๋ฆฐ๋‹ค" ๋ผ๊ณ  ํ•ด์„ํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”? ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ(json๊ณผ ๊ฐ™์€)๋ฅผ ๋ฐ›์•„ ์ •๋ณด(html)๋ฅผ ๊ทธ๋ฆฐ๋‹ค๋ฉด CSR ์ด๊ฒ ๊ณ , ์„œ๋ฒ„๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ธ๋“ค๋งํ•ด์„œ html์„ ๋‚ด๋ ค์ค€๋‹ค๋ฉด SSR ์ด๊ฒ ์ฃ . ์„œ๋ฒ„์™€ ํด๋ผ๊ฐ€ ๋‘˜ ๋‹ค ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด SSR๊ณผ CSR ๋ชจ๋‘ ํ•˜๊ณ  ์žˆ๋Š” ๊ฑฐ์ฃ .

๋‹จ์ˆœํžˆ ์˜๋ฏธ ์—†๋Š” html๋งŒ์„ ๊ทธ๋ฆฌ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๊ฑด ๋ Œ๋”๋ง์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ์ •์  ํŒŒ์ผ์„ ์„œ๋น™ํ•œ ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„ ์—†์œผ๋‹ˆ๊นŒ์š”.

๋ณธ๋ฌธ์—์„œ ์–ธ๊ธ‰ํ•œ mustache๋กœ ํŽ˜์ด์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทธ๋ ธ๋Š” ์ง€๋Š” ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์ด๋Ÿฐ ๊ด€์ ์—์„œ ์ ‘๊ทผํ•ด๋ณด๋ฉด ๋„์›€์ด ๋˜์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€