Socket.io ๊ธฐ๋ฐ ๋๊ธฐํ์์ Yjs CRDT ์ํคํ ์ฒ๋ก ์ ํํ ์ค์๊ฐ ํ์ IDE ์ค๊ณ
CodeSynth 2.0๐ฉ๐ฝโ๐ป: Rebuilding My Hackathon Prototype into a CRDT-Powered Coding Playground๐
AI ์์ฝ
Context
Socket.io๋ฅผ ํตํ ๋จ์ ๋ธ๋ก๋์บ์คํ ๊ธฐ๋ฐ์ ๋๊ธฐํ ๋ชจ๋ธ๋ก ์ธํด ๋์ ํธ์ง ์ ๋ฐ์ดํฐ ๋ฎ์ด์ฐ๊ธฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ตฌ์กฐ. 1๊ฐ ํ์ผ๋ก ์ ํ๋ ์ ์ ํ์ผ ์์คํ ๊ตฌ์กฐ๋ก ์ธํด ์ค์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๊ฐ์ ํ์ฅ์ฑ ํ๋ณด์ ํ๊ณ๊ฐ ์์๋ ์ํฉ.
Technical Solution
- ์ถฉ๋ ํด๊ฒฐ ๋ ์ด์ด ๋ถ์ฌ ํด๊ฒฐ์ ์ํด Yjs CRDT ํ๋ ์์ํฌ๋ฅผ ๋์ ํ์ฌ ๋ถ์ฐ ์ํ ๊ด๋ฆฌ ์ฒด๊ณ ๊ตฌ์ถ
- ๋จ์ ๋ฌธ์์ด ์ ์ก ๋ฐฉ์์์ y-websocket ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ํ์ ๋๊ธฐํ ๋ฐฉ์์ผ๋ก ์ ํํ์ฌ ๋์ ํธ์ง ์ ๋ขฐ์ฑ ํ๋ณด
- ๋จ์ผ ํ์ผ ๊ตฌ์กฐ๋ฅผ ํํผํ์ฌ ๋ค์ค ํ์ผ ์์ฑ ๋ฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ Virtual File System ์ค๊ณ
- HTML5 Canvas์ Yjs Array๋ฅผ ๊ฒฐํฉํ์ฌ ์ค์๊ฐ ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํ Collaborative Whiteboard ๊ตฌํ
- Monaco Editor์ Yjs Awareness Protocol์ ์ฐ๋ํ์ฌ ์ฌ์ฉ์๋ณ ๊ณ ์ ์์ ๋ฐ ์ปค์ ์์น๋ฅผ ์ค์๊ฐ ์ถ์ ํ๋ Presence ๊ธฐ๋ฅ ๊ตฌํ
- ๋ค์ค ํ์ผ์ ์ง๊ณํ์ฌ ๊ฒฉ๋ฆฌ๋ iframe sandbox์์ ์ฆ์ ๋ ๋๋งํ๋ Dynamic Live Preview ์์คํ ๊ตฌ์ถ
์ค์ฒ ํฌ์ธํธ
- ์ค์๊ฐ ํ์ ํด ์ค๊ณ ์ ๋จ์ WebSocket ์ ์ก๋ณด๋ค CRDT(Conflict-free Replicated Data Types) ๋์ ๊ฒํ - ๋ถ์ฐ ํ๊ฒฝ ๋ด ์ํ ๋๊ธฐํ ์ Race Condition ๋ฐ State Desynchronization ๋ฐฉ์ง๋ฅผ ์ํ ์ ๊ตํ Observer ํจํด ์ ์ฉ - ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์ UX ํฅ์์ ์ํด Awareness Protocol์ ํตํ ์ฌ์ฉ์ ์กด์ฌ ์ํ(Presence) ์๊ฐํ ๊ตฌํ