# 다중 사용자 아키텍처 및 충돌 해결 전략 (Multi-User Architecture & Conflict Strategy)

## 1. 데일리 노트 (Daily Notes)

### 문제점 (Problem)
현재 데일리 노트는 `YYYY-MM-DD`를 문서 ID로 사용합니다.
- **충돌 이슈**: 사용자 A가 `2026-02-12` 노트를 생성하면, 사용자 B는 같은 날짜의 노트를 생성할 수 없습니다. (ID 중복)

### 해결책: 네임스페이스 ID (Namespaced IDs)
데일리 노트 ID에 사용자의 UID를 포함하여 유일성을 보장합니다.
- **ID 포맷**: `daily-${YYYY-MM-DD}-${uid}`
  - 예시: `daily-2026-02-12-a1b2c3d4...`
- **구현**:
  - `DailyNoteButton`: 위 포맷으로 ID를 생성하여 라우팅.
  - `docs/[id]/page.tsx`: ID 패턴을 감지하여 `docType`을 자동으로 `daily`로 설정.

---

## 2. 개인 문서 공간 (My Private Space)

### 현황
- `/new`를 통해 생성되는 문서는 Firestore의 **Random Auto-ID**를 사용합니다.
- **상태**: ✅ 안전함. 사용자 A와 B가 각각 "React"라는 제목의 개인 문서를 만들어도 ID(`doc-A`, `doc-B`)가 다르므로 충돌하지 않습니다.

---

## 3. 위키 링크 해결 전략 (Wiki Link Resolution)

### 시나리오: "동일 이름 문서" (Duplicate Names)
- **공식 위키 (Public)**: "Apple"이라는 문서가 존재함.
- **내 개인 공간 (Private)**: 나(User A)도 "Apple"이라는 개인 문서를 만듦.

### 규칙 1: 생성 허용 (Creation Allowed) ✅
- 공용 문서와 이름이 같은 개인 문서를 만드는 것은 **완벽하게 허용**됩니다.
- "공부용 요약", "개인적인 생각" 등을 자유롭게 적을 수 있어야 하기 때문입니다.

### 규칙 2: 링크 우선순위 - 개인 우선 (Private First Priority)
사용자 A가 `[[Apple]]` 링크를 클릭했을 때:
1.  **시스템 확인**: "사용자 A에게 'Apple'이라는 개인 문서가 있는가?" -> **Yes**.
2.  **결과**: **사용자 A의 개인 문서**로 연결됩니다.
    - *사용자의 개인적 문맥(Context)을 최우선으로 존중합니다.*

사용자 B(개인 문서 없음)가 `[[Apple]]` 링크를 클릭했을 때:
1.  **시스템 확인**: "사용자 B에게 'Apple'이라는 개인 문서가 있는가?" -> **No**.
2.  **시스템 확인**: "공식 위키에 'Apple'이라는 문서가 있는가?" -> **Yes**.
3.  **결과**: **공식 위키 문서**로 연결됩니다.

### 규칙 3: 섀도우 인디케이터 (Shadow Indicator)
개인 문서가 공식 문서를 가리고 있을 때(Shadowing), 이를 사용자에게 알려줍니다.
- **UI 동작**: 개인 문서 상단에 배너 표시.
- **문구**: *"⚠️ 동일한 이름의 공식 위키 문서가 존재합니다. [Wiki 문서 보기]"*
- **목적**: 사용자가 공식 문서의 존재를 인지하고, 필요시 접근할 수 있도록 투명성 제공.

---

## 4. 공개 전환 전략 (Promotion Strategy)

### 시나리오
사용자 A가 자신의 개인 문서 "React"를 **공개(Wiki)**로 전환하려고 합니다.
하지만 이미 "React"라는 공식 문서가 존재합니다.

### 규칙: 차단 및 이름 변경 (Block & Rename)
하나의 위키 공간에 이름이 같은 두 개의 문서가 존재할 수 없습니다. (위키링크 모호성 방지)

