본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

요금 (Pricing)

원문 보기 위키 갱신

D1은 다음 항목을 기준으로 청구해요:

  • 사용량 (Usage): D1에 대해 실행하는 쿼리는 읽은 행(rows read), 쓴 행(rows written) 또는 둘 다(트랜잭션이나 배치의 경우)로 집계돼요.

  • Scale-to-zero: 시간이나 용량 단위로는 청구되지 않아요. 데이터베이스에 대해 쿼리를 실행하지 않으면 컴퓨팅 비용이 청구되지 않아요.

  • 저장 용량 (Storage): 플랜에 포함된 한도 이상의 저장 용량에 대해서만 청구돼요.

출처: 문서

본문

청구 지표 (Billing metrics)

| | Workers Free | Workers Paid | | 읽은 행 (Rows read) | 하루 500만 | 첫 250억 / 월 포함 + 100만 행당 $0.001 | | 쓴 행 (Rows written) | 하루 100,000 | 첫 5,000만 / 월 포함 + 100만 행당 $1.00 | | 저장 용량 (GB당, Storage per GB stored) | 5 GB (총합) | 첫 5 GB 포함 + GB-월당 $0.75 |

정의 (Definitions)

  • 읽은 행은 각 행의 크기와 무관하게 쿼리가 읽는(스캔하는) 행 수를 측정해요. 예를 들어 5,000개의 행이 있는 테이블에서 전체 테이블 스캔으로 SELECT * FROM table을 실행하면 5,000개의 읽은 행으로 집계돼요. 인덱스가 없는 열로 필터링하는 쿼리는 Worker에 더 적은 행을 반환할 수 있지만, 어느 부분 집합을 반환할지 결정하려면 여전히 더 많은 행을 읽어야(스캔해야) 해요.

  • 쓴 행은 D1 데이터베이스에 쓴 행 수를 측정해요. 쓰기 작업에는 INSERT, UPDATE, DELETE가 포함돼요. 이 각 작업은 쓴 행에 기여해요. users 테이블에 10개의 행을 INSERT하는 쿼리는 10개의 쓴 행으로 집계돼요.

  • DDL 작업(예: CREATE, ALTER, DROP)은 데이터베이스 구조를 정의하거나 수정하는 데 사용돼요. 이들은 읽은 행과 쓴 행에 섞여 기여할 수 있어요. 사용 가능한 도구(meta 객체, GraphQL Analytics API, Cloudflare 대시보드)를 통해 사용량을 정확히 추적하세요.

  • 행 크기나 행의 열 수는 행이 어떻게 집계되는지에 영향을 주지 않아요. 1 KB 행과 100 KB 행 모두 각각 하나의 행으로 집계돼요.

  • 테이블에 인덱스를 정의하면 인덱스된 필드로 필터링할 때 쿼리가 읽는 행 수를 줄여 줘요. 예를 들어 users 테이블의 timestamp 열 created_at에 인덱스가 있다면 SELECT * FROM users WHERE created_at > ?1 쿼리는 테이블의 일부만 읽으면 돼요.

  • 쓰기가 인덱스된 열을 포함하면 인덱스는 추가로 쓴 행을 더해요. 테이블 자체에 하나, 인덱스에 하나로 총 두 개의 행이 쓰이기 때문이에요. 인덱스의 성능 이점과 읽은 행 감소는 거의 모든 경우에 이 추가 쓰기를 상쇄해요.

  • 저장 용량은 월간 저장 GB를 기준으로 하며, 계정의 모든 데이터베이스 합계를 기준으로 해요. 테이블과 인덱스 모두 소비된 저장 용량에 집계돼요.

  • 무료 한도는 매일 00:00 UTC에 초기화돼요. 월간 포함 한도는 월별 구독 갱신일(첫 구독일 기준으로 결정)에 초기화돼요.

  • D1에서 접근하는 데이터에는 데이터 전송(egress) 또는 처리량(대역폭) 비용이 없어요.

  • 읽기 복제는 읽기 복제본에 대해 추가 비용을 부과하지 않아요. 쿼리의 rows_read와 rows_written에 따라 동일한 사용량 청구가 적용돼요.

