데이터베이스 선택: Cloud Firestore 또는 실시간 데이터베이스

Firebase는 실시간 데이터 동기화를 지원하며 클라이언트에서 액세스할 수 있는 2가지 클라우드 기반 데이터베이스 솔루션을 제공합니다.

  • Cloud Firestore는 모바일 앱 개발을 위한 Firebase의 최신 데이터베이스로서 실시간 데이터베이스의 성공을 바탕으로 더욱 직관적인 새로운 데이터 모델을 선보입니다. 또한 실시간 데이터베이스보다 풍부하고 빠른 쿼리와 원활한 확장성을 제공합니다.

  • 실시간 데이터베이스는 Firebase의 기존 데이터베이스로, 여러 클라이언트에서 실시간으로 상태를 동기화해야 하는 모바일 앱을 위한 효율적이고 지연 시간이 짧은 솔루션입니다.

Firebase에서 권장하는 데이터베이스는 무엇인가요?

데이터베이스 솔루션 선택은 다양한 요인에 따라 달라지지만 특정 기능과 관련하여 권장되는 데이터베이스를 추천해 드립니다.

두 솔루션 모두 다음을 제공합니다.

  • 배포 및 유지 관리할 서버가 없는 클라이언트 우선 SDK
  • 실시간 업데이트
  • 무료 등급(이후 사용한 만큼만 비용 지불)

주요 고려사항

두 데이터베이스의 공통 핵심 기능 외에도 아래에 나열된 고려 사항이 앱의 성공에 어떤 영향을 미칠지 생각해보세요.

데이터베이스의 역할
내 앱에서 데이터베이스를 사용하는 목적
기본적으로 데이터 동기화(기본 쿼리 사용)
고급 쿼리, 정렬, 트랜잭션이 필요하지 않으면 실시간 데이터베이스를 사용하는 것이 좋습니다.
고급 쿼리, 정렬, 트랜잭션
전자상거래 앱과 같이 데이터와의 복잡한 상호작용이 필요한 경우 Cloud Firestore를 사용하는 것이 좋습니다.
데이터 작업
내 앱의 데이터베이스 사용량
몇 GB 이하의 데이터가 자주 변경됨
앱이 디지털 화이트보드 앱과 같은 소규모 업데이트 스트림을 보내는 경우 실시간 데이터베이스를 사용하는 것이 좋습니다.
수백 GB 내지 TB의 데이터가 변경되는 횟수보다 읽히는 횟수가 훨씬 더 많음
매우 큰 데이터 세트와 일괄 작업이 자주 필요한 경우 Cloud Firestore를 사용하는 것이 좋습니다.
데이터 모델
원하는 데이터 구조
간단한 JSON 트리
구조화되지 않은 JSON 데이터의 경우 실시간 데이터베이스를 사용하는 것이 좋습니다.
컬렉션으로 정리된 문서
구조화된 문서 및 컬렉션의 경우 Cloud Firestore를 사용하는 것이 좋습니다.
가용성
가용성 요구사항
99.999%의 매우 높은 업타임 보장
가용성이 가장 중요한 경우(예: 전자상거래 앱) Cloud Firestore를 사용하는 것이 좋습니다.
99.95% 이상의 업타임 보장
가용성이 매우 높아야 하지만 결정적이지 않은 경우 Cloud Firestore 또는 실시간 데이터베이스를 사용하는 것이 좋습니다.
로컬 데이터에 대한 오프라인 쿼리
내 앱이 연결이 제한되거나 없는 기기에서 쿼리를 수행해야 하는 빈도
자주
사용자가 오프라인 상태일 때 로컬 데이터에 대한 정교한 쿼리 기능을 사용하려면 Cloud Firestore를 사용하는 것이 좋습니다.
거의 또는 전혀 없음
사용자가 계속 온라인 상태일 것으로 예상되는 경우 Cloud Firestore 또는 실시간 데이터베이스를 사용하는 것이 좋습니다.
데이터베이스 인스턴스 수
내 개별 프로젝트에서 사용해야 하는 데이터베이스
많은 데이터베이스(예: 각 주요 고객의 데이터베이스)
단일 Firebase 프로젝트에 여러 데이터베이스를 추가할 수 있으므로 실시간 데이터베이스를 사용하는 것이 좋습니다.
단일 데이터베이스
단일 데이터베이스가 필요한 경우 Cloud Firestore 또는 실시간 데이터베이스를 사용하는 것이 좋습니다.

