안녕하세요! ARCOA 지안입니다. 👋
지난 글에서 card_master 컬렉션을 만들고 데이터를 넣었는데요, 지금 이 데이터는 누구나 읽고 쓸 수 있는 상태예요.
프로덕션 모드면 안전하지 않아?
프로덕션 모드의 기본 규칙은 "모두 차단"이에요. 하지만 앱이 데이터를 읽으려면 보안 규칙을 작성해야 합니다.
보안 규칙이 없으면:
❌ 앱에서 내부 데이터를 읽을 수 없음
❌ FlutterFlow에서 데이터 연동 실패
❌ 테스트조차 불가능
이번 글에서는:
✦ 보안 규칙의 기본 구조 이해하기
✦ Static 데이터(card_master) 권한 설정
✦ Gemini AI로 쉽게 규칙 작성하기
✦ 시뮬레이터로 테스트 후 배포
복잡해 보이지만, Gemini가 도와주니까 디자이너도 충분히 할 수 있어요 💪
소요 시간은 최대 20분입니다.
Step 1. 현재 보안 규칙 상태 확인
1-1. Firebase Console 접속
- https://console.firebase.google.com 접속
- (그림 1) ✦① 빌드의 Firestore Database → ✦② 규칙 탭 클릭

1-2. 기본 규칙 확인
- (그림 1) ✦③ 현재 규칙을 확인해보세요.
✅ 프로덕션 모드로 시작했다면:
→ 모든 접근 차단 (앱도 읽을 수 없음) ⚠️
6 | allow read, write: if false;
✅ 테스트 모드로 시작했다면:
→ 누구나 접근 가능 (위험!) 🚨
6 | allow read, write: if true;
1-3. 테스트 모드의 위험성
- 만약 테스트 모드로 시작하셨다면, 지금 이 블로그를 보면서 바로 변경하세요!

💡 !강조! 테스트 모드 문제점:
- 누구나 데이터를 읽고 쓸 수 있음
- 30일 후 자동 차단 (앱 멈춤)
- 데이터 유출/삭제 위험
Step 2. 보안 규칙 기본 구조 이해
2-1. 보안 규칙의 3가지 구성 요소
- 모든 Firestore 보안 규칙은 이렇게 생겼어요:
① rules_version: 규칙 버전 (항상 '2')
② match: 어떤 컬렉션/문서에 적용할지
③ allow: 누가(조건), 무엇을(read/write) 할 수 있는지
rules_version = '2'; // ① 버전 선언
service cloud.firestore {
match /databases/{database}/documents {
match /<컬렉션_경로>/ { // ② 어떤 데이터에
allow read, write: if <조건>; // ③ 누가 뭘 할 수 있나
}
}
}
2-2. 핵심 패턴 3가지
| 패턴 | 코드 | 의미 |
| 모두 차단 | if false | 아무도 접근 불가 |
| 모두 허용 | if true | 누구나 접근 가능 ⚠️ |
| 인증 필수 | if request.auth != null | 로그인한 사람만 |
💡 이것만 기억하세요:
- if false = 차단
- if true = 허용
- if request.auth != null = 로그인 필수
Step 3. card_master 보안 규칙 작성
3-1. Static 데이터의 권한 전략
- card_master는 Static 데이터로, "사용자는 읽기만, 쓰기는 관리자만"해야 하죠.
- 아래 두 가지 전략 중 선택할 수 있습니다.
[전략 1] 읽기는 모두 허용 (가장 간단) ⭐
- 카드 정보가 공개 정보일 때
- 로그인 없이도 카드 조회 가능
- 구현 가장 간단
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents { // card_master: 누구나 읽기, 쓰기 차단
match /card_master/{cardId} {
allow read: if true;
allow write: if false;
}
}
}
[전략 2] 인증된 사용자만 읽기 (더 안전) 🔒
- 회원 전용 콘텐츠
- 데이터 보호 강화 필요
- Firebase Authentication 연동 완료
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents { // card_master: 로그인한 사용자만 읽기
match /card_master/{cardId} {
allow read: if request.auth != null;
allow write: if false;
}
}
}
3-2. 어떤 전략을 선택할까?
| 기준 | ⭐ 전략 1 | 🔒 전략 2 |
| 구현 난이도 | 쉬움 ★ | 중간 ★ ★ |
| 보안 수준 | 보통 | 높음 |
| 로그인 필요 | 불필요 | 필요 |
| 추천 상황 | MVP, 서비스 초기 | 정식 서비스 |
TIP 초보라면?!
- 처음이라면 전략 1로 시작
- Firebase Authentication 연동 후 전략 2로 업그레이드
- 이미 Firebase 셋업 #3에서 Google 로그인을 연동했다면 전략 2 추천
3-3. 전체 규칙 템플릿 (복사용)
[전략 1] 읽기 모두 허용: 복사해서 사용하세요.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// card_master: 누구나 읽기, 쓰기 차단
match /card_master/{cardId} {
allow read: if true;
allow write: if false;
}
// 그 외 모든 경로는 차단 (안전장치)
match /{document=**} {
allow read, write: if false;
}
}
}
TIP 마지막 "match /{document=**}" 의미
- 위에 정의 안 된 모든 경로는 차단
- 안전장치 역할 (필수!)
Step 4. Firebase Console에서 규칙 작성 및 Gemini 활용
4-1. 규칙 작성
- (그림 2) ✦④ 와 같이 이미 여러 규칙이 작성되어 있는 경우
- (그림 2) ✦⑤는 FlutterFlow 연동으로 생긴 필수 규칙으로 삭제 금지
- (그림 2) ✦⑤ 아래 내용은 "3-3.의 전략 1" 보안 규칙과 일치 확인
- (그림 2) ✦④에서 제일 최근 날짜의 보안규칙을 선택하고, 전략 1 또는 2의 규칙 붙여넣기

