결제 예시

기본 채팅 앱의 실제 예시를 사용하여 Firestore의 사용량과 비용을 알아봅니다. 이 예시는 정확한 추정치는 아니지만 Firestore 사용량에 대한 청구 방식을 이해하는 데 도움이 될 것입니다.

개요: 사용량 수준별 비용

일반적인 비용을 설명하기 위해 사용자가 2명 이상의 참여자와 채팅을 시작할 수 있는 채팅 앱을 예로 들겠습니다. 사용자는 목록에서 활성 채팅을 확인하고 메시지를 읽고 보낼 수 있습니다. 이 예에서는 북미 다중 리전(구체적으로 nam5)의 가격 책정을 사용합니다.

가정

사용량과 데이터 저장소에 대한 가정은 다음과 같습니다.

  • 일일 활성 사용자 수(DAU)는 전체 앱 설치의 10%입니다. 일일 활성 사용자 수(DAU)의 대략적인 추정치를 사용하여 일일 비용을 예측할 수 있습니다. 이는 특정 날짜에 앱을 스스로 열고 사용한 사용자이며 일반적으로 전체 앱 설치에서 작은 부분을 차지합니다. 아래 계산에서는 DAU를 전체 앱 설치 수의 10%로 추정했습니다.
  • 문서 크기는 비교적 작습니다. 유형별 문서 크기의 분류는 아래 표를 참조하세요.
  • 데이터는 3개월 동안만 저장됩니다. 예로 들고 있는 채팅 앱에서 메시지는 3개월 동안만 저장됩니다. 삭제 작업을 설명하기 위해 아래 계산에서는 모든 일일 쓰기 작업이 매일 삭제된다고 가정합니다.
  • 이 비용 추정치는 예로 사용된 앱의 비용 대부분을 반영하지만 전부는 아닙니다. 이 가이드에 설명된 가장 자주 쓰이는 사용자 작업, 사용자 및 메시지 저장용량, 이그레스을 계산하여 대부분의 앱 비용을 반영했습니다. 하지만 앱 구조와 데이터 니즈에 따라 추가 비용을 고려해야 할 수도 있습니다. 이 예시를 비용 계산 가이드로 사용하고 Firestore 비용에 대한 자세한 내용은 가격 책정 페이지를 참조하세요.

사용자 작업별 작업 분류는 분류: 사용자 작업별 청구 사용량 섹션을 참조하세요.

소규모
(설치 50,000건)

앱 설치 50,000건(일일 활성 사용자 수 5,000명): $12.14/월

읽기/쓰기 비용
월간 총 비용 = $11.10/월
일일 총 읽기 400,000 =   무료 읽기 50,000+(읽기 350,000($0.06/100,000 기준)) =   3.5*$0.06
$0.21/일*30 = $6.30
 
일일 총 쓰기 100,000 =   무료 쓰기 20,000+(쓰기 80,000($0.18/100,000 기준)) =   0.8*$0.18
$0.14/일*30 = $4.20
 
일일 총 삭제 100,000 =   무료 삭제 20,000+(삭제 80,00만($0.02/100,000 기준)) =   0.8*$0.02
$0.02/일*30 = $0.60
저장소/네트워킹 비용
월간 총 비용 = $1.04/월
일일 이그레스 20KB/DAU*5,000 DAU =   일일 이그레스 100MB*30 =   월간 네트워크 이그레스 3GB
무료 이그레스 3GB = 무료1
 
일일 메시지 저장용량 15KB/DAU+저장용량 3KB/설치2 =   저장용량 45KB/DAU*5,000 DAU =   일일 저장용량 225MB/DAU*30 =   월간 저장용량 사용량 6.75GB
무료 저장용량 1GB+(5.75*$0.18) = $1.04/월

1 Firestore 사용 시 월간 네트워크 이그레스 10GB는 무료입니다.
2 DAU가 총 앱 설치의 10%라는 가정에서 이 숫자는 앱을 설치한 총 사용자 수를 나타냅니다.

중간 규모
(설치 1,000,000건)

앱 설치 1,000,000건(일일 활성 사용자 수 100,000명): $292.02/월

