Releases: boostcampwm-2024/refactor-web33-Nocta
Releases ยท boostcampwm-2024/refactor-web33-Nocta
1.1.3 (2024.02.21)
Fix
AI ํ์ด์ง๊ฐ ์์ฑ๋๋ ์ค์ ํ์ด์ง๊ฐ ์ญ์ ๋๋ฉด ์๋ฒ๊ฐ ๋ค์ด๋๋ ๋ฌธ์ ์์
- AI ๋ฌธ์ ์์ฑ ๊ธฐ๋ฅ์ AI ํ์ด์ง๋ฅผ ์์ฑํ ํ ๊ทธ ํ์ด์ง์ ๋ํ ์ฐ์ฐ๋ค์ ๋ณด๋ธ ํ ๋ง์ง๋ง์ผ๋ก ํ์ด์ง์ ์ ๋ชฉ์ ๋ํ ๋ณ๊ฒฝ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
- ์ด ๋ ํ์ด์ง๊ฐ ์ค๊ฐ์ ์ญ์ ๋๋ฉด ๋ค๋ฅธ ์ฐ์ฐ๋ค์ ์ ์์ ์ผ๋ก ๋ฌด์๋์ง๋ง ํ์ด์ง ๋ณ๊ฒฝ ์์ ์ด ๊ทธ๋๋ก ์ํ๋ผ ์ด ๋ถ๋ถ์์ ํ์ด์ง๋ฅผ ์ฐพ์ง ๋ชปํด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ๋ง์ง๋ง ํ์ด์ง ์ ๋ฐ์ดํธ ๋ถ๋ถ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํด ์ค๊ฐ์ ํ์ด์ง๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ์ ์๋๋ก ์์ ํ์ต๋๋ค.
1.1.2 (2024.02.21)
โ ย New Features
LLM ๋ชจ๋ธ ๋ณ๊ฒฝ
- ๋ต๋ณ์ ์ ํ์ฑ์ ๋์ด๊ธฐ ์ํด LLM์ CLOVA Studio์์ OpenAI๋ก ๋ณ๊ฒฝ
- OpenAI ์๋ต ๊ฒฐ๊ณผ์ ๋ง์ถฐ ํ์ฑ ๋ก์ง ์์
- ํ ํฐ ์ฒ๋ฆฌ ์์ ๋ณด์ฅโ OpenAI์ ์ฑ๋ฅ ํฅ์์ผ๋ก ์ธํด ํ ํฐ ํ์ฑ ๋ฐ ๋ ธ์ถ ์์๊ฐ ๋ถ์์ ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด,ํ์ ๋ด์ ์ฐจ๋ก๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์์๋ฅผ ๋ณด์ฅ
QA๋ฅผ ํตํ UX ๊ฐ์
- indent 2, 3๊ฐ์ผ ๋ ๋งํฌ๋ค์ด ํ์ฑ ๋์ํ๋๋ก ์์
- ์์ง์ ํ์ฑ ์ถ๊ฐ
- ํ์ด์ง ์์ฑ ๋ฐ ๋ฌธ์ insert CRDT ์ฐ์ฐ ์ฒ๋ฆฌ ๋ฐฉ์ ๊ฐ์
- ํ์ด์ง๋ฅผ ๋ง๋ ์ฌ์ฉ์์๊ฒ๋ ์ค์๊ฐ์ผ๋ก CRDT ์ฐ์ฐ ์ ์ก
- ์ํฌ์คํ์ด์ค์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ๋ ๋ฌธ์ ์์ฑ ์๋ฃ ํ CRDT ์ฐ์ฐ ์ ์ก
- ํ์ด์ง ๋ฆฌ์ฌ์ด์ง ์ ์ค์ผ๋ ํค UI ์ ๊ฑฐ
- ์ ๋ชฉ ์ ๋ ฅ์ ํธ์ง๊ธฐ ์ธ๋ถ์์ ์ ๋ ฅํ๋๋ก ์์
1.1.1
AI ๋ฌธ์ ์์ฑ ์ฑ๋ฅ ๊ฐ์
โ ย New Features
AI ๋ฌธ์ ์์ฑ ์ฑ๋ฅ ๊ฐ์
- AI ๋ฌธ์ ์์ฑ ์์ฑ๋ ๊ฐ์ (#32)
- ai ์๋ต ํ์ฑ ํ ํฐ ๋จ์๋ก ๋ฐ๋๋ก ์์ (๊ธฐ์กด์๋ ๋ค ๋ง๋ค์ด์ง ๋ง์ง๋ง ๋ฌธ์์ด๋ง ๋ฐ์ ์ฒ๋ฆฌ)
- ai ํ ํฐ ๋ค์ด์ฌ๋๋ง๋ค char, block ๋จ์๋ก ์ฌ์ฉ์์๊ฒ socket ์ฐ์ฐ ์ ์ก
- block ํ์
๊ฒฐ์ ๋ก์ง ์์
- ๊ธฐ์กด์๋ ์์ฑ๋ ๋ฌธ์์ด("# ์ ๋ชฉ")์ ๋ณด๊ณ block ํ์ ์ ๋จผ์ ๊ฒฐ์ ํ๊ณ char ์ฐ์ฐ์ ๋ณด๋ด์คฌ์
- ๋ฐ๋ ๋ก์ง์ ๋ฌธ์๊ฐ ๋ค์ด์ค๋ ์์ (์ฌ์ฉ์์๊ฒ ๋ฐ๋ก ๋ณด์ฌ์ค)์ ๋ฐ๋ก ์ ํ๋๋๋ก ์์
- ํ ์คํธ ์คํ์ผ(๊ตต๊ธฐ, ๋ฐ์ค, ์ทจ์์ , ๊ธฐ์ธ๊ธฐ) ๊ธฐ๋ฅ ์ถ๊ฐ
- ์์ ์ด ๋ง๋ ai ํ์ด์ง๋ง ๋ฐ๋ก ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ ์ถ๊ฐ
- ai ์๋ต ํ์ฑ ํ ํฐ ๋จ์๋ก ๋ฐ๋๋ก ์์ (๊ธฐ์กด์๋ ๋ค ๋ง๋ค์ด์ง ๋ง์ง๋ง ๋ฌธ์์ด๋ง ๋ฐ์ ์ฒ๋ฆฌ)
- UX ์ต์ ํ (#31)
- ์จ๋ณด๋ฉ ์ค๋ฒ๋ ์ด ์ํฐ ์ ๋ ฅ์ผ๋ก ์ด๋ํ ์ ์๋๋ก ์์
- AI ๋ชจ๋ฌ ๋กํฐ ์ ๋๋ฉ์ด์ ์์น ์์
AI ๋ฌธ์ ์ฑ๋ฅ ๊ฐ์ ๊ฒฐ๊ณผ
- ๋ฌธ์ ์์ฑ์ด ์๋ฃ๋๋ ์๊ฐ์ 25.954์ด์์ 23.915์ด๋ก ์ฝ 7.86% ํฅ์
- ์ฌ์ฉ์๊ฐ ์์ฑ๋ ๋ฌธ์๋ฅผ ํ์ธํ๋ ์๊ฐ์ด 25.839์ด์์ 2.378์ด๋ก ๊ฐ์ํจ์ผ๋ก์จ UX ํฅ์
๐จ Fix
๋ฆฌ์คํธ ๊ฐ์ํ ๋ฒ๊ทธ
- ๋ฆฌ์คํธ ๊ฐ์ํ์์ ๋๋๊ทธํ ๋ ์
๋ฐ์ดํธ ๋์ง์๋ ๋ฒ๊ทธ ์์ (#29)
- virtualIndex๋ฅผ ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ์์ผ๋ก์จ ํด๊ฒฐ
1.1.0
AI ๋ฌธ์ ์์ฑ ๊ธฐ๋ฅ ์ถ๊ฐ
โ ย New Features

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)
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)
์ด์ค์ผ์ดํ ๋ฌธ์ ์ฒ๋ฆฌ ์์
Fix
- ์ด์ค์ผ์ดํ ๋ฌธ์ ์ฒ๋ฆฌ ๋ก์ง ์์
- ๊ธฐ์กด innerhtml ๋ฐฉ์์์ documentFragment๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด์ sanitizeText ๋ก์ง ์์
1.0.8 (2024.02.05)
bcrypt ๋ชจ๋์ bcryptjs ๋ชจ๋๋ก ๋ณ๊ฒฝ
Fix
- bcrypt ๋ชจ๋์ bcryptjs ๋ชจ๋๋ก ๋ณ๊ฒฝ
- node 20 ๋์ปค ์ด๋ฏธ์ง์์ bcrypt ๋ชจ๋์ ์ธ์ํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฐ์(์ด์ ๊น์ง๋ ์ ์์ ์ผ๋ก ์ฌ์ฉ๋์์)
- bcrypt ๋ชจ๋์ด python์ผ๋ก ๋ํ๋ c++ ๊ธฐ๋ฐ ๋ชจ๋์ด๋ผ ์ข ์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์
- g++, python ๋ฑ์ ์ค์นํด ์ข ์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค ํ์ผ๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ
- ๋ถ๋์ดํ๊ฒ bcrypt ๋ชจ๋์ JS๋ก ์ ์๋ผ ์ข ์์ฑ ๋ฌธ์ ๊ฐ ์๋ bcryptjs ๋ชจ๋๋ก ๊ต์ฒดํจ
- ์ผ๋ฐ์ ์ผ๋ก bcrypt ๋ชจ๋์ด bcryptjs ๋ชจ๋๋ณด๋ค ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ์ ์ฑ๋ฅ ํ๋ฝ์ด ์์ ๊ฒ์ผ๋ก ์์๋จ
1.0.7 (2024.02.04)
DOM ์กฐ์ ๋ฐฉ์ ๋ณ๊ฒฝ, ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ, ๋ฆฌ์คํธ ๊ฐ์ํ ๋์ , DB ์บ์ ๊ตฌ์กฐ ๋ณ๊ฒฝ
Refactor
DOM ์กฐ์ ๋ฐฉ์ ๋ณ๊ฒฝ
- ๋ฌธ์
- innerHTML์ ์ฌ์ฉํ๋ฉด์ ์๋ ์ด์๊ฐ ๋ฐ์ํจ
- XSS ์ทจ์ฝ์ : ์ฌ์ฉ์ ์ ๋ ฅ์ด HTML๋ก ์ง์ ํ์ฑ๋์ด ์คํฌ๋ฆฝํธ ์คํ ์ํ์ด ์กด์ฌํจ
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง: ํ ์คํธ ๋ณ๊ฒฝ์ ํ ์คํธ ์ ์ฒด DOM์ ์ฌํ์ฑํ๊ณ ์์
- innerHTML์ ์ฌ์ฉํ๋ฉด์ ์๋ ์ด์๊ฐ ๋ฐ์ํจ
- ํด๊ฒฐ
- ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ innerHTML์์ documentFragment๋ก ๋ณ๊ฒฝ
- HTML ํ์ฑ โ DOM ํธ๋ฆฌ ๊ตฌ์ฑ
- innerHtml์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ ์ฒด DOM์ ๋ค์ ํ์ฑํด ๊ธฐ์กด DOM์ ์์ ํ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์ ํ ์คํธ์ ์์ด ๋ง์์ง ๊ฒฝ์ฐ ์ฑ๋ฅ์ ๋ฌธ์ ๋ฐ์
- documentFragment๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ DOM์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์์ ํ๊ณ , ๊ธฐ์กด DOM๊ณผ ๋น๊ต ํ ํ์ํ ๋ถ๋ถ๋ง ๊ฐฑ์ ํจ
- ์ด๋ฅผ ํตํด ์ ์ฒด DOM์ด ๋ค์ ํ์ฑ๋์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ์ฐ์ฐ์ ์ ๊ฑฐํด DOM ์ ๋ฐ์ดํธ ํ์ ๊ฐ์
- Layout ๊ณ์ฐ โ ๋ฆฌํ๋ก์ฐ ๋ฐ์
- DOM ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์๋ก ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ๋ฆฌํ๋ก์ฐ ๋ฐ์
- documentFragment๋ฅผ ์ฌ์ฉํด ๊ธฐ์กด DOM๊ณผ ์๋ก์ด DOM์ ๋น๊ตํด ์ฐจ์ด๊ฐ ์์๋๋ง ์ ๋ฐ์ดํธ ํ๋๋ก ์์
- Paint โ ๋ฆฌํ์ธํธ ๋ฐ์
- ํ ์คํธ์ ์คํ์ผ์ด ์ ์ฉ๋์ด ์์ ๋, ํ ์คํธ๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ๋ฆฌํ์ธํธ ๋ฐ์
- documentFragment๋ฅผ ์ฌ์ฉํด ํ ๋ฒ์ ํ์ธํธ ์์ ๋ง ์ํํ๊ฒ ๋์ด ๋ถํ์ํ ์ค๊ฐ ๋ ๋๋ง ํ์๋ฅผ ์ค์
- HTML ํ์ฑ โ DOM ํธ๋ฆฌ ๊ตฌ์ฑ
- ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ innerHTML์์ 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% ํฅ์)
- Render:
- ์ถ๊ฐ ๋
ผ์์
- ์ค์ผ๋ ํค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 ๋ฑ ์ธ๋ถ ์บ์๋ฅผ ๋์ ํ๋๋ผ๋ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์๋ ์ฐ์ฐ๋ง ์ ์ฅํ๋ฏ๋ก, ์บ์ ์ฉ๋์ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์์
- CRDT ์ฐ์ฐ์ ์ด๋ฒคํธ๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ๋ก ์ ํํ๋ฉด์ ์๋ ์ด์ ํ๋ณด
1.0.6 (2024.01.16)
๊ฒ์คํธ ์ํฌ์คํ์ด์ค์์ CRDT ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์๊ฐ์ง ์๋ ๋ฌธ์ ์์
Fix
- ๊ฒ์คํธ ์ํฌ์คํ์ด์ค์์ CRDT ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์๊ฐ์ง ์๋ ๋ฌธ์ ์์
- ํ์ฌ CRDT ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ํฌ์คํ์ด์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ์์ ์บ์ ์ญ์ ๋์์ด DB์ ์ ์ฅ๋๊ธฐ ์ ์ ์คํ๋จ
- ์ํฌ์คํ์ด์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ DB์ ์ ์ฅ๋์ง ์๋ ๊ฒ์คํธ ์ํฌ์คํ์ด์ค๋ฅผ ์ ์ธํ๊ธฐ ๋๋ฌธ์ ๊ฒ์คํธ ์ํฌ์คํ์ด์ค์์๋ CRDT ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์ํ์ง ์์์
- ์ํฌ์คํ์ด์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ฒ์คํธ ์ํฌ์คํ์ด์ค๋ฅผ ๊ฑด๋๋ฐ๊ธฐ ์ ์ ๊ฒ์คํธ ์ํฌ์คํ์ด์ค์ ๋ํด CRDT ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๋์์ํค๋๋ก ๋ก์ง์ ์์ ํจ
1.0.5 (2024.01.16)
TombStone ์ ์ฉ, ํ ์คํธ ์ฝ๋ ์ถ๊ฐ
TombStone
- ๋ณ๊ฒฝ์ฌํญ
- CRDT์ ์ญ์ ์ฐ์ฐ์ ๊ธฐ์กด์ hard delete ๋ฐฉ์์์ soft delete ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
- soft delete ๊ตฌํ์ ์ํด Node(Block, Char)์ deleted ํ๋๊ทธ ์ถ๊ฐ
- LinkedList์ DeleteNode, RemoveNode, InsertById, findByIndex ๋ฉ์๋ ์์
- ์บ์๋ ์ํฌ์คํ์ด์ค ์ ๋ณด๊ฐ DB์ ์ ์ฅ๋ ๋ ์ญ์ ์ฒ๋ฆฌ๋ ๋ ธ๋๋ค์ ์์ ํ ์ ๊ฑฐํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ๋์
- ์ถ๊ฐ์ฌํญ
- Jest LinkedList๋ณ ๋ฉ์๋ ํ ์คํธ์ฝ๋ ์์ฑ
- ์ ์ฌ ๋ฌธ์
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ฃผ๊ธฐ ๋ฌธ์
- ํ์ฌ soft delete๋ ๋ ธ๋๋ค์ ์ ๋ฆฌํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ํฌ์คํ์ด์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ํจ๊ป ๋์ํฉ๋๋ค.
- ์ํฌ์คํ์ด์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ฒ์คํธ ์ํฌ์คํ์ด์ค๋ฅผ ์ ์ธํ๊ณ ๋์ํ๊ธฐ ๋๋ฌธ์ ๊ฒ์คํธ ์ํฌ์คํ์ด์ค์์ CRDT ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ฃผ๊ธฐ ๋ฌธ์
ํ ์คํธ ์ฝ๋
- ์ธ์ฆ ํ
์คํธ
- ํ์๊ฐ์
- ํ์๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฆ
- ๋ก๊ทธ์ธ
- ๋ก๊ทธ์ธ ์ ํจ์ฑ ๊ฒ์ฆ
- ๋ก๊ทธ์์
- ๋งํฌ๋ค์ด ์๋ํฐ ํ
์คํธ
- ๋งํฌ๋ค์ด ๋ธ๋ก ์ถ๊ฐ
- ํ์ด์ง ์ ๋ชฉ ๋ณ๊ฒฝ
- ๋งํฌ๋ค์ด ๋ฌธ๋ฒ ๋ณํ (ํค๋, ๋ฆฌ์คํธ, ์ฒดํฌ๋ฐ์ค, ์ธ์ฉ๊ตฌ)
- ํ์ด์ง/์ฌ์ด๋๋ฐ ํ
์คํธ
- ํ์ด์ง ๊ด๋ฆฌ (์ถ๊ฐ, ์ญ์ , ์ด๊ธฐ, ๋ซ๊ธฐ)
- ํ์ด์ง ๋ฆฌ์ฌ์ด์ง (์ต์ํ, ์ต๋ํ)
- ํ์ด์ง ์์ด์ฝ ๋ณ๊ฒฝ