4-2. Gemini AI로 규칙 도움받기
- Gemini는 이럴 때 유용해요:
- "이 규칙이 뭘 하는 건지 모르겠어요"
- "Dynamic 데이터 규칙 추가하고 싶어요"
- "규칙이 충돌하는 것 같아요"
- 시나리오 1: 현재 규칙 설명 듣기
- (그림 3) ✦⑥ Gemini에게 물어보기 버튼 클릭
- "현재 보안 규칙을 설명해줘"
- Gemini가 각 줄의 의미를 친절히 설명
- 시나리오 2: 새 컬렉션 규칙 추가
- (그림 3) ✦⑦과 같이 원하는 규칙을 자연어로 설명
- "card_master 컬렉션은 읽기만 허용하고 쓰기는 차단하는 규칙 작성해줘"
- Gemini가 규칙 코드 생성 및 설명 → 규칙 복사
- 에디터에 해당 규칙 붙여넣기

- 시나리오 3: 복잡한 규칙 검토
- (그림 4) ✦⑧과 같이 "전체" 규칙을 복사해서 붙여넣기
- "이 규칙에 문제가 있는지 검토해줘. 그리고 더 안전하게 만들 방법도 알려줘."
- Gemini가 문제점 분석 + 개선안 제시 → 규칙 복사
- 에디터에 해당 규칙 붙여넣기

Step 5. 규칙 테스트 및 배포
5-1. 시뮬레이터로 테스트
- 게시 전에 규칙이 제대로 작동하는지 확인
- (그림 5) ✦⑨ 규칙 플레이그라운드 버튼 클릭
- 테스트 시나리오 1: 읽기 테스트
- 시뮬레이션 타입: get
- 위치: card_master/test-card-001
- 인증됨: off (전략 1) 또는 on (전략 2)
- 실행 클릭 → (그림 5) ✦⑩ 초록색 성공 메시지

- 테스트 시나리오 2: 쓰기 테스트 (실패 확인)
- 시뮬레이션 타입: create
- 위치: card_master/new-card
- 인증됨: off
- 실행 클릭 → ❌ 빨간색 거부 메시지 (정상!)
- 💡 쓰기가 차단돼야 규칙이 제대로 작동하는 거예요!
5-2. 테스트 완료하고, 규칙 게시하기
- (그림 6) ✦⑪ 게시 버튼 클릭
- "변경사항을 게시하시겠습니까?" → 게시 확인
- 배포 완료 (최대 1분 소요)
- 💡 기존 활성 리스너는 최대 10분 소요

5-3. 배포 확인
- "규칙이 게시되었습니다" 메시지 확인
- 새 쿼리에는 최대 1분 후 적용
- 기존 활성 리스너에는 최대 10분 소요
- 급하면 앱 재시작으로 새 리스너 생성

✅ 완료 체크리스트
[ ] 현재 보안 규칙 상태 확인
[ ] 보안 규칙 기본 구조 이해 (rules_version, match, allow)
[ ] card_master 권한 전략 선택 (전략 1 또는 2)
[ ] Firebase Console에서 규칙 작성 완료
[ ] Gemini AI로 규칙 검토 및 개선
[ ] 시뮬레이터로 읽기/쓰기 테스트
[ ] 규칙 게시 및 배포 확인
디자이너를 위한 요약
보안 규칙은 데이터의 문지기다.
if false(차단), if true(허용), if request.auth != null(로그인 필수).
이 세 가지만 알면 Gemini가 나머지를 도와준다.
다음 글
✦ 디자이너(비개발자)를 위한 Firestore 셋업
├ 1 ✦ 설계·타입·관계·보안규칙 기본 개념 완료
├ 2 ✦ Database 만들기와 버전/위치/모드 선택 완료
├ 3 ✦ 첫 데이터 넣기: Static 컬렉션 실습 완료
├ 4 ✦ 보안 규칙 작성 (테스트 vs 프로덕션) 완료
└ 5 ✦ 한 번에 채우는 데이터 + FlutterFlow 활용
지금까지 손으로 2~3개 카드 데이터를 넣어봤는데, 실제 서비스에는 수백 개 데이터가 필요하죠.
다음 편은 Firestore 마지막 편으로 대량 데이터 업로드 방법을 알아봅니다 ✦
한 번에 채우는 데이터 + FlutterFlow 활용 ✦ Firestore 셋업 #5
안녕하세요! ARCOA 지안입니다. 👋 지난 글에서 보안 규칙까지 완성했죠. 이제 Firestore 셋업의 마지막 단계, 대량 데이터 업로드입니다! 실제 데이터는 수백 개인데 어떡하지? #3에서 손으로 카드
dev.arcoa.kr
'Firebase' 카테고리의 다른 글
| 디자이너(비개발자)를 위한 Storage 셋업 ✦ 총 2편 (0) | 2025.12.16 |
|---|---|
| 한 번에 채우는 데이터 + FlutterFlow 활용 ✦ Firestore 셋업 #5 (0) | 2025.12.11 |
| 첫 데이터 넣기: Static 컬렉션 실습 ✦ Firestore 셋업 #3 (0) | 2025.12.05 |
| Database 만들기와 버전/위치/모드 선택 ✦ Firestore 셋업 #2 (3) | 2025.12.04 |
| 설계·타입·관계·보안규칙 기본 개념 ✦ Firestore 셋업 #1 (0) | 2025.12.03 |