# DB 백업 및 Soft Delete 구현 명세

> **일시**: 2026-02-15 21:30
> **안건/주제**: DB 백업 및 Soft Delete 구현 상세 명세

---

## 사용자 검토 필요 (User Review Required)
> [!IMPORTANT]
> **Soft Delete 전환**: Soft Delete 구현으로 인해 `DELETE` 작업은 이제 문서의 `isDeleted` 플래그를 업데이트하게 됩니다.
> **데이터베이스 정리**: "Soft Deleted" 항목을 30일 후 영구 삭제하기 위한 별도의 "Hard Delete" 관리자 기능이 필요합니다 (추후 구현).
> **GCP 비용**: 백업을 위한 Cloud Scheduler 및 Cloud Storage 활성화 시 소액의 GCP 비용이 발생할 수 있습니다.

## 제안된 변경 사항 (Proposed Changes)

### 데이터베이스 & 스키마 (Database & Schema)
#### [MODIFY] [schema.prisma / types]
- Document 모델/인터페이스에 `isDeleted` (boolean, 기본값 false) 및 `deletedAt` (timestamp, nullable) 필드 추가.

### 백엔드 API (Backend API)
#### [MODIFY] [document-service.ts](file:///nextapp/src/lib/services/document-service.ts)
- `deleteDocument` 함수를 "Soft Delete"를 수행하도록 업데이트 (`isDeleted: true` 업데이트).
- `getDocuments` / `searchDocuments` 함수에서 `isDeleted: true`인 문서를 필터링하도록 업데이트.

### 인프라 (백업) (Infrastructure)
#### [NEW] [backup-scheduler.ts](file:///functions/src/backup-scheduler.ts) (또는 등가 경로)
- Firestore Export를 GCS 버킷으로 트리거하는 Google Cloud Function 생성.
- Cloud Scheduler (Pub/Sub 또는 HTTP)에 의해 트리거되도록 설계.

## 검증 계획 (Verification Plan)

### 자동화 테스트 (Automated Tests)
- **Soft Delete**:
    - 테스트 문서 생성.
    - `deleteDocument` 호출.
    - DB에 문서가 여전히 존재하지만 `isDeleted: true`인지 확인.
    - `getDocuments` 결과에 이 문서가 반환되지 않는지 확인.
- **백업 (Backup)**:
    - (수동) `firebase functions:shell` 또는 gcloud를 사용하여 백업 스크립트/함수 로컬 실행.
    - 지정된 GCS 버킷에 새 폴더가 생성되는지 확인.

### 수동 검증 (Manual Verification)
1.  **UI 확인**: UI에서 문서 삭제. 새로고침. 목록에서 사라졌는지 확인.
2.  **DB 확인**: Firestore 콘솔 확인. 문서가 존재하며 `isDeleted: true` 상태인지 확인.
