Skip to content

Releases: boostcampwm-2024/refactor-web33-Nocta

1.1.3 (2024.02.21)

21 Feb 06:28
Compare
Choose a tag to compare

Fix

AI ํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ค‘์— ํŽ˜์ด์ง€๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋Š” ๋ฌธ์ œ ์ˆ˜์ •

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

1.1.2 (2024.02.21)

20 Feb 16:36
Compare
Choose a tag to compare

โœ…ย New Features

LLM ๋ชจ๋ธ ๋ณ€๊ฒฝ

  • ๋‹ต๋ณ€์˜ ์ •ํ™•์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด LLM์„ CLOVA Studio์—์„œ OpenAI๋กœ ๋ณ€๊ฒฝ
  • OpenAI ์‘๋‹ต ๊ฒฐ๊ณผ์— ๋งž์ถฐ ํŒŒ์‹ฑ ๋กœ์ง ์ˆ˜์ •
  • ํ† ํฐ ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ณด์žฅโ†’ OpenAI์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์œผ๋กœ ์ธํ•ด ํ† ํฐ ํŒŒ์‹ฑ ๋ฐ ๋…ธ์ถœ ์ˆœ์„œ๊ฐ€ ๋ถˆ์•ˆ์ •ํ–ˆ๋˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด,ํ์— ๋‹ด์•„ ์ฐจ๋ก€๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆœ์„œ๋ฅผ ๋ณด์žฅ

QA๋ฅผ ํ†ตํ•œ UX ๊ฐœ์„ 

  • indent 2, 3๊ฐœ์ผ ๋•Œ ๋งˆํฌ๋‹ค์šด ํŒŒ์‹ฑ ๋™์ž‘ํ•˜๋„๋ก ์ˆ˜์ •
  • ์ˆ˜์ง์„  ํŒŒ์‹ฑ ์ถ”๊ฐ€
  • ํŽ˜์ด์ง€ ์ƒ์„ฑ ๋ฐ ๋ฌธ์ž insert CRDT ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๊ฐœ์„ 
    • ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ CRDT ์—ฐ์‚ฐ ์ „์†ก
    • ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ฌธ์„œ ์ƒ์„ฑ ์™„๋ฃŒ ํ›„ CRDT ์—ฐ์‚ฐ ์ „์†ก
  • ํŽ˜์ด์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์‹œ ์Šค์ผˆ๋ ˆํ†ค UI ์ œ๊ฑฐ
  • ์ œ๋ชฉ ์ž…๋ ฅ์„ ํŽธ์ง‘๊ธฐ ์™ธ๋ถ€์—์„œ ์ž…๋ ฅํ•˜๋„๋ก ์ˆ˜์ •

1.1.1

13 Feb 14:23
Compare
Choose a tag to compare

AI ๋ฌธ์„œ ์ž‘์„ฑ ์„ฑ๋Šฅ ๊ฐœ์„ 

โœ…ย New Features

AI ๋ฌธ์„œ ์ž‘์„ฑ ์„ฑ๋Šฅ ๊ฐœ์„ 