자주 묻는 질문 (Frequently Asked Questions)

D1 요금과 관련된 자주 묻는 질문이에요:

D1에 항상 Free 플랜이 있나요?

네, Workers Free 플랜은 항상 D1을 무료로 프로토타입하고 실험할 수 있는 기능을 포함해요.

Free 플랜에서 읽기/쓰기 일일 한도나 총 저장 한도를 초과하면 어떻게 되나요?

계정이 일일 읽기 및/또는 쓰기 한도에 도달하면 D1에 대해 쿼리를 실행할 수 없게 돼요. D1 API는 일일 한도를 초과했다는 오류를 클라이언트에 반환해요. 포함된 저장 한도에 도달하면, 새 데이터를 삽입하거나 테이블을 생성·변경하거나 인덱스·트리거를 만들기 전에 사용하지 않는 데이터베이스를 삭제하거나 오래된 데이터를 정리해야 해요.

Workers Paid 플랜으로 업그레이드하면 일반적으로 몇 분 안에 이러한 한도가 제거돼요.

유료 티어에서 월간 포함 읽기, 쓰기 및/또는 저장을 초과하면 어떻게 되나요?

D1의 요금 지표에 따라 추가 읽기, 쓰기 및 저장에 대해 청구돼요.

(최종) 청구액은 어떻게 예상할 수 있나요?

모든 쿼리는 해당 쿼리가 읽은 행(rows_read)과 쓴 행(rows_written)의 총 수를 포함하는 meta 객체를 반환해요. 예를 들어 5,000개의 행이 있는 테이블에서 전체 테이블 스캔(예: SELECT * FROM users)을 수행하는 쿼리는 rows_read 값 5000을 반환해요:

"meta": {
  "duration": 0.20472300052642825,
  "size_after": 45137920,
  "rows_read": 5000,
  "rows_written": 0
}

이 값은 또한 D1 Cloudflare 대시보드와 분석 API에도 포함되어, 읽기와 쓰기 볼륨을 특정 데이터베이스, 기간, 또는 둘 다에 귀속시킬 수 있어요.

D1은 데이터 전송/egress 비용을 청구하나요?

아니요.

D1은 추가 컴퓨팅에 대한 비용을 추가로 청구하나요?

D1 자체는 추가 컴퓨팅에 대해 청구하지 않아요. D1을 쿼리하고 결과를 계산하는 Workers(예: 결과를 JSON으로 직렬화하거나 쿼리를 실행하는 경우)는 D1 특정 사용량에 더해 Workers 요금으로 청구돼요.

대시보드나 Wrangler(CLI)에서 실행하는 쿼리도 청구 가능한 사용량으로 집계되나요?

네, 데이터베이스에 대해 실행하는 모든 쿼리는 새 데이터베이스에 기존 데이터를 삽입(INSERT)하는 것, 테이블 스캔(SELECT * FROM table), 인덱스 생성까지 모두 읽기 또는 쓰기로 집계돼요.

인덱스를 사용해 쿼리가 읽는 행 수를 줄일 수 있나요?

네, 인덱스를 사용해 쿼리가 읽는 행 수를 줄일 수 있어요. 가장 많이 쿼리되는 테이블과 필터링되는 열에 인덱스를 만들면 스캔되는 데이터 양이 줄어들고 동시에 쿼리 성능이 개선돼요. 읽기 중심 워크로드(가장 흔한 경우)라면 특히 유리해요. 인덱스에 참조된 열에 쓰는 것은 인덱스 업데이트를 위해 쓴 행이 하나 이상 추가되지만, 이는 일반적으로 인덱스의 이점으로 인한 읽은 행 감소로 상쇄돼요.

새로 만든 데이터베이스나 행이 없는 빈 테이블도 저장 용량에 기여하나요?

네, 아주 적지만 기여해요. 빈 테이블은 테이블의 열 수(테이블 폭)에 따라 최소 몇 킬로바이트를 소비해요. 빈 데이터베이스는 약 12 KB의 저장 용량을 소비해요.

더 알아보기 (Learn more)