**로직 흐름**:
1.  사용자가 "공개(Public)" 토글 클릭.
2.  시스템 쿼리: `documents where title == currentTitle AND visibility == 'public'`.
3.  **발견 시 (중복)**:
    - 공개 전환 **차단**.
    - 경고창 표시: *"이미 'React'라는 이름의 공개 문서가 존재합니다."*
    - **제안 옵션**:
        1.  **이름 변경**: "문서 제목을 'React (User A)'로 변경하고 공개하시겠습니까?"
        2.  **취소**: 비공개 상태 유지.

---

## 5. 데이터 거버넌스 및 보호 (Phase 2)

### 지식 사유화 방지 (Privatization Loophole)
- **문제**: A가 문서를 공개하고 B가 기여했으나, A가 다시 비공개로 돌려버리면 B의 기여분까지 사라짐.
- **정책**: **"공개 = 기여"**
    - 기여자가 2명 이상인 문서는 **비공개 전환 불가**.
    - 필요시 "사본 만들기"를 통해 개인 공간으로 복제만 가능.

### 악의적 훼손 방지 (Vandalism Protection)
- **삭제 권한**: 공개(Public) 문서는 오직 **관리자(Admin)**만 삭제 가능. 작성자는 "아카이브(숨김)"만 가능.
- **복구 시스템**: `docs/{id}/history` 서브컬렉션에 버전을 저장하여, 훼손 시 누구든(혹은 관리자가) 이전 버전으로 롤백 가능.

---

## 6. 버전 관리 및 복구 (Version Control & Rollback)

### 목적
- **문서 훼손 복구**: 공개 문서를 누군가 악의적으로 지우거나 잘못 수정했을 때를 대비.
- **기여 내역 추적**: 누가 언제 어떤 내용을 기여했는지 투명하게 공개 (Phase 2의 지식 사유화 방지와 연계).

### 데이터 구조 (Subcollection)
`documents/{docId}/history/{versionId}`
```typescript
interface DocHistory {
    version: number;
    content: string; // 전체 스냅샷 (또는 Diff)
    title: string;
    updatedAt: Timestamp;
    authorId: string;
    authorName: string;
    changeLog?: string; // "Added section A" (Optional)
}
```

### UX/UI
- **"히스토리" 탭**: 문서 상단 메뉴에서 접근.
- **버전 목록**: 시간순 나열 (작성자, 시간 표시).
- **롤백 버튼**: "이 버전으로 되돌리기" (작성자 또는 관리자만 가능, 혹은 기여자 투표?).

---

## 7. 소통 및 인터랙션 (Phase 3: Communication & Interaction)

### 비전
단순한 지식 저장소를 넘어, 지식이 흐르고 발전하는 **"커뮤니티형 위키"**로 진화.

### 주요 기능

#### 1. 코멘트 시스템 (Comments)
- **블록 코멘트**: Notion처럼 특정 텍스트 블록에 댓글 달기.
- **전체 코멘트**: 문서 하단에 일반 댓글.
- **스레드(Thread)**: 대댓글 지원으로 깊이 있는 토론 가능.

#### 2. 리액션 (Reactions)
- **이모지 반응**: 문서나 댓글에 👍, ❤️, 🎉 등 감정 표현.
- **유용해요**: "이 문서가 도움됨" 지표를 통해 인기 문서 랭킹 산정 가능.

#### 3. 알림 센터 (Notification Center)
- **트리거**:
    - 내 문서에 댓글이 달렸을 때.
    - 내 문서가 수정되었을 때 (공동 편집).
    - 누군가 나를 멘션(@User)했을 때.
- **UI**: 헤더의 종 모양 아이콘 -> 드롭다운 목록.

#### 4. 사용자 프로필 (User Profile)
- **정보**: 프로필 사진, 닉네임, 한 줄 소개.
- **활동**: "내가 기여한 문서", "좋아요 받은 수" 등을 통해 기여 동기 부여.