แ„†แ…ฎแ„Œแ…ฆ

  • AI ๋ฌธ์„œ ์ž‘์„ฑ ์™„์„ฑ๋„ ๊ฐœ์„  (#32)
    • ai ์‘๋‹ต ํŒŒ์‹ฑ ํ† ํฐ ๋‹จ์œ„๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ • (๊ธฐ์กด์—๋Š” ๋‹ค ๋งŒ๋“ค์–ด์ง„ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด๋งŒ ๋ฐ›์•„ ์ฒ˜๋ฆฌ)
      • ai ํ† ํฐ ๋“ค์–ด์˜ฌ๋•Œ๋งˆ๋‹ค char, block ๋‹จ์œ„๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ socket ์—ฐ์‚ฐ ์ „์†ก
    • block ํƒ€์ž… ๊ฒฐ์ • ๋กœ์ง ์ˆ˜์ •
      • ๊ธฐ์กด์—๋Š” ์™„์„ฑ๋œ ๋ฌธ์ž์—ด("# ์ œ๋ชฉ")์„ ๋ณด๊ณ  block ํƒ€์ž…์„ ๋จผ์ € ๊ฒฐ์ •ํ•˜๊ณ  char ์—ฐ์‚ฐ์„ ๋ณด๋‚ด์คฌ์Œ
      • ๋ฐ”๋€ ๋กœ์ง์€ ๋ฌธ์ž๊ฐ€ ๋“ค์–ด์˜ค๋Š” ์‹œ์ (์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ”๋กœ ๋ณด์—ฌ์คŒ)์— ๋ฐ”๋กœ ์ „ํ™˜๋˜๋„๋ก ์ˆ˜์ •
    • ํ…์ŠคํŠธ ์Šคํƒ€์ผ(๊ตต๊ธฐ, ๋ฐ‘์ค„, ์ทจ์†Œ์„ , ๊ธฐ์šธ๊ธฐ) ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • ์ž์‹ ์ด ๋งŒ๋“  ai ํŽ˜์ด์ง€๋งŒ ๋ฐ”๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • UX ์ตœ์ ํ™” (#31)
    • ์˜จ๋ณด๋”ฉ ์˜ค๋ฒ„๋ ˆ์ด ์—”ํ„ฐ ์ž…๋ ฅ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •
    • AI ๋ชจ๋‹ฌ ๋กœํ‹ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์œ„์น˜ ์ˆ˜์ •

AI ๋ฌธ์„œ ์„ฑ๋Šฅ ๊ฐœ์„  ๊ฒฐ๊ณผ

  • ๋ฌธ์„œ ์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„์€ 25.954์ดˆ์—์„œ 23.915์ดˆ๋กœ ์•ฝ 7.86% ํ–ฅ์ƒ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜๋Š” ์‹œ๊ฐ„์ด 25.839์ดˆ์—์„œ 2.378์ดˆ๋กœ ๊ฐ์†Œํ•จ์œผ๋กœ์จ UX ํ–ฅ์ƒ

๐Ÿšจ Fix

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

  • ๋ฆฌ์ŠคํŠธ ๊ฐ€์ƒํ™”์—์„œ ๋“œ๋ž˜๊ทธํ• ๋•Œ ์—…๋ฐ์ดํŠธ ๋˜์ง€์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • (#29)
    • virtualIndex๋ฅผ ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋„ฃ์Œ์œผ๋กœ์จ ํ•ด๊ฒฐ

1.1.0

07 Feb 03:33
Compare
Choose a tag to compare

AI ๋ฌธ์„œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

โœ…ย New Features

409906630-3043039d-ca93-4922-b763-de3a19f06a7c

AI ๋ฌธ์„œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๊ฐœ๋ฐœ ์œ„ํ‚ค ๋ฐ”๋กœ๊ฐ€๊ธฐ

  • AI ๋ฌธ์ € ์ž‘์„ฑ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#21)
    • ๋ฌธ์„œ ์ž‘์„ฑ ์ปดํฌ๋„ŒํŠธ์™€ API ์—ฐ๊ฒฐ ํ‹€์„ ์ž‘์„ฑ
  • AI ๋ฌธ์„œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#26)
    • CLOVA Studio API ํ”„๋กฌํฌํŠธ ์ž‘์„ฑ
    • CLOVA API ์—ฐ๋™
    • CLOVA Studio API ์‘๋‹ต ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋ฐ CRDT ์—ฐ์‚ฐ์œผ๋กœ ๋ณ€ํ™˜
    • CRDT ์—ฐ์‚ฐ DB ์ €์žฅ ๋ฐ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋กœ ๊ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ
  • AI ๋ฌธ์„œ ์ž‘์„ฑ ์™„์„ฑ๋„ ๊ฐœ์„  (#27)
    • API ์‘๋‹ต ์‹œ๊ฐ„๋™์•ˆ ๋กœ๋”ฉ ์•„์ด์ฝ˜ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 
    • ํŽ˜์ด์ง€ ์ƒ์„ฑ์‹œ ์ƒ์„ฑ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ์ถ”๊ฐ€
    • ์˜จ๋ณด๋”ฉ์Šคํฌ๋ฆฐ์— AI ๋ฌธ์„œ๋ฒ„ํŠผ ์•ˆ๋‚ด ์ถ”๊ฐ€
    • ์•„๋ฌด์ž…๋ ฅํ•˜์ง€์•Š์„๋•Œ ํ”„๋กฌํ”„ํŠธ ๋‚ด์šฉ์ด ๋…ธ์ถœ๋˜๋Š” ํ˜„์ƒ ์ˆ˜์ •

Fix

๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ CLOVA Studio API ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ˆ˜์ •

  • ๋ฐฐํฌ๋‹จ๊ณ„์—์„œ CLOVA Studio API ๊ด€๋ จ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ์šฉ (#28)

1.0.10 (2024.02.06)

06 Feb 05:41
Compare
Choose a tag to compare

AI ๋ฌธ์„œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

โœ…ย New Features

AI ๋ฌธ์„œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  • AI ๋ฌธ์ € ์ž‘์„ฑ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#21)

    • ๋ฌธ์„œ ์ž‘์„ฑ ์ปดํฌ๋„ŒํŠธ์™€ API ์—ฐ๊ฒฐ ํ‹€์„ ์ž‘์„ฑ
  • AI ๋ฌธ์„œ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#26)

    • CLOVA Studio API ํ”„๋กฌํฌํŠธ ์ž‘์„ฑ
    • CLOVA API ์—ฐ๋™
    • CLOVA Studio API ์‘๋‹ต ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋ฐ CRDT ์—ฐ์‚ฐ์œผ๋กœ ๋ณ€ํ™˜
    • CRDT ์—ฐ์‚ฐ DB ์ €์žฅ ๋ฐ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋กœ ๊ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ
  • AI ๋ฌธ์„œ ์ž‘์„ฑ ์™„์„ฑ๋„ ๊ฐœ์„  (#27)

    • API ์‘๋‹ต ์‹œ๊ฐ„๋™์•ˆ ๋กœ๋”ฉ ์•„์ด์ฝ˜ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 
    • ํŽ˜์ด์ง€ ์ƒ์„ฑ์‹œ ์ƒ์„ฑ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ์ถ”๊ฐ€
    • ์˜จ๋ณด๋”ฉ์Šคํฌ๋ฆฐ์— AI ๋ฌธ์„œ๋ฒ„ํŠผ ์•ˆ๋‚ด ์ถ”๊ฐ€
    • ์•„๋ฌด์ž…๋ ฅํ•˜์ง€์•Š์„๋•Œ ํ”„๋กฌํ”„ํŠธ ๋‚ด์šฉ์ด ๋…ธ์ถœ๋˜๋Š” ํ˜„์ƒ ์ˆ˜์ •

1.0.9 (2024.02.05)

06 Feb 05:40
Compare
Choose a tag to compare

์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž ์ฒ˜๋ฆฌ ์ˆ˜์ •

Fix

  • ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ •
    • ๊ธฐ์กด innerhtml ๋ฐฉ์‹์—์„œ documentFragment๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ sanitizeText ๋กœ์ง ์ˆ˜์ •

1.0.8 (2024.02.05)

06 Feb 05:39
Compare
Choose a tag to compare

bcrypt ๋ชจ๋“ˆ์„ bcryptjs ๋ชจ๋“ˆ๋กœ ๋ณ€๊ฒฝ

Fix

  • bcrypt ๋ชจ๋“ˆ์„ bcryptjs ๋ชจ๋“ˆ๋กœ ๋ณ€๊ฒฝ
    • node 20 ๋„์ปค ์ด๋ฏธ์ง€์—์„œ bcrypt ๋ชจ๋“ˆ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ(์ด์ „๊นŒ์ง€๋Š” ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ๋์—ˆ์Œ)
    • bcrypt ๋ชจ๋“ˆ์ด python์œผ๋กœ ๋ž˜ํ•‘๋œ c++ ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆ์ด๋ผ ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž„
    • g++, python ๋“ฑ์„ ์„ค์น˜ํ•ด ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค ํ–ˆ์œผ๋‚˜ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ
    • ๋ถ€๋“์ดํ•˜๊ฒŒ bcrypt ๋ชจ๋“ˆ์„ JS๋กœ ์ œ์ž‘๋ผ ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” bcryptjs ๋ชจ๋“ˆ๋กœ ๊ต์ฒดํ•จ
    • ์ผ๋ฐ˜์ ์œผ๋กœ bcrypt ๋ชจ๋“ˆ์ด bcryptjs ๋ชจ๋“ˆ๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ํ•˜๋ฝ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋จ

1.0.7 (2024.02.04)

06 Feb 05:39
Compare
Choose a tag to compare

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 ๋“ฑ ์™ธ๋ถ€ ์บ์‹œ๋ฅผ ๋„์ž…ํ•˜๋”๋ผ๋„ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์—ฐ์‚ฐ๋งŒ ์ €์žฅํ•˜๋ฏ€๋กœ, ์บ์‹œ ์šฉ๋Ÿ‰์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ

1.0.6 (2024.01.16)

16 Jan 08:57
Compare
Choose a tag to compare

๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ CRDT ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ˆ˜์ •

Fix

  • ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ CRDT ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ˆ˜์ •
    • ํ˜„์žฌ CRDT ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์—์„œ ์บ์‹œ ์‚ญ์ œ ๋Œ€์ƒ์ด DB์— ์ €์žฅ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋จ
    • ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” DB์— ์ €์žฅ๋˜์ง€ ์•Š๋Š” ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์ œ์™ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ๋Š” CRDT ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Œ
    • ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์ „์— ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด CRDT ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ๋™์ž‘์‹œํ‚ค๋„๋ก ๋กœ์ง์„ ์ˆ˜์ •ํ•จ

1.0.5 (2024.01.16)

16 Jan 08:17
3141337
Compare
Choose a tag to compare

TombStone ์ ์šฉ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€

TombStone

  1. ๋ณ€๊ฒฝ์‚ฌํ•ญ
    • CRDT์˜ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ๊ธฐ์กด์˜ hard delete ๋ฐฉ์‹์—์„œ soft delete ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
    • soft delete ๊ตฌํ˜„์„ ์œ„ํ•ด Node(Block, Char)์— deleted ํ”Œ๋ž˜๊ทธ ์ถ”๊ฐ€
    • LinkedList์˜ DeleteNode, RemoveNode, InsertById, findByIndex ๋ฉ”์„œ๋“œ ์ˆ˜์ •
    • ์บ์‹œ๋œ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ •๋ณด๊ฐ€ DB์— ์ €์žฅ๋  ๋•Œ ์‚ญ์ œ ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ๋“ค์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ๋™์ž‘
  2. ์ถ”๊ฐ€์‚ฌํ•ญ
    • Jest LinkedList๋ณ„ ๋ฉ”์„œ๋“œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ
  3. ์ž ์žฌ ๋ฌธ์ œ
    • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์ฃผ๊ธฐ ๋ฌธ์ œ
      • ํ˜„์žฌ soft delete๋œ ๋…ธ๋“œ๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
      • ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒŒ์ŠคํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ CRDT ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

  1. ์ธ์ฆ ํ…Œ์ŠคํŠธ
    • ํšŒ์›๊ฐ€์ž…
    • ํšŒ์›๊ฐ€์ž… ์œ ํšจ์„ฑ ๊ฒ€์ฆ
    • ๋กœ๊ทธ์ธ
    • ๋กœ๊ทธ์ธ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
    • ๋กœ๊ทธ์•„์›ƒ
  2. ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ ํ…Œ์ŠคํŠธ
    • ๋งˆํฌ๋‹ค์šด ๋ธ”๋ก ์ถ”๊ฐ€
    • ํŽ˜์ด์ง€ ์ œ๋ชฉ ๋ณ€๊ฒฝ
    • ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ• ๋ณ€ํ™˜ (ํ—ค๋”, ๋ฆฌ์ŠคํŠธ, ์ฒดํฌ๋ฐ•์Šค, ์ธ์šฉ๊ตฌ)
  3. ํŽ˜์ด์ง€/์‚ฌ์ด๋“œ๋ฐ” ํ…Œ์ŠคํŠธ
    • ํŽ˜์ด์ง€ ๊ด€๋ฆฌ (์ถ”๊ฐ€, ์‚ญ์ œ, ์—ด๊ธฐ, ๋‹ซ๊ธฐ)
    • ํŽ˜์ด์ง€ ๋ฆฌ์‚ฌ์ด์ง• (์ตœ์†Œํ™”, ์ตœ๋Œ€ํ™”)
    • ํŽ˜์ด์ง€ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