# 📅 Agent 회의록: DB 백업 전략

> **일시**: 2026-02-15 21:30
> **참석자**: PM, Backend, Data, QA
> **안건/주제**: 악의적인 DB 훼손 대비 백업 전략 수립

---

## 1. 배경 (Background - PM)
- **목표**: 악의적인 사용자 행위(대량 삭제, 내용 훼손)로부터 데이터베이스(Firestore)를 보호.
- **현재 상태**: 자동 백업 없음, Soft Delete 미구현, 코드 레벨의 버전 관리 미구현 (검색 결과 확인).
- **사용자 요청**: "악의적인 편집에 대비한 백업 방안 마련."

## 2. 기술 제안 (Technical Proposals)

### A. 즉각적인 보호: Soft Delete (Data/Backend)
- **개념**: 물리적인 `DELETE` 대신 `isDeleted: true` 플래그를 업데이트.
- **구현**:
    - `documents` 스키마에 `isDeleted` (boolean) 및 `deletedAt` (timestamp) 필드 추가.
    - `deleteDocument` API를 수정하여 삭제 대신 패치(Patch) 업데이트 수행.
    - 모든 읽기 쿼리에서 `where('isDeleted', '==', false)` 필터 적용.
- **이점**: 실수 또는 악의적인 삭제로부터 즉시 복구 가능.

### B. 버전 관리 (Version Control - Data)
- **개념**: 각 문서의 변경 이력을 저장.
- **구현**:
    - `document_versions` 서브 컬렉션(또는 최상위 컬렉션) 생성.
    - 업데이트 시마다 이전 상태의 스냅샷을 `versions`에 저장.
    - UI: 관리자/사용자가 "이 버전으로 복원"할 수 있는 기능 제공.
- **이점**: 내용 훼손(예: 내용을 쓰레기 값으로 대체)에 대한 보호.

### C. 재해 복구: 정기 백업 (Scheduled Exports - Backend)
- **개념**: Firestore 데이터베이스 전체를 Google Cloud Storage로 정기 덤프.
- **구현**:
    - Cloud Scheduler를 통해 GCP `gcloud firestore export` 실행.
    - 주기: 매일 (한국 시간 오전 04:00).
    - 보관 주기: GCS 버킷 수명 주기 규칙 적용 (30일 보관).
- **이점**: 치명적인 장애 또는 전체 데이터 손상에 대비.

## 3. QA 및 보안 고려사항 (QA)
- **접근 제어**: 오직 `admin` 역할만 물리적 삭제 또는 전체 백업에 접근 가능하도록 제한.
- **테스트**:
    - `isDeleted` 항목이 검색/목록에 나타나지 않는지 검증.
    - "복원" 기능이 정확한 내용을 복구하는지 검증.
- **알림**: 대량 삭제 발생 시(예: 1분 내 10개 이상 문서 삭제) 관리자에게 알림.

## 4. 결정 및 실행 계획 (Decision & Action Items)

| 우선순위 | 작업 (Task) | 담당자 |
| :--- | :--- | :--- |
| **High** | **1. 스키마 업데이트**: Document 스키마에 `isDeleted`, `deletedAt`, `updatedBy` 추가. | Data |
| **High** | **2. API 업데이트**: 'Delete' API를 Soft Delete로 리팩토링. | Backend |
| **Medium** | **3. 백업 스크립트**: Firestore 수동/정기 내보내기 스크립트 작성. | Backend |
| **Medium** | **4. 버전 관리**: 콘텐츠 이력을 위한 `document_versions` 스키마 설계. | Data |

## 5. 결론
사용자의 우려를 즉시 해소하기 위해 **Soft Delete**와 **수동/정기 백업 스크립트**를 우선적으로 구현합니다. 전체 버전 관리는 다음 단계로 진행합니다.
