Skip to content

1.0.7 (2024.02.04)

Compare
Choose a tag to compare
@pipisebastian pipisebastian released this 06 Feb 05:39
· 140 commits to dev since this release

DOM ์กฐ์ž‘ ๋ฐฉ์‹ ๋ณ€๊ฒฝ, ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”, ๋ฆฌ์ŠคํŠธ ๊ฐ€์ƒํ™” ๋„์ž…, DB ์บ์‹œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

Refactor

DOM ์กฐ์ž‘ ๋ฐฉ์‹ ๋ณ€๊ฒฝ

  • ๋ฌธ์ œ
    • innerHTML์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•„๋ž˜ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•จ
      • XSS ์ทจ์•ฝ์ : ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด HTML๋กœ ์ง์ ‘ ํŒŒ์‹ฑ๋˜์–ด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์œ„ํ—˜์ด ์กด์žฌํ•จ
      • ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง: ํ…์ŠคํŠธ ๋ณ€๊ฒฝ์‹œ ํ…์ŠคํŠธ ์ „์ฒด DOM์„ ์žฌํŒŒ์‹ฑํ•˜๊ณ  ์žˆ์Œ
  • ํ•ด๊ฒฐ
    • ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ innerHTML์—์„œ documentFragment๋กœ ๋ณ€๊ฒฝ
      • HTML ํŒŒ์‹ฑ โ†’ DOM ํŠธ๋ฆฌ ๊ตฌ์„ฑ
        • innerHtml์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ „์ฒด DOM์„ ๋‹ค์‹œ ํŒŒ์‹ฑํ•ด ๊ธฐ์กด DOM์„ ์™„์ „ํžˆ ๋ฎ์–ด์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ์˜ ์–‘์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ ๋ฐœ์ƒ
        • documentFragment๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ DOM์„ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—์„œ ์ˆ˜์ •ํ•˜๊ณ , ๊ธฐ์กด DOM๊ณผ ๋น„๊ต ํ›„ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ•จ
        • ์ด๋ฅผ ํ†ตํ•ด ์ „์ฒด DOM์ด ๋‹ค์‹œ ํŒŒ์‹ฑ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ œ๊ฑฐํ•ด DOM ์—…๋ฐ์ดํŠธ ํšŸ์ˆ˜ ๊ฐ์†Œ
      • Layout ๊ณ„์‚ฐ โ†’ ๋ฆฌํ”Œ๋กœ์šฐ ๋ฐœ์ƒ
        • DOM ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ƒˆ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ• ๋•Œ๋งˆ๋‹ค ๋ฆฌํ”Œ๋กœ์šฐ ๋ฐœ์ƒ
        • documentFragment๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ์กด DOM๊ณผ ์ƒˆ๋กœ์šด DOM์„ ๋น„๊ตํ•ด ์ฐจ์ด๊ฐ€ ์žˆ์„๋•Œ๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ์ˆ˜์ •
      • Paint โ†’ ๋ฆฌํŽ˜์ธํŠธ ๋ฐœ์ƒ
        • ํ…์ŠคํŠธ์˜ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ, ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ• ๋•Œ๋งˆ๋‹ค ๋ฆฌํŽ˜์ธํŠธ ๋ฐœ์ƒ
        • documentFragment๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ๋ฒˆ์˜ ํŽ˜์ธํŠธ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์ค‘๊ฐ„ ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์ค„์ž„
  • ๊ณผ์ •
    • innerHTML ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์„ document.createDocumentFragment๋กœ ๋ณ€๊ฒฝ
    • ๋ฌธ์ž์—ด์˜ span ํƒœ๊ทธ, ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์„ fragment.appendChild๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
    • ๊ธฐ์กด ๋…ธ๋“œ์™€ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ์ˆ˜์ •
  • ๊ฒฐ๊ณผ
    • XSS ์ทจ์•ฝ์  ์ œ๊ฑฐ
    • DOM ํŒŒ์‹ฑ ๋ฐ ๋นŒ๋“œ ๋น„์šฉ ์ ˆ๊ฐ

๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ๋ฌธ์ œ
    • ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, ํŽ˜์ด์ง€ ๋‚ด๋ถ€ ์—๋””ํ„ฐ ๋ฐ ๋ธ”๋ก ๋ชจ๋‘๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
    • ์ด๋กœ์ธํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐ ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•จ
  • ํ•ด๊ฒฐ
    • React memo, useMemo๋ฅผ ํ•™์Šตํ•ด ํŽ˜์ด์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ค‘์—๋Š” ์—๋””ํ„ฐ ๋ฐ ๋ธ”๋ก์ด ๋ฆฌ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ
    • ๋ฆฌํ”Œ๋กœ์šฐ/๋ฆฌํŽ˜์ธํŠธ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ด ์˜ค๋ฒ„๋ ˆ์ด ์Šคํฌ๋ฆฐ์ด ๋ณด์ผ ๋•Œ๋Š” transform: scale(0) ์†์„ฑ์„ ํ†ตํ•ด ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ
    • ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ์ธก์ • ๋„๊ตฌ๋ฅผ ๋ถ„์„ํ•ด Chrome react devtool ์‚ฌ์šฉ
      • profiler๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ถ„์„ํ•ด ๋ Œ๋”๋ง์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ์ธก์ •
  • ๊ณผ์ •
    • ์˜ค๋ฒ„๋ ˆ์ด ์Šคํฌ๋ฆฐ ๋„์ž…์„ ํ†ตํ•ด ํŽ˜์ด์ง€ ํฌ๊ธฐ ๋ณ€๊ฒฝ์‹œ ํŽ˜์ด์ง€๊ฐ€ ํ•œ๋ฒˆ๋งŒ ๋ Œ๋”๋ง๋˜๋„๋ก ์ˆ˜์ •
    • ์—๋””ํ„ฐ, ๋ธ”๋ก์„ React.memo๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์ ์šฉ
      • ์ด๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธ ์ •๋ณด๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€
  • ๊ฒฐ๊ณผ
    • Render: 11.3ms โ†’ 4.9ms (์•ฝ 56.6% ํ–ฅ์ƒ)
    • Layout effects: 1.3ms โ†’ 0.6ms (์•ฝ 53.8% ํ–ฅ์ƒ)
    • Passive effects: 1ms โ†’ 0.6ms (์•ฝ 40.0% ํ–ฅ์ƒ)
    • ์ดํ•ฉ: 13.6ms โ†’ 6.1ms (์•ฝ 55.1% ํ–ฅ์ƒ)
  • ์ถ”๊ฐ€ ๋…ผ์˜์ 
    • ์Šค์ผˆ๋ ˆํ†คUI๋Š” ์‚ฌ์šฉ์ž๊ฒฝํ—˜(UX)์— ์žˆ์–ด์„œ๋Š” ์ข‹์ง€์•Š๋‹ค๊ณ  ํŒ๋‹จํ•จ
    • ์ถ”ํ›„ ๋””๋ฐ”์šด์‹ฑ ๋ฐ ์Šค๋กœํ‹€๋ง์„ ํ†ตํ•ด ์—๋””ํ„ฐ์™€ ๋ธ”๋ก์˜ width๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ์ˆ˜์ •ํ•ด ๋ฆฌํ”Œ๋กœ์šฐ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋ฉด์„œ ๋ฆฌ์‚ฌ์ด์ง• ์ค‘์—๋„ ๋ฌธ์„œ ๋‚ด์šฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•  ์˜ˆ์ •

