본문 바로가기
Firebase

DB의 문지기, 보안 규칙 작성 ✦ Firestore 셋업 #4

by ARCOA 2025. 12. 8.

안녕하세요! ARCOA 지안입니다. 👋 

지난 글에서 card_master 컬렉션을 만들고 데이터를 넣었는데요, 지금 이 데이터는 누구나 읽고 쓸 수 있는 상태예요.

 

프로덕션 모드면 안전하지 않아?

 

프로덕션 모드의 기본 규칙은 "모두 차단"이에요. 하지만 앱이 데이터를 읽으려면 보안 규칙을 작성해야 합니다.

보안 규칙이 없으면:
❌ 앱에서 내부 데이터를 읽을 수 없음
❌ FlutterFlow에서 데이터 연동 실패
❌ 테스트조차 불가능

이번 글에서는:
✦ 보안 규칙의 기본 구조 이해하기
✦ Static 데이터(card_master) 권한 설정
✦ Gemini AI로 쉽게 규칙 작성하기
✦ 시뮬레이터로 테스트 후 배포

복잡해 보이지만, Gemini가 도와주니까 디자이너도 충분히 할 수 있어요 💪

소요 시간은 최대 20분입니다. 

 

 

 

Step 1. 현재 보안 규칙 상태 확인

1-1. Firebase Console 접속

그림 1. Firestore Database의 규칙 화면
그림 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의 규칙 붙여넣기

그림 2. Firebase Database의 보안 규칙 화면
그림 2. Firebase Database의 보안 규칙

 

4-2. Gemini AI로 규칙 도움받기

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

그림 3. Gemini와 보안 규칙 작성 화면
그림 3. Gemini와 보안 규칙 작성

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

그림 4. Gemini에게 물어보기 화면
그림 4. Gemini에게 물어보기

 

 

 

Step 5. 규칙 테스트 및 배포

5-1. 시뮬레이터로 테스트

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

그림 5. 규칙 시뮬레이터(플레이그라운드) 화면
그림 5. 규칙 시뮬레이터(플레이그라운드)

  • 테스트 시나리오 2: 쓰기 테스트 (실패 확인)
    • 시뮬레이션 타입: create
    • 위치: card_master/new-card
    • 인증됨: off
    • 실행 클릭 → ❌ 빨간색 거부 메시지 (정상!)
    • 💡 쓰기가 차단돼야 규칙이 제대로 작동하는 거예요!


5-2. 테스트 완료하고, 규칙 게시하기

  • (그림 6) ✦⑪ 게시 버튼 클릭
  • "변경사항을 게시하시겠습니까?" → 게시 확인
  • 배포 완료 (최대 1분 소요)
  • 💡 기존 활성 리스너는 최대 10분 소요

그림 6. 보안 규칙 게시하기 화면
그림 6. 보안 규칙 게시하기



5-3. 배포 확인

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

그림 7. 보안 규칙 배포 완료 화면
그림 7. 보안 규칙 배포 완료

 

 

 

✅ 완료 체크리스트

[  ] 현재 보안 규칙 상태 확인
[  ] 보안 규칙 기본 구조 이해 (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