[Firebase] Cloud Firestore - 시작

박지훈·2023년 11월 22일

Firebase

목록 보기
1/6
post-thumbnail

트립핀 프로젝트를 할 때에 백엔드가 따로 없는 우리팀은, Firebase를 사용했다.
프로젝트 시작하기 이전에 파이어베이스를 공부했지만, 아직 부족함이 너무 많은 것 같아서 따로 정리한 번 하고 넘어가려고 한다.

별 거 아니지만 처음에 헷갈렸던 것은 Cloud Firestore vs Cloud Storage 두개가 뭐가 다르지? 둘 다 저장하는 거 아니야? 라고 생각했다.

Cloud Firestore vs Cloud Storage?

Cloud Firestore?

  • Firestore는 NoSQL 문서 지향 데이터베이스로서, JSON 형식의 문서를 사용하여 데이터를 저장한다.

    NoSQL💡

    "Not Only SQL"의 약자로, SQL언어를 사용하지 않는 데이터베이스를 말한다.
    주로 대량의 분산된 데이터나 동적으로 변하는 데이터에 적합하다. NoSQL 데이터베이스는 고정된 테이블 스키마를 가지지 않으며, 각각의 데이터 아이템이 필요에 따라 자유롭게 속성을 정의할 수 있다.

  • 실시간 업데이트를 지원하여 여러 클라이언트 간에 데이터를 실시간으로 동기화할 수 있다.
  • 복잡한 쿼리를 지원하며, 데이터베이스 구조를 계층적으로 구성할 수 있다.
  • Firebase의 인증 및 보안 규칙과 통합하여 사용자 인증 및 권한 관리에 사용된다.

Cloud Storage?

  • Cloud Storage는 클라우드에 파일을 안전하게 저장하는 데 사용된다.
  • 파일(이미지, 비디오, 문서 등)을 저장하고 검색할 수 있으며, 웹 및 모바일 앱에서 이러한 파일을 쉽게 다운로드 및 업로드할 수 있다.
  • Firebase 인증 및 보안 규칙과 통합하여 사용자 및 권한 관리에 사용된다.

Cloud Firestore

데이터 구조화

Cloud Firestore에서 데이터를 구조화할 때는 아래와 같은 몇 가지 옵션을 사용할 수 있다.

  • 문서
  • 여러 컬렉션
  • 문서 내의 하위 컬렉션

1. 문서의 중첩 데이터

문서 내에 배열 또는 지도 등의 복합 객체를 중첩할 수 있다.

장점: 문서 안에 단순한 고정 데이터 목록을 보관하려는 경우 데이터 구조를 손쉽게 설정하고 간소화할 수 있다.
단점: 시간에 따라 데이터가 증가하는 경우 다른 옵션보다 확장성이 부족. 목록이 커지면 문서도 커지므로 문서 검색 속도가 느려질 수 있다.
예시: 예를 들어 채팅 앱에서 사용자가 가장 최근에 입장한 대화방 3개를 프로필에 중첩 목록으로 저장할 수 있다.

2. 하위 컬렉션

데이터가 시간에 따라 증가할 가능성이 있다면 문서 내에 컬렉션을 만들 수 있다.

장점: 목록이 커져도 상위 문서의 크기는 그대로이다. 또한 하위 컬렉션에서 모든 쿼리 기능을 사용할 수 있으며 하위 컬렉션 간에 컬렉션 그룹 쿼리를 실행할 수 있다.
단점: 하위 컬렉션을 손쉽게 삭제할 수 없다.
예시: 동일한 채팅 앱에서 채팅방 문서 안에 사용자 또는 메시지의 컬렉션을 만들 수 있다.

3. 루트 수준 컬렉션

데이터베이스 루트 수준에 컬렉션을 만들어 상이한 데이터 세트를 정리.

장점: 루트 수준 컬렉션은 다대다 관계에 적합하며 각 컬렉션 내에서 강력한 쿼리를 제공.
단점: 데이터베이스가 커지면 내재적으로 계층 구조를 가진 데이터 가져오기가 더욱 복잡해질 수 있다.
예시: 동일한 채팅 앱에서 사용자 컬렉션 하나와 채팅방 및 메시지 컬렉션 하나를 만들 수 있다.

요약 💡

기준문서의 중첩 데이터하위 컬렉션루트 수준 컬렉션
장점데이터 구조 간소화 가능, 단순한 고정 데이터 목록 관리 간편상위 문서의 크기 유지, 하위 컬렉션 간 컬렉션 그룹 쿼리 가능각 컬렉션 간 강력한 쿼리 가능, 다대다 관계에 적합
단점확장성 부족 (데이터가 증가하면 문서도 커짐)하위 컬렉션을 쉽게 삭제할 수 없음계층 구조가 복잡해질 수 있음
예시채팅 앱에서 입장한 대화방 목록채팅 앱에서 채팅방 안의 사용자 또는 메시지 목록채팅 앱에서 사용자, 채팅방, 메시지 컬렉션

데이터 CRUD까지 같이 포스팅하면 너무 길어질 것 같아 따로 나누겠다.


👀 Reference

profile
Flutter 개발자가 되어보자!

0개의 댓글