다른 중요한 고려사항은 무엇인가요?

이전의 주요 고려사항에 대해 생각해 본 후 데이터베이스를 선택할 수 있습니다. 아직 장단점을 고려 중이면 이 섹션에서 Cloud Firestore와 실시간 데이터베이스의 기타 차이점을 확인하세요.

데이터 모델

실시간 데이터베이스와 Cloud Firestore는 모두 NoSQL 데이터베이스입니다.

실시간 데이터베이스 Cloud Firestore
데이터를 하나의 큰 JSON 트리로 저장합니다.
  • 단순한 데이터를 매우 쉽게 저장합니다.
  • 복잡한 계층적 데이터를 대규모로 정리하기가 더 어렵습니다.

실시간 데이터베이스 데이터 모델 자세히 알아보기

데이터를 문서 컬렉션으로 저장합니다.
  • 단순한 데이터를 JSON과 매우 비슷한 방식으로 문서에 쉽게 저장합니다.
  • 문서에 있는 하위 컬렉션을 사용하여 복잡한 계층적 데이터를 대규모로 쉽게 정리할 수 있습니다.
  • 비정규화 및 데이터 평면화가 덜 필요합니다.

Cloud Firestore 데이터 모델 자세히 알아보기

실시간 및 오프라인 지원

두 제품 모두 모바일 위주의 실시간 SDK를 보유하며 오프라인 대응 앱을 위한 로컬 데이터 저장소를 지원합니다.

실시간 데이터베이스 Cloud Firestore
iOS, Android 클라이언트를 위한 오프라인 지원 iOS, Android, 웹 클라이언트를 위한 오프라인 지원

접속 상태

클라이언트가 온라인인지 오프라인인지를 알면 유용합니다. Firebase 실시간 데이터베이스는 클라이언트 연결 상태를 기록하고 클라이언트의 연결 상태가 변경될 때마다 업데이트를 제공할 수 있습니다.

실시간 데이터베이스 Cloud Firestore
접속 상태가 지원됨 기본적으로 지원되지 않음. Cloud Functions를 통해 Cloud Firestore와 실시간 데이터베이스를 동기화하여 실시간 데이터베이스의 접속 상태 지원을 활용할 수 있습니다. Cloud Firestore에서 접속 상태 구현을 참조하세요.

쿼리

쿼리를 통해 두 가지 데이터베이스에서 데이터를 검색, 정렬, 필터링합니다.

실시간 데이터베이스 Cloud Firestore
제한적인 정렬 및 필터링 기능을 갖춘 깊은 쿼리
  • 쿼리에서 속성을 정렬 또는 필터링할 수 있으며 두 가지를 함께 진행할 수는 없습니다.
  • 기본적으로 깊은 쿼리가 수행되어 항상 전체 하위 트리를 반환합니다.
  • 쿼리에서 JSON 트리의 개별 리프 노드 값에 이르는 세부 수준의 데이터에 액세스할 수 있습니다.
  • 쿼리에서 색인을 필요로 하지 않지만 데이터 세트가 커짐에 따라 특정 쿼리의 성능이 저하됩니다.
복합 정렬 및 필터링 기능을 갖춘 색인 생성된 쿼리
  • 단일 쿼리에서 속성에 필터를 연속으로 사용하고 필터링과 정렬을 결합할 수 있습니다.
  • 쿼리가 얕음: 특정 컬렉션 또는 컬렉션 그룹의 문서만 반환하며 하위 컬렉션 데이터는 반환하지 않습니다.
  • 쿼리에서 항상 전체 문서를 반환해야 합니다.
  • 기본적으로 쿼리 색인화: 쿼리 성능이 데이터 세트가 아닌 결과 세트의 크기에 비례합니다.

쓰기 및 트랜잭션

실시간 데이터베이스 Cloud Firestore
기본 쓰기 및 트랜잭션 작업 고급 쓰기 및 트랜잭션 작업
  • 설정 및 업데이트 작업은 물론 배열 및 숫자 연산자와 같은 고급 변환을 통해 데이터를 씁니다.
  • 트랜잭션이 데이터베이스의 모든 부분에서 데이터를 원자적으로 읽고 쓸 수 있습니다.

