fix: 공유 편집 계획 재작성 — 한 세션에 닫을 수 있는 5단계 실행 계획

- Yjs/CRDT 제외 (오버엔지니어링), 폴더+규칙+잠금 스크립트로 완결
- 검증 5건 + 닫는 조건 체크리스트

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
happybell80 2026-03-22 15:55:45 +09:00
parent 4bcafd0fcd
commit 72eb44a15b

View File

@ -3,67 +3,106 @@ type: plans
tags: [plans, infrastructure, nas, collaboration, shared-editing, redis]
status: open
depends_on:
closing_criteria: 23·24서버 에이전트가 NAS 공유 폴더에서 충돌 없이 문서를 동시 작성·읽기 가능한 상태
closing_criteria: 23·24서버 에이전트가 공유 폴더에서 충돌 없이 동시 문서 작업 가능 + 편집 잠금 동작 + 양방향 읽기/쓰기 검증 통과
---
# 260323 23·24서버 NAS 공유 편집 협업 공간 구축 계획
## 목적
- 23·24서버 에이전트가 git pull/push 없이 문서를 공유·편집할 수 있는 협업 공간을 만든다.
- 단계적으로 확장: 폴더 공유 → 편집 알림 → 실시간 동기화.
23·24서버 에이전트가 git pull/push 없이 문서를 공유·편집할 수 있는 협업 공간을 구축하고, 동시 편집 충돌을 방지하는 잠금 메커니즘까지 한번에 완성한다.
## 참조 문서
- [아이디어](../ideas/260323_23_24서버_NAS_공유편집_협업공간_아이디어.md)
- [리서치](../research/260323_에이전트간_실시간_공유편집_동시성제어_리서치.md)
## 단계
## 범위
### 0단계: NAS 공유 폴더 생성 (즉시)
| 포함 | 제외 |
|------|------|
| NAS 공유 폴더 구조 생성 | Yjs/CRDT 실시간 공동 편집 (후속 트랙) |
| 사용 규칙 문서 (README.md) | 코드 공유 (코드는 git 유지) |
| 파일 잠금 스크립트 (lock/unlock) | 웹 UI |
| 양방향 읽기/쓰기 검증 | |
- `/mnt/nas/workspace/shared-editing/` 폴더 구조 생성
- `drafts/` — 자유 작성·토의·임시 메모
- `reviews/` — 상호 리뷰·코멘트
- `archive/` — git 이관 완료 문서 보관
- 충돌 방지 규칙 적용: 파일명 `[23]_`, `[24]_` 접두, 섹션 분리
- 23·24 양쪽 접근 확인
Yjs/CRDT는 현재 MD 문서 협업 규모에서 오버엔지니어링. 파일 잠금 + 규칙으로 충분하며, 필요 시 후속 계획으로 분리.
### 1단계: Redis 편집 알림 (1일)
## 작업 목록
- 23서버에 Redis 설치 (또는 기존 Redis 활용)
- 편집 시작/완료 이벤트를 Redis Pub/Sub으로 알림
- 에이전트가 파일 편집 전 "누가 편집 중인지" 확인 가능
- 파일 자체는 여전히 NAS
### 1. 폴더 구조 생성 (23 또는 24)
### 2단계: Yjs 실시간 공동 편집 (후속)
```bash
mkdir -p /mnt/nas/workspace/shared-editing/{drafts,reviews,archive}
```
- Node.js 기반 Yjs WebSocket 서버 구축
- MD 문서 실시간 동시 편집 (CRDT 기반)
- 편집 완료 시 NAS에 스냅샷 저장
- 별도 서비스 개발 필요, 현재 범위 밖
### 2. 사용 규칙 README.md 작성
`/mnt/nas/workspace/shared-editing/README.md`에 작성:
- **drafts/**: 자유 작성·토의·임시 메모. 누구나 쓰고 지울 수 있음.
- **reviews/**: 상호 리뷰 요청. 완료되면 drafts로 이동 또는 삭제.
- **archive/**: git에 커밋 완료된 문서 보관. 읽기 전용.
- **파일명 규칙**: `[23]_주제.md`, `[24]_주제.md` — 작성 서버 명시
- **합의 문서**: 양쪽 의견이 합쳐지면 접두 없이 `주제.md`로 병합
- **git 이관**: 확정 문서는 git 레포에 커밋 후 archive로 이동
### 3. 파일 잠금 스크립트
`/mnt/nas/workspace/shared-editing/scripts/lock.sh`:
```bash
#!/bin/bash
# 사용법: ./lock.sh <파일경로> <서버번호>
# 잠금: ./lock.sh drafts/topic.md 24
# 해제: ./lock.sh drafts/topic.md 24 unlock
FILE="$1"; SERVER="$2"; ACTION="${3:-lock}"
LOCKFILE="${FILE}.lock"
if [ "$ACTION" = "unlock" ]; then
rm -f "$LOCKFILE"
echo "UNLOCKED: $FILE"
elif [ -f "$LOCKFILE" ]; then
echo "LOCKED by $(cat $LOCKFILE). 편집 불가."
exit 1
else
echo "$SERVER $(date +%Y-%m-%dT%H:%M:%S)" > "$LOCKFILE"
echo "LOCKED: $FILE by $SERVER"
fi
```
- `.lock` 파일이 있으면 다른 서버가 편집 중 → 대기
- 편집 완료 후 `unlock`으로 해제
- 에이전트에게 "편집 전 lock.sh 실행, 완료 후 unlock" 규칙 안내
### 4. 양방향 검증
| 테스트 | 방법 | 기대 |
|--------|------|------|
| 24→23 쓰기/읽기 | 24에서 파일 생성 → 23에서 읽기 | 즉시 보임 |
| 23→24 쓰기/읽기 | 23에서 파일 생성 → 24에서 읽기 | 즉시 보임 |
| 동시 쓰기 다른 파일 | 양쪽에서 다른 파일 동시 생성 | 충돌 없음 |
| 잠금 테스트 | 24에서 lock → 23에서 lock 시도 | "LOCKED by 24" 거부 |
| 잠금 해제 | 24에서 unlock → 23에서 lock 시도 | 성공 |
### 5. 에이전트 안내 (CLAUDE.md / 메모리)
23·24서버 에이전트 메모리에 공유 편집 공간 사용법 등록:
- 경로: `/mnt/nas/workspace/shared-editing/`
- 문서 토의·초안은 여기서, 확정은 git으로
- 편집 전 lock.sh, 완료 후 unlock
## 실행 순서
```
0단계 (폴더 생성 + 규칙) → 검증 → 1단계 (Redis 알림) → 검증 → 2단계 (Yjs, 후속)
1 (폴더) → 2 (README) → 3 (lock.sh) → 4 (검증 5건) → 5 (에이전트 안내) → 닫기
```
## 0단계 작업 상세
| 작업 | 서버 | 내용 |
|------|------|------|
| 폴더 생성 | 23 또는 24 | `/mnt/nas/workspace/shared-editing/{drafts,reviews,archive}` |
| 접근 확인 | 23 + 24 | 양쪽에서 파일 쓰기/읽기 확인 |
| 규칙 문서 | DOCS | `shared-editing/README.md`에 사용 규칙 작성 |
## 검증 기준
- 0단계: 23서버에서 쓴 파일을 24서버에서 즉시 읽을 수 있다
- 0단계: 파일명 분리 규칙으로 동시 작성 시 덮어쓰기 없음
- 1단계: Redis로 "편집 중" 상태를 상대 서버가 확인 가능
전부 순차, 의존성 없음. 한 세션에서 완료 가능.
## 닫는 조건
- 0단계 + 1단계 완료 시 닫음
- 2단계는 별도 계획으로 분리
- [ ] 폴더 구조 생성 확인 (23·24 양쪽)
- [ ] README.md 작성 완료
- [ ] lock.sh 동작 확인
- [ ] 검증 5건 전수 통과
- [ ] 에이전트 메모리 등록