읽기/쓰기 비용
월간 총 비용 = $261.90/월
일일 총 읽기 8,000,000 =   무료 읽기 50,000+(읽기 7,950,000($0.06/100,000 기준)) =   79.5*$0.06
$4.77/일*30 = $143.10
 
일일 총 쓰기 2,000,000 =   무료 쓰기 20,000+(읽기 1,980,000($0.18/100,000 기준)) =   19.8*$0.18
$3.56/일*30 = $106.80
 
일일 총 삭제 2,000,000 =   무료 삭제 20,000+(삭제 1,980,000($0.02/100,000 기준)) =   19.8*$0.02
$0.40/일*30 = $12.00
저장소/네트워킹 비용
월간 총 비용 = $30.12/월
일일 이그레스 20KB/DAU*100,000 DAU =   일일 이그레스 2GB*30 =   월간 네트워크 이그레스 60GB
무료 이그레스 10GB+(이그레스 50GB*$0.12/GB) = $6.00/월
 
일일 메시지 저장용량 15KB/DAU+저장용량 3KB/설치1 =   저장용량 45KB/DAU*100,000 DAU =   일일 저장용량 4.5GB/DAU*30 =   월간 저장용량 사용량 135GB
무료 저장용량 1GB+(134GB*$0.18/GB) = $24.12/월

1 DAU가 총 앱 설치의 10%라는 가정에서 이 숫자는 앱을 설치한 총 사용자 수를 나타냅니다.

대규모
(설치 10,000,000건)

앱 설치 10,000,000건(일일 활성 사용자 수 1,000,000명): $2951.52/월

읽기/쓰기 비용
월간 총 비용 = 총 $2,637.90/월
일일 총 읽기 80,000,000 =   무료 읽기 50,000+(읽기 79,950,000($0.06/100,000 기준)) =   799.5*$0.06
$47.97/일*30 = $1,439.10
 
일일 총 쓰기 20,000,000 =   무료 쓰기 20,000+(쓰기 19,980,000($0.18/100,000 기준)) =   199.8*$0.18
$35.96/일*30 = $1,078.80
 
일일 총 삭제 20,000,000 =   무료 삭제 20,000+(삭제 19,980,000($0.02/100,000 기준)) =   199.8*$0.02
$4.00/일*30 = $120.00
저장소/네트워킹 비용
월간 총 비용 = $313.62/월
일일 이그레스 20KB/DAU*1,000,000 DAU =   일일 이그레스 20GB*30 =   월간 네트워크 이그레스 600GB
무료 이그레스 10GB+(이그레스 590GB*$0.12/GB) = $70.80/월
 
일일 메시지 저장용량 15KB/DAU+저장용량 3KB/설치1 =   저장용량 45KB/DAU*1,000,000 DAU =   일일 저장용량 45GB/DAU*30 =   월간 저장용량 사용량 1,350GB
(무료 저장용량 1GB)+(1,349GB*$0.18/GB) = $242.82/월

1 DAU가 총 앱 설치의 10%라는 가정에서 이 숫자는 앱을 설치한 총 사용자 수를 나타냅니다.

Firestore 청구 모델에서는 사용한 만큼만 비용을 지불하므로 이 모델 사용을 고려해 보는 것이 좋습니다. 이 청구 모델에서는 청구 금액이 DAU 수에 따라 증감합니다.

분류: 사용자 작업별 청구 사용량

채팅 앱 예의 데이터 구조는 다음과 같습니다.

  • users/{userId} — 사용자 레코드
  • groups/{groupId} — 2명 이상의 사용자 간 채팅
    • messages/{messageId} — 채팅의 각 메시지

데이터 스토리지

앱 데이터를 저장하기 위한 저장소 비용을 계산하기 위해 문서 크기에 적용하는 가정은 다음과 같습니다.

컬렉션 문서 크기(전송 중) 문서 크기(디스크에 있음)*
users 1KB 3KB
groups 0.5KB 1.5KB
messages 0.25KB 0.75KB

*이 크기 계산에는 메시지 필드의 색인이 포함되지만 메시지 콘텐츠에서 색인 생성이 사용 중지된 것으로 가정합니다.