๋ฆฌ์ŠคํŠธ ๊ฐ€์ƒํ™”

  • ๋ฌธ์ œ
    • ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ๋•Œ, ์•ˆ๋ณด์ด๋Š” ๋ธ”๋Ÿญ๊นŒ์ง€ ๋ชจ๋‘ ์žฌ๋ Œ๋”๋ง๋จ
    • ์ด๋Š” ์•ˆ๋ณด์ด๋Š” ๋ธ”๋Ÿญ์ด DOM ์—๋Š” ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŽ˜์ด์ง€ ํฌ๊ธฐ(width)๋ฅผ ๋ฐ”๊พธ๋ฉด ์ž์‹ ์š”์†Œ์ธ ๋ธ”๋Ÿญ๊นŒ์ง€ ์žฌ๋ Œ๋”๋ง์ด ๋˜๋Š” ๋ฌธ์ œ๋กœ ํŒŒ์•…๋จ
  • ํ•ด๊ฒฐ
    • ๋ฆฌ์ŠคํŠธ ๊ฐ€์ƒํ™” ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•ด ๋ณด์ด์ง€ ์•Š๋Š” ๋ธ”๋ก์„ DOM์—์„œ ์ œ๊ฑฐํ•˜๋„๋ก ์ˆ˜์ •
  • ๊ณผ์ •
    • ์ด๋ถ„ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•ด ํ™”๋ฉด์— ๋ณด์—ฌ์•ผ ํ•  ์ฒซ ๋ฒˆ์งธ item ํƒ์ƒ‰
    • ์Šคํฌ๋กค ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”๋ฉด์— ๋ณด์—ฌ์•ผํ•  ์ฒซ ๋ฒˆ์งธ item, ๋งˆ์ง€๋ง‰ item์„ ๊ตฌํ•˜์—ฌ ์ •์  ๋†’์ด ๊ธฐ๋ฐ˜์˜ ๋ฆฌ์ŠคํŠธ ๊ฐ€์ƒํ™” ๊ตฌํ˜„
    • ๊ฐ ๋ธ”๋Ÿญ์˜ ๋†’์ด๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ๋†’์ด๋ฅผ ์ง€์›ํ•˜๋Š” TanStack Virtual ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž…
  • ๊ฒฐ๊ณผ
    • ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ธ”๋Ÿญ๋“ค๋งŒ DOM์— ์กด์žฌํ•˜๋„๋ก ์ˆ˜์ •

