dev.syw

Firestore와 Storage 보안 규칙 문법을 익히고 인증 기반 접근 제어와 데이터 검증을 구현한다.

보안 규칙

클라이언트가 데이터베이스에 직접 접근하는 구조이므로, 보안 규칙은 Firebase에서 가장 중요한 부분입니다. 규칙은 누가 어떤 데이터를 읽고 쓸 수 있는지, 그리고 데이터가 어떤 형태여야 하는지를 서버에서 강제합니다. 이번 강의에서는 규칙 문법과 흔한 패턴을 배웁니다.

학습 목표

  • Firestore와 Storage 규칙의 기본 문법을 이해한다.
  • request.auth로 인증 기반 접근을 제어한다.
  • 본인 데이터만 읽고 쓰도록 제한한다.
  • 들어오는 데이터를 검증한다.

규칙 기본 구조

규칙은 match 블록으로 경로를 지정하고, allow로 작업을 허용합니다. 아래는 모든 접근을 막는 가장 안전한 기본값입니다.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}
JavaScript

request.auth로 인증 확인

request.auth는 요청한 사용자의 인증 정보입니다. 로그인하지 않았다면 null입니다. 로그인한 사용자에게만 허용하려면 다음과 같이 작성합니다.

match /posts/{postId} {
  allow read: if true;                       // 누구나 읽기
  allow write: if request.auth != null;      // 로그인한 사용자만 쓰기
}
JavaScript

본인 데이터만 접근

사용자 문서는 본인만 읽고 쓰게 제한하는 경우가 많습니다. 경로의 ID와 인증된 UID를 비교합니다.

match /users/{uid} {
  allow read, write: if request.auth != null
                     && request.auth.uid == uid;
}
JavaScript

⚠️ 주의 — 규칙을 allow read, write: if true;로 열어두면 누구나 모든 데이터를 읽고 지울 수 있습니다. 개발 중 임시로 열었다면 배포 전 반드시 닫아야 합니다.

데이터 검증

request.resource.data로 들어오는 데이터를 검사할 수 있습니다. 필수 필드나 타입, 작성자 일치 여부를 강제합니다.

match /posts/{postId} {
  allow create: if request.auth != null
    && request.resource.data.title is string
    && request.resource.data.title.size() > 0
    && request.resource.data.authorId == request.auth.uid;
}
JavaScript

Storage 규칙

Storage도 비슷한 문법을 씁니다. 사용자 폴더는 본인만 쓰도록 제한하는 것이 일반적입니다.

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /users/{uid}/{fileName} {
      allow read: if true;
      allow write: if request.auth != null
                   && request.auth.uid == uid;
    }
  }
}
JavaScript

💡 TIP — 콘솔의 Rules Playground에서 가상의 요청을 만들어 규칙이 의도대로 허용/거부되는지 배포 전에 테스트할 수 있습니다.

변수의미
request.auth요청자의 인증 정보(미인증 시 null)
request.auth.uid로그인한 사용자의 UID
request.resource.data쓰려는 새 데이터
resource.data기존에 저장된 데이터

요약

  • 규칙은 match 경로와 allow 작업으로 구성됩니다.
  • 기본값은 모두 거부(if false)로 두는 것이 안전합니다.
  • request.auth로 로그인 여부를, request.auth.uid로 본인 여부를 확인합니다.
  • request.resource.data로 들어오는 데이터의 형식과 작성자를 검증합니다.
  • Storage 규칙도 같은 방식으로 사용자 폴더 접근을 제한합니다.

연습문제

  1. 로그인하지 않은 사용자의 request.auth 값은 무엇인가요?
  2. 사용자 문서를 본인만 읽고 쓰게 하려면 어떤 조건을 쓰나요?
  3. 들어오는 데이터를 검증할 때 참조하는 변수는 무엇인가요?
  4. 개발 중 규칙을 모두 열어두었을 때의 위험은 무엇인가요?

힌트 — 규칙은 서버에서 강제된다는 점을 떠올려 보세요.

💡 연습문제 풀이

불러오는 중…

함께 보면 좋은 자료

댓글 0

Firebase” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.