# 계획서: task-143.1 — Firestore rules/indexes 배포

## 작업 요약
InsuWiki 프로젝트의 Firestore 보안 규칙(firestore.rules)과 인덱스(firestore.indexes.json)를 Firebase에 배포한다.

## 서브태스크 분해

| 순서 | 서브태스크 | 담당 | 설명 |
|------|-----------|------|------|
| 1 | 배포 전 파일 확인 | GLM-5 | firestore.rules, firestore.indexes.json 존재 및 내용 확인 |
| 2 | Firebase CLI 배포 실행 | GLM-5 | npx firebase deploy --only firestore:rules,firestore:indexes |
| 3 | 배포 결과 검증 | GLM-5 | 에러 없음 확인, 배포 성공 메시지 확인 |
| 4 | 체크리스트 실행 | GLM-5 | glm-checklist.py 실행하여 all_passed: true 확인 |
| 5 | .done 파일 생성 | GLM-5 | task-143.1.done 파일 생성 |

## 팀원 배정
- **GLM-5 (오픈클로)**: 전체 배포 작업 단독 수행 (spawn 없음, 순차 실행)

## 실행 순서
1. 환경 변수 GOOGLE_APPLICATION_CREDENTIALS 설정
2. /home/jay/projects/insuwiki 디렉토리로 이동
3. firestore.rules, firestore.indexes.json 파일 존재 확인
4. `npx firebase deploy --only firestore:rules,firestore:indexes --project insuwiki-j2h` 실행
5. 배포 결과 확인 (성공/실패)
6. glm-checklist.py 실행 (all_passed: true 요구)
7. .done 파일 생성

## 예상 위험 및 대안

| 위험 | 대안 |
|------|------|
| 서비스 계정 키 파일 없음 | GOOGLE_APPLICATION_CREDENTIALS 경로 존재 확인 후 진행 |
| Firebase CLI(npx) 미설치 | node_modules 내 firebase-tools 확인, 필요시 전역 설치 확인 |
| 배포 실패 (permission denied) | 서비스 계정 권한 확인 (Firestore Admin 역할 필요) |
| 인덱스 생성 중 타임아웃 | 인덱스는 비동기 생성이므로 배포 성공 ≠ 인덱스 완전 생성, 정상 동작 확인 필요 |

## 실패 시나리오 체크리스트

### 1. 비정상 입력/상태
- firestore.rules 또는 firestore.indexes.json 파일이 없거나 깨져있을 경우: Firebase CLI가 배포 전 검증 단계에서 오류 반환 → 배포 중단, 오류 메시지 확인 후 파일 복구 필요
- firebase.json에 firestore 설정이 없으면: Firebase CLI가 rules/indexes 대상을 인식 못함 → firebase.json 확인 필수

### 2. 동시성/경쟁 조건
- 해당 없음: 배포 작업은 단일 프로세스로 실행되며, Firebase 서버 측에서 원자적으로 처리함
- 동시에 여러 배포 실행 시: Firebase 프로젝트 레벨에서 충돌 가능하나, 이 작업은 1회성 단독 실행이므로 문제없음

### 3. 비정상 종료/타임아웃
- 배포 중 프로세스 강제 종료: Firebase는 트랜잭션 기반이 아니므로 부분 배포 상태가 남을 수 있음 → 재실행 시 멱등성(idempotent) 보장되므로 재배포 가능
- 인덱스 빌드 타임아웃: Firebase 인덱스 생성은 백그라운드 작업이므로 CLI 완료 후에도 수 분 소요될 수 있음, 정상 현상

### 4. 스테일 데이터
- 해당 없음: 배포는 단방향 push이므로 캐시/스테일 데이터 문제 없음
- 기존 rules/indexes 덮어쓰기: 현재 배포본이 이전 버전을 완전히 대체함, 롤백이 필요하면 이전 rules 파일로 재배포 필요

### 5. 통합 시 충돌
- functions 배포와 충돌 가능성: 이미 functions 배포는 완료됨, rules/indexes만 배포하므로 충돌 없음
- 다른 팀의 동시 배포: insuwiki-j2h 프로젝트에 대한 배포 충돌 가능성 — 현재 단독 배포이므로 문제없음
- firebase.json 설정과 실제 파일 경로 불일치 가능성: 배포 전 firebase.json 내 firestore.rules, firestore.indexes 경로 확인 필수