DB ์บ์‹œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

  • ๋ฌธ์ œ
  • Nocta๋Š” ๋ฌธ์„œ ํŽธ์ง‘์— CRDT ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌธ์„œ๋ฅผ ํŽธ์ง‘ํ•˜๋ฉด, ํ•ด๋‹น ํŽธ์ง‘ ๋‚ด์šฉ์€ CRDT ์—ฐ์‚ฐ ๋‹จ์œ„๋กœ ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก๋จ
  • ์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ์—ฐ์‚ฐ์ด ๋งค์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•ด ๋งŒ์•ฝ ๋ชจ๋“  CRDT ์—ฐ์‚ฐ์„ DB์— ์ฆ‰์‹œ ๋ฐ˜์˜ํ•œ๋‹ค๋ฉด, ์žฆ์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋•Œ๋ฌธ์— DB ๋ถ€ํ•˜๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•จ
  • ์ด๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ํŽธ์ง‘ ๋‚ด์šฉ์„ ๋ชจ์•„๋’€๋‹ค๊ฐ€ ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•œ๊บผ๋ฒˆ์— DB์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋„์ž…ํ•ด DB ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋น„์šฉ์„ ์ค„์˜€์œผ๋‚˜ ๋‹ค์Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ
    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€: ์ „์ฒด ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ํ†ต์งธ๋กœ ๋ณด๊ด€ํ•˜๋‹ค ๋ณด๋‹ˆ, ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง
    • ์žฅ์•  ์‹œ ๋ฐ์ดํ„ฐ ์†์‹ค: ์„œ๋ฒ„ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์บ์‹œ์—๋งŒ ์กด์žฌํ•˜๋˜(์•„์ง DB์— ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€) ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ์‚ฌ๋ผ์ง
    • ๊ณผ๊ฑฐ ๊ธฐ๋ก ์ถ”์  ์–ด๋ ค์›€: ์—ฐ์‚ฐ์„ ์ฆ‰์‹œ ์ ์šฉํ•˜๋‹ค ๋ณด๋‹ˆ, ์–ด๋А ์‹œ์ ์—์„œ ์–ด๋–ค ์—ฐ์‚ฐ์ด ์žˆ์—ˆ๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›€
  • ํ•ด๊ฒฐ
    • ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•˜์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•˜๋Š” CRDT ์—ฐ์‚ฐ ๋‹จ์œ„๋งŒ ๋ณ„๋„๋กœ ์บ์‹ฑํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝ
    • ์œ„ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํŒจํ„ด(Event Sourcing Pattern)์„ ๋„์ž…. ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•จ
      • ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ์—ฐ์‚ฐ ๋ˆ„์ : ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ CRDT ์—ฐ์‚ฐ(์ด๋ฒคํŠธ)์„ ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ์Œ“์Œ
      • ์Šค๋ƒ…์ƒท ์ƒ์„ฑ: ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ๊ธฐ๋ก๋œ ์—ฐ์‚ฐ์„ DB ์Šค๋ƒ…์ƒท์— ์žฌ์ƒ(Replay)ํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ๋ฅผ DB์— ์ €์žฅํ•จ
      • ์ตœ์‹  ์ƒํƒœ ์ œ๊ณต: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋Š” DB ์Šค๋ƒ…์ƒท์— ์ €์žฅ๋œ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜จ ๋’ค ์ดํ›„์— ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ์žฌ์ƒํ•ด ์ตœ์‹  ์ •๋ณด๋ฅผ ์ œ๊ณต
    • Nocta์˜ CRDT๋Š” ์—ฐ์‚ฐ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌธ์„œ๋ฅผ ํŽธ์ง‘ํ•˜๋ฉด ๊ทธ CRDT ์—ฐ์‚ฐ์„ ์ด๋ฒคํŠธ๋กœ ๋ณด๊ด€ํ•จ
    • ์„œ๋ฒ„๋Š” ๋ฐ›์€ ์—ฐ์‚ฐ์„ ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ์ €์žฅํ•˜๊ณ , ๋™์‹œ์— ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•จ
    • ์ผ์ • ์ฃผ๊ธฐ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์žฌ์ƒํ•˜์—ฌ DB์— ์ƒˆ๋กœ์šด ์Šค๋ƒ…์ƒท์„ ์ €์žฅํ•จ
  • ๊ณผ์ •
    • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์—ฐ์‚ฐ์„ ์ธ๋ฉ”๋ชจ๋ฆฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฐ์ดํ„ฐ์— ์ฆ‰์‹œ ์ ์šฉํ•˜๋Š” ๋กœ์ง์„ ์ œ๊ฑฐํ•˜๊ณ  ์—ฐ์‚ฐ ์ž์ฒด๋ฅผ ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ์ €์žฅํ•˜๊ณ  ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋„๋ก ์ˆ˜์ •
    • ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ์Œ“์ธ ์—ฐ์‚ฐ์„ ์žฌ์ƒํ•ด ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ(์Šค๋ƒ…์ƒท ์ƒ์„ฑ)ํ•˜๊ณ  DB์— ๋ฐ˜์˜
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด DB์— ์ €์žฅ๋œ ์Šค๋ƒ…์ƒท๊ณผ ์ด๋ฒคํŠธ ์Šคํ† ์–ด์— ์ ์žฌ๋œ ์—ฐ์‚ฐ์„ ์กฐํ•ฉํ•ด ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜
  • ๊ฒฐ๊ณผ
    • CRDT ์—ฐ์‚ฐ์„ ์ด๋ฒคํŠธ๋กœ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ „ํ™˜ํ•˜๋ฉด์„œ ์•„๋ž˜ ์ด์  ํ™•๋ณด
      • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ: ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘์ง€ ์•Š๊ณ , ์—ฐ์‚ฐ๋งŒ์„ ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด์ด ํฌ๊ฒŒ ๊ฐ์†Œ
      • ์ด๋ ฅ ์ถ”์  ๋ฐ ๋ณต๊ตฌ ์šฉ์ด: ์ด๋ฒคํŠธ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ธฐ๋ก๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๊ณผ๊ฑฐ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์‰ฝ๊ฒŒ ์žฌ์ƒ ๊ฐ€๋Šฅ\
        • ์ด๋Š” ํ–ฅํ›„ ๋ฒ„์ „ ๊ด€๋ฆฌ๋‚˜ ์žฅ์•  ๋ณต๊ตฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ธฐ์— ์œ ๋ฆฌํ•จ
      • Redis ์ ์šฉ ์‹œ ํšจ์œจ์„ฑ ์ฆ๊ฐ€(ํ™•์žฅ์„ฑ): ์ถ”ํ›„ Redis ๋“ฑ ์™ธ๋ถ€ ์บ์‹œ๋ฅผ ๋„์ž…ํ•˜๋”๋ผ๋„ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์—ฐ์‚ฐ๋งŒ ์ €์žฅํ•˜๋ฏ€๋กœ, ์บ์‹œ ์šฉ๋Ÿ‰์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