Firestore · Storage 보안 규칙 · 인덱스 · 보안 규칙 테스트 · 개발 서버 구성 스크립트

This commit is contained in:
Sn-Kinos
2026-09-29 17:06:48 +09:00
parent 316821e7d5
commit cbfb72efe0
11 changed files with 3128 additions and 204 deletions
+14 -4
View File
@@ -1,24 +1,34 @@
# Firestore 보안 규칙 회귀 테스트
# Firestore · Storage 보안 규칙 회귀 테스트
Firebase 실제 프로젝트 없이 로컬 Firestore 에뮬레이터에서 `../firestore.rules`의 allow/deny 동작을 검증합니다.
Firebase 실제 프로젝트 없이 로컬 에뮬레이터에서 `../firestore.rules` 와 `../storage.rules` 의 allow/deny 동작을 검증합니다.
## 실행
```bash
cd app/firebase/test
cd firebase/test
npm ci
npm run test:emulator
```
`test:emulator`는 다음 순서로 실행됩니다.
1. Firebase CLI가 `demo-fancake` 프로젝트 ID로 Firestore 에뮬레이터를 기동합니다.
1. Firebase CLI가 `demo-fancake` 프로젝트 ID로 Firestore · Storage 에뮬레이터를 기동합니다.
2. `initializeTestEnvironment()`가 `../firestore.rules` 원문을 에뮬레이터 규칙 REST API로 적재합니다.
3. 음성 대조군이 로그인 사용자의 지갑 쓰기가 `permission-denied`인지 먼저 확인합니다.
4. 소유자 지갑 읽기 양성 대조군을 확인한 뒤 Vitest 회귀 테스트 전체를 실행합니다.
`tests/storage.rules.test.mjs` 는 프로필 사진 업로드 경로(`users/{uid}/profile/{file}`)의 용량·형식·소유자 판정을 같은 방식으로 확인합니다. 정책 원장 B-44 가 *클라이언트 1차 검증 → Storage 규칙 서버 검증* 2단을 요구하므로, 앱을 고쳐 우회해도 규칙에서 막히는지를 여기서 봅니다.
Firebase CLI의 `emulators:exec` 기동 성공만으로 규칙 적재·컴파일 성공을 판단하지 않습니다. 규칙 적재 실패 시 2단계에서 실행이 중단되고, 음성 대조군이 허용되면 3단계에서 실행이 중단됩니다.
## 한국어 로케일 JVM 에서 실행할 때
에뮬레이터 JVM 이 한국어 로케일이면 규칙 평가 중 리소스 번들 예외로 일부 테스트가 죽는 사례가 보고되었습니다. 실행 전에 로케일을 고정하십시오.
```bash
JAVA_TOOL_OPTIONS="-Duser.language=en -Duser.country=US" npm run test:emulator
```
## 복합 인덱스 검증 한계 실측
```bash