DOCS/journey/research/260323_에이전트간_실시간_공유편집_동시성제어_리서치.md
2026-03-22 15:51:21 +09:00

4.3 KiB

type, tags, status, research_target
type tags status research_target
research
research
infrastructure
collaboration
crdt
yjs
redis
nas
shared-editing
open 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 서버 실행용)

관련 문서