research: 에이전트 간 실시간 공유 편집 동시성 제어 리서치 — CRDT/Yjs/Redis/E2B 비교

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
happybell80 2026-03-22 15:51:21 +09:00
parent 31b25a9241
commit e5e989d599

View File

@ -0,0 +1,79 @@
---
type: research
tags: [research, infrastructure, collaboration, crdt, yjs, redis, nas, shared-editing]
status: open
research_target: 23·24서버 에이전트가 NAS 파일을 동시 편집할 때 덮어쓰기 없이 실시간 협업하는 기술 옵션 조사
---
# 260323 에이전트 간 실시간 공유 편집·동시성 제어 리서치
## 목적
- NAS(CIFS) 환경의 last-write-wins 문제를 넘어, 에이전트 간 실시간 동시 편집이 가능한 기술을 조사한다.
- 파일을 '저장'하는 방식에서 '상태를 동기화'하는 방식으로 전환하는 경로를 확인한다.
## 배경
현재 23·24서버는 NAS(`/mnt/nas`, CIFS)를 공유 마운트하고 있다. 파일 단위 읽기/쓰기는 되지만, 두 서버가 동시에 같은 파일을 쓰면 마지막 저장이 덮어쓴다. 잠금(lock)은 CIFS가 지원하나 에이전트 레벨에서 관리되지 않는다.
아이디어 문서에서 파일명 분리·섹션 분리로 충돌을 회피하는 규칙을 정했으나, 이는 동시성 제어가 아니라 충돌 회피다.
## 사실 (Facts)
### 1. CRDT (Conflict-free Replicated Data Types)
중앙 서버 승인 없이 여러 에이전트가 동시에 데이터를 수정하고, 나중에 합쳐도(Merge) 항상 동일한 결과가 보장되는 데이터 구조.
- **동작**: 파일 전체를 쓰는 대신 변경 사항(Delta)만 주고받음
- **장점**: 잠금 불필요, 네트워크 지연·순서 뒤바뀜에도 결과 안전
- **한계**: 별도 동기화 서버(WebSocket 등) 필요
| 라이브러리 | 특성 | 언어 | 비고 |
|-----------|------|------|------|
| **Yjs** | 텍스트·JSON·리스트 지원, 가장 널리 사용 | JavaScript/TypeScript | WebSocket 기반 동기화 |
| **Automerge** | JSON 구조 동시 편집 최적화 | JavaScript/Rust | 복잡한 설정값·데이터에 유리 |
| **Loro** | 차세대 CRDT, Rust 기반 고성능 | Rust (바인딩: JS/Python) | 2025~2026 주목, AI 에이전트 동기화 타겟 |
### 2. Redis Pub/Sub (메모리 기반 협업)
파일이 아닌 데이터 단위로 협업. 에이전트끼리 실시간으로 편집 이벤트를 주고받는 메모리 기반 공간.
- **동작**: 에이전트가 변경 이벤트를 Redis에 publish → 상대가 subscribe로 수신
- **장점**: 구현 빠름, 23서버에 Redis 설치 가능
- **한계**: 파일 편집이 아니라 메시지 기반이라 MD 직접 편집과 거리 있음
### 3. E2B / Agent Sandbox
에이전트 전용 격리 클라우드 환경. 여러 에이전트가 하나의 샌드박스에 접속하여 파일 수정·결과 공유.
- **장점**: 인프라 관리 최소
- **한계**: 외부 SaaS 의존, 자체 서버 운영 철학과 충돌 가능
### 4. 현재 인프라 대비 실현성
| 기술 | 23·24서버 적용 가능성 | 추가 필요 인프라 | 비고 |
|------|---------------------|-----------------|------|
| Yjs | 중간 — WebSocket 서버 필요 | Node.js 서비스 1개 | 가장 완성도 높음 |
| Redis Pub/Sub | 높음 — 23서버에 Redis 설치 가능 | Redis 인스턴스 | 이벤트 기반, 파일 편집과 갭 있음 |
| Loro | 낮음 — Rust 빌드 + 바인딩 필요 | Rust 환경 | 미래 대비용 |
| E2B | 낮음 — SaaS 의존 | 외부 서비스 | 자체 인프라 철학과 충돌 |
| NAS + 규칙 (현재) | 이미 동작 | 없음 | 충돌 회피지 동시성 제어 아님 |
### 5. 추천 구현 전략 (단계별)
| 단계 | 방식 | 설명 |
|------|------|------|
| 0단계 (현재) | NAS + 파일명/섹션 분리 | 충돌 회피. 즉시 사용 가능 |
| 1단계 | Redis 이벤트 알림 | 편집 시작/완료를 Redis로 알림. 파일은 여전히 NAS |
| 2단계 | Yjs + WebSocket | MD 문서의 실시간 공동 편집. Google Docs 수준 |
| 3단계 | CRDT + NAS 스냅샷 | 편집 중 상태는 CRDT 메모리, 완료 시 NAS에 스냅샷 저장 |
## Unresolved
- 에이전트(Claude Code, Codex, Cursor)가 Yjs WebSocket 클라이언트로 직접 연결 가능한지
- MD 파일 편집에 CRDT가 과도한 오버엔지니어링인지 (파일 규모가 작으면 Redis 알림 + 잠금으로 충분할 수 있음)
- 23서버 Node.js 환경 존재 여부 (Yjs 서버 실행용)
## 관련 문서
- [260323 23·24서버 NAS 공유 편집 협업 공간 아이디어](../ideas/260323_23_24서버_NAS_공유편집_협업공간_아이디어.md)