신뢰성 및 성능

실시간 데이터베이스 Cloud Firestore
실시간 데이터베이스는 단일 리전 솔루션입니다.
  • 데이터베이스가 단일 리전의 영역별 가용성에 따라 제한됩니다.
  • 지연 시간이 매우 짧아 상태 동기화가 자주 발생할 때 적합합니다.
실시간 데이터베이스의 성능 및 신뢰성에 대한 자세한 내용은 서비스수준계약을 참조하세요.
Cloud Firestore는 자동으로 확장되는 멀티 리전 솔루션입니다.
  • 데이터가 서로 다른 리전의 여러 데이터 센터에 위치하므로 글로벌 확장성과 견고한 신뢰성이 보장됩니다.
  • 전 세계적으로 리전별 또는 멀티 리전 구성이 가능합니다.
서비스수준계약에서 Cloud Firestore 성능 및 신뢰성 특성에 대해 자세히 알아보세요.

확장성

실시간 데이터베이스 Cloud Firestore
확장하려면 샤딩을 사용해야 합니다.
  • 단일 데이터베이스에서 동시 연결 약 200,000개, 초당 쓰기 약 1,000회까지 확장됩니다. 추가로 확장하려면 데이터를 여러 데이터베이스로 샤딩해야 합니다.
  • 개별 데이터의 쓰기 속도에 적용되는 로컬 제한은 없습니다.
확장이 자동으로 수행됩니다.
  • 확장이 완전히 자동으로 수행됩니다. 현재 확장 한도는 동시 연결 수 약 1,000,000개, 초당 쓰기 10,000회입니다. 향후 이 제한을 늘릴 계획입니다.
  • 개별 문서 또는 색인의 쓰기 속도에 적용되는 제한이 있습니다.

보안

실시간 데이터베이스 Cloud Firestore
승인과 검증이 분리된 단계식 규칙 언어 승인과 검증이 결합된 단계식이 아닌 규칙
  • 모바일 SDK의 읽기 및 쓰기가 Cloud Firestore 보안 규칙으로 보호됩니다.
  • 서버 SDK의 읽기 및 쓰기가 Identity and Access Management(IAM)로 보호됩니다.
  • 와일드 카드를 사용하지 않는 한 규칙이 하위로 전파되지 않습니다.
  • 규칙으로 쿼리를 제한할 수 있음: 쿼리 결과에 사용자가 액세스할 수 없는 데이터가 포함되어 있으면 전체 쿼리가 실패합니다.

가격 책정

두 솔루션 모두 Spark, Flame, Blaze 요금제로 제공됩니다.

실시간 데이터베이스 Cloud Firestore
대역폭과 저장용량에 대해서만 청구되지만 요금이 비교적 높습니다.

실시간 데이터베이스 요금제 자세히 알아보기

주로 데이터베이스에서 수행되는 작업(읽기, 쓰기, 삭제)에 대해 요금이 부과되며, 대역폭과 스토리지에 대해서는 비교적 낮은 요금이 부과됩니다.

Cloud Firestore는 Google App Engine 프로젝트의 일일 지출 한도를 지원하므로 비용의 상한선을 적절하게 설정할 수 있습니다.

Cloud Firestore 요금제 자세히 알아보기

Cloud Firestore 및 실시간 데이터베이스 사용

동일한 Firebase 앱 또는 프로젝트 내에서 두 데이터베이스를 모두 사용할 수 있습니다. 두 NoSQL 데이터베이스가 동일한 유형의 데이터를 저장할 수 있고 클라이언트 라이브러리의 작동 방식도 서로 유사합니다. 앱에서 두 데이터베이스를 모두 사용하기로 결정한 경우 위에서 설명한 차이점에 유의하세요.

실시간 데이터베이스Cloud Firestore 모두에서 사용할 수 있는 기능에 대해 자세히 알아보세요.

데이터베이스를 선택할 준비가 되셨나요?

이 비교 정보가 Firebase 데이터베이스 솔루션을 선택하는 데 도움이 되었기를 바랍니다. 이제 Firebase 프로젝트에 데이터베이스를 추가하는 방법을 알아볼 수 있습니다.