또한 앱에서는 스토리지 비용을 줄이기 위해 메시지를 최대 3개월까지만 저장합니다.

스토리지 비용 계산에 대한 자세한 내용은 스토리지 크기 계산 이해를 참조하세요.

작업

사용자는 대개 앱에서 다음과 같은 일반적인 작업을 수행합니다.

  • 채팅 목록 보기: 사용자가 앱의 홈 화면을 열고 가장 최근에 게시된 메시지 순으로 정렬된 채팅 목록(그룹 및 개별)을 확인합니다.
  • 채팅 메시지 읽기: 사용자가 홈 화면에서 채팅을 선택하고 최근 채팅 메시지를 읽습니다.
  • 채팅 메시지 보내기: 사용자가 채팅(그룹 또는 개별) 메시지를 보냅니다.

Firestore에서 세 가지 일반 사용자 태스크에 대한 예시 앱의 총 예상 작업량은 다음과 같습니다.

  • 읽기: (5*10)+(30) = 일일 사용자별 읽기 80회
  • 쓰기: (10*2) = 일일 사용자별 쓰기 20회
  • 네트워크 이그레스: (50*0.25KB)+(30*0.25KB) = 일일 사용자별 20KB
  • 저장소: (20*0.75KB) = 일일 사용자별 15KB

사용자 작업별 총 사용량

각 사용자 작업을 선택하면 앱의 작업, 저장소, 네트워킹 비용에 대한 전체 설명과 분류를 볼 수 있습니다.

채팅 목록 확인

앱의 홈 화면에는 가장 최근 채팅 25개가 로드되어 문서 읽기 25회에 대한 요금이 청구됩니다. 활성 사용자가 하루에 앱을 5회 열어 매일 사용자당 총 125회의 읽기를 수행한다고 가정합니다. 하지만 다음 예와 같이 좀 더 효율적인 쿼리를 통해 이 부하를 줄일 수 있습니다.

아래 예에서는 앱에 저장된 성공한 각 가져오기의 타임스탬프를 사용하여 쿼리를 새 채팅으로 제한합니다.

db.collection('groups')
  .where('participants', 'array-contains', 'user123')
  .where('lastUpdated', '>', lastFetchTimestamp)
  .orderBy('lastUpdated', 'desc')
  .limit(25)

사용자가 앱을 확인할 때마다 업데이트된 채팅이 평균적으로 10개 있다고 가정합니다. 이 쿼리로 문서 읽기가 10회만 발생합니다.

채팅 메시지 읽기

사용자는 홈 화면에서 채팅 대화목록을 클릭하여 최근 메시지를 봅니다. 처음 로드할 때 가장 최근 메시지 50개가 로드됩니다.

일반적인 사용자가 이 작업을 하루에 5회(홈 화면을 열 때마다 1회) 수행하여 매일 사용자당 읽기 총 횟수가 250이 된다고 가정합니다. 또한 다음과 같이 마지막으로 가져온 시간 이후의 새 메시지로 쿼리를 제한할 수도 있습니다.

db.collection('groups')
  .doc('group234')
  .collection('messages')
  .where('sentTime', '>', lastFetchTimestamp)
  .orderBy('sentTime', 'desc')
  .limit(50)

사용자가 모든 채팅에서 하루에 약 30개의 메시지를 받는다고 가정합니다. 새 메시지만 가져오도록 쿼리를 제한했으므로 매일 30개의 메시지만 가져오는 것이 됩니다.

채팅 메시지 보내기

사용자는 채팅 중 다른 참여자에게 메시지를 보낼 수 있습니다. 활성 사용자가 하루에 약 10개의 메시지를 보낸다고 가정합니다.

보낸 메시지 1개당 문서 쓰기가 2회 발생합니다. 하나는 채팅의 messages 하위 컬렉션에 쓰고 다른 하나는 채팅 상위 문서에 써서 lastUpdated 타임스탬프와 기타 메타데이터를 업데이트합니다.

이 메시지 읽기 비용은 다른 과정에 설명되어 있으므로 아래 총계에서는 쓰기 비용만 고려합니다.