diff --git a/journey/plans/260323_23_24서버_NAS_공유편집_협업공간_구축_계획.md b/journey/plans/260323_23_24서버_NAS_공유편집_협업공간_구축_계획.md index 497c5c1..3709654 100644 --- a/journey/plans/260323_23_24서버_NAS_공유편집_협업공간_구축_계획.md +++ b/journey/plans/260323_23_24서버_NAS_공유편집_협업공간_구축_계획.md @@ -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건 전수 통과 +- [ ] 에이전트 메모리 등록