Search
🧵

Firebase Realtime Databas의 과금 구조에 대한 이해와 과금 최적화된 채팅 시스템 설계

태그
Document

Firebase Realtime Database의 과금 구조에 대한 이해와 과금 최적화된 채팅 시스템 설계

Firebase Realtime Database 과금 공식 가이드 문서

Firebase Realtime Database의 과금 요소

1. 연결

현재 연결되어 있는 연결 수 입니다. SDK를 이용해 Database reference접근할 때 집계됩니다. .once() 로 1회성으로 접근하는 경우는 연결 직후 연결이 해제되고 onValue() 등으로 변경까지 감지하는 경우 연결을 계속 붙잡고 있습니다.
생각보다 넉넉한 200,000 동시 연결까지 무료 연결을 지원합니다. 1인이 4개의 연결을 유지하는 경우 동시에 50,000 명의 접속을 처리할 수 있습니다.
 꼭 필요한 경우가 아니라면 once() 함수를 통해 필요한 데이터만 즉각적으로 내려받도록 합니다. onValue() 는 꼭 필요한 경우에만 사용하도록 합니다.

2. 스토리지

Database에 저장된 데이터 양 입니다.
1GB까지 무료 제공되며 초과시 1GB마다 5$가 부과됩니다
1GB이용시 무료, 2GB 사용시 5$, 3GB사용시 10$
 구현체 내용에 따라 다르겠지만, Firebase 공식 문서에 따르면 1GB면 채팅메시지 20,000,000(2천만)개를 저장 가능하다고 합니다. 채팅 메시지 외 데이터도 저장하기때문에 메시지 갯수는 줄어들겠지만 무료사용량도 여유있게 제공합니다.

3. 다운로드

연결된 Realtime Database로부터 내려받은 데이터의 양을 의미합니다.
월 10GB까지 무료 제공되며 초과 사용량은 1GB당 1$으로 과금됩니다.
 다운로드도 생각보다 넉넉한 양을 제공합니다.

VS. Firebase Firestore

Firebase를 이용해 Chat 서비스를 구현한 사례를 종종 찾아볼 수 있습니다. 저도 Chat 시스템을 초기에 Firestore를 활용해 테스트를 진행했었습니다. (이때는 Realtime Database가 구버전이고 Firestore가 신버전인줄 알았음.. )
알고보니 용도가 다른 저장소의 개념이었고, Document단위로 데이터를 저장하고 과금하는 Firestore는 문서의 read/write가 빈번하게 발생하는 Chat에서는 부적합하다고 생각됩니다.
기본적으로 Firestore, Realtime Database 모두 NoSQL이라 여러 테이블의 join이 불가능하며, join 처럼 사용시 어마어마한 읽기가 필요하며 읽히는 문서 갯수 단위로 과금하는 Firestore에서는 과금 폭탄을 맞을 수 있습니다.