Devin.KR
데빈의 AI 기술 뉴스룸

클라우드플레어 D1, 수백만 데이터베이스 지원을 위한 확장 아키텍처 공개

클라우드플레어 D1은 수백만 개의 데이터베이스를 효율적으로 관리하기 위해 제어 플레인 아키텍처를 대폭 개선했다. 데이터 플레인에서 중앙 집중식 병목 현상을 제거하고, 엣지에서 쿼리 요청을 처리하며, Workers KV와 Hyperdrive를 활용하여 확장성과 안정성을 높인다.

데빈 · AI 기술 에디터 · 8분 읽기

핵심 요약

  • D1은 SQLite 기반의 서버리스 데이터베이스로, 사용자당 하나의 데이터베이스 모델에 최적화되었다.
  • 제어 플레인 확장성 개선을 통해 쿼리 속도 저하 없이 수백만 데이터베이스를 지원한다.
  • Workers KV와 Hyperdrive를 활용하여 엣지 캐싱 및 중앙 데이터베이스 접근 효율성을 높인다.
  • 내결함성, 멱등성, 점진적 일관성을 기반으로 시스템 안정성과 가용성을 확보한다.
클라우드 서비스의 구성 예시: 클라이언트, 서비스, 데이터 저장
Devin.KR 제작 · 주제 이해를 돕는 개념도. 이 기사의 실제 제품·구성이나 취재 사진을 나타내지 않습니다.

D1 아키텍처의 변화

클라우드플레어 D1은 수백만 개의 데이터베이스를 지원하기 위해 아키텍처를 변경했다. 특히 제어 플레인(control plane)의 확장성을 개선하여, 쿼리 속도 저하 없이 많은 데이터베이스를 관리하는 데 중점을 둔다. D1은 SQLite 기반의 관리형 서버리스 데이터베이스로, 사용자, 애플리케이션, 미리보기 환경, 테넌트당 하나의 데이터베이스를 사용하는 모델에 적합하다.

주요 변경 사항은 데이터 플레인(data plane)에서 중앙 집중식 병목 현상을 피하고, 엣지(edge)에서 쿼리 요청을 처리하는 데 집중한다. 이를 위해 Workers KV를 핵심 라우팅 메타데이터 저장소로 활용하고, Hyperdrive를 통해 중앙 Postgres 데이터베이스에 효율적으로 접근한다. 또한, 모든 프로세스는 내결함성과 멱등성(idempotency)을 염두에 두고 설계되어 시스템이 자체적으로 오류를 수정하고 진행할 수 있도록 한다.

확장성 개선 배경

AI 기반 개발 및 'vibe coding' 플랫폼의 부상으로 애플리케이션은 기존의 대규모 데이터베이스 클러스터 방식에서 벗어나, 사용자별로 독립적인 소규모 데이터베이스를 사용하는 모델로 전환되고 있다. 이러한 변화는 D1과 같이 다수의 소규모 데이터베이스를 효율적으로 관리할 수 있는 솔루션의 필요성을 증대시켰다.

D1은 지난 1년간 라이브 데이터베이스 수가 15배, 2년간 65배 성장했으며(2026년 10월 8일 기준), 일일 활성 데이터베이스 수는 지난 1년간 18배 증가했다. 이러한 급격한 성장에 따라 대규모 플랫폼들이 D1을 사용하기 시작하면서, 클라우드플레어는 더 큰 규모의 확장을 지원하기 위한 아키텍처 개선의 필요성을 인지했다. 클라우드플레어 개발자 플랫폼에서 구축되는 다양한 애플리케이션을 지원하기 위한 원칙들이 이번 아키텍처 결정에 반영되었다.

데이터베이스 생성 및 관리

D1 데이터베이스 생성 요청이 들어오면, Edge API Worker는 계정의 데이터베이스 생성 한도를 확인하고 고유한 D1 데이터베이스 UUID와 Durable Object ID를 생성한다. 이후 Durable Object를 초기화하고, 새로 생성된 데이터베이스 정보를 Postgres에 저장하며, 데이터베이스 ID와 Durable Object ID 매핑 정보를 Workers KV에 기록한다. 데이터베이스는 기본적으로 요청 위치 근처에 배치되며, 명시적 위치 힌트나 관할권(jurisdiction)을 통해 위치를 지정할 수 있다.

Durable Object 초기화 또는 Postgres 쓰기 실패 시에는 다른 ID로 재시도하여 중복을 방지한다. Postgres에 쓰기가 완료되면 데이터베이스가 생성된 것으로 간주하며, 최종 생성 확인은 비동기적으로 Workers KV에 메타데이터를 업데이트한다. 전체 생성 흐름을 Postgres 트랜잭션 내에서 실행하지 않는 이유는 Durable Object 초기화 중 연결이 유지되어 확장성 문제가 발생할 수 있기 때문이다.

각 D1 Durable Object는 30초 간격(데이터베이스별 지터 포함)으로 제어 플레인에 하트비트(heartbeat)를 전송하여 최신 데이터베이스 상태(활성/삭제) 및 계정 한도를 가져온다. 이 하트비트는 Hyperdrive의 캐싱 계층이나 Postgres 읽기 복제본을 통해 제공되며, Workers KV 데이터가 실제 상태를 반영하도록 보장하는 자가 수정 메커니즘으로 작동한다. 이는 시스템의 일관성을 유지하는 데 중요한 역할을 한다.

쿼리 실행 경로 최적화

D1의 쿼리 엔드포인트는 Postgres나 다른 중앙 집중식 단일 리전 구성 요소와의 통신을 피하도록 설계되었다. HTTP API를 통한 쿼리 요청은 Edge API Worker를 거쳐 D1 Durable Object로 직접 전달된다. Edge API Worker는 인증, 권한 부여, 속도 제한, 요청 유효성 검사 등을 수행하며, Eyeball Worker는 D1 바인딩을 통해 전달된 인코딩된 정보를 검증하고 쿼리 요청을 Durable Object로 전달한다.

Edge API Worker는 Workers KV에서 D1 UUID와 데이터베이스 메타데이터 매핑을 로드하려고 시도하고, 실패 시 Hyperdrive를 통해 Postgres 복제본에서 읽는다. Durable Object ID를 이름으로 사용하지 않고 newUniqueId()를 사용하는 것은 쿼리 요청 시 중앙 매핑 조회 왕복을 피하기 위함이다. Workers KV는 내구성 있는 데이터 저장소 역할을 하여, 엣지 캐시에서 항목이 사라져도 Postgres 대신 KV 자체 스토리지에서 읽어 데이터 플레인에서 Postgres를 제외한다. 사용자 Worker의 D1 바인딩을 통한 쿼리 요청은 D1 UUID 매핑 메타데이터를 확인할 필요 없이 Eyeball Worker와 Durable Object로 직접 전달되어 빠른 처리를 가능하게 한다.

사용량 제한 및 청구 시스템

D1은 무료 플랜에서 계정당 5GB, 유료 플랜에서 1TB의 스토리지 제한을 적용한다. 각 Durable Object는 스토리지 사용량 업데이트를 Kafka와 유사한 큐에 게시하여 비동기적으로 처리한다. 큐 소비자는 각 데이터베이스의 최신 크기를 Postgres 테이블에 기록하며, 계정별 총 스토리지 사용량을 미리 계산하기 위해 `account_database_stats` 테이블을 사용한다. `account_database_stats_changes` 테이블은 변경 사항의 로그 역할을 하며, 스케줄링된 작업이 매초 이 테이블의 업데이트를 집계하여 `account_database_stats`를 업데이트한다. 이 방식은 쓰기 경합을 피하고, 계정당 수백만 개의 데이터베이스로 확장할 수 있도록 한다.

각 D1 Durable Object는 주기적인 하트비트를 통해 계정의 사용량을 검색하고, 한도를 초과하면 데이터베이스 크기를 증가시키는 모든 쓰기를 금지한다. Hyperdrive의 캐시를 사용하여 계정 ID를 유일한 매개변수로 사용함으로써, 해당 계정의 모든 데이터베이스가 동일한 캐시 값을 공유하도록 한다. 스토리지 사용량 정보는 주기적으로 ClickHouse 클러스터에 스냅샷되어 기록 및 청구 목적으로 사용된다.

D1은 무료 플랜 고객에게 일일 실행 사용량(읽기/쓰기 행 수) 제한도 적용한다. Durable Object에서 SQL 쿼리가 실행될 때 읽고 쓰는 행 수를 추적하고, 사용량 이벤트를 ClickHouse 클러스터에 게시한다. 중앙 구성 요소인 'Limiter'는 ClickHouse에서 일일 사용량 이벤트를 주기적으로 쿼리하여 한도를 초과한 계정을 식별한다. 한도를 초과한 계정은 이메일로 통지되고, Quicksilver(클라우드플레어의 전역 분산 키-값 저장소)에 만료일이 있는 키가 설정된다. 각 D1 Durable Object는 엣지에서 Quicksilver를 주기적으로 확인하여 계정이 제한되었는지 확인하고, 제한된 경우 제한이 해제될 때까지 쿼리 실행을 거부한다. 이 패턴은 Postgres에 부하를 주지 않고, 분석 쿼리에 ClickHouse를 활용하는 효율적인 방식이다.

개발자 영향 및 제약 사항

개발자는 D1을 사용하여 사용자, 애플리케이션, 미리보기 환경, 테넌트당 하나의 데이터베이스를 빠르고 비용 효율적이며 안정적으로 생성할 수 있다. D1은 ChatGPT Sites와 같은 플랫폼에서 사용자에게 맞춤형 지표, 리더보드, 댓글과 같은 기능을 추가할 수 있는 간단하고 확장 가능한 방법을 제공한다. 클라우드플레어 개발자 플랫폼에서 애플리케이션을 구축하는 개발자는 D1 아키텍처에서 사용된 패턴과 트레이드오프를 자신의 애플리케이션 구축에 활용할 수 있다.

D1은 무료 플랜에서 계정당 5GB, 유료 플랜에서 1TB의 스토리지 제한이 있으며, 무료 플랜 고객에게는 일일 실행 사용량 제한이 적용된다. 데이터베이스 생성 시 전체 흐름을 Postgres 트랜잭션 내에서 실행할 수 없는 것은 확장성 문제 때문이다. 스토리지 사용량 총계는 최종적으로 일관성을 유지하며, 사용량 제한 적용은 사용량 변화에 대한 반응 속도가 약간 느릴 수 있다. Workers KV는 내구성 있는 데이터 저장소이지만, 일관된 읽기(consistent read)를 제공하지 않으므로 Durable Object가 Workers KV 항목에 대한 쓰기의 직렬화 지점 역할을 한다.

데빈은 실제 기자가 아닌 AI 기술 에디터입니다. 출처의 공개 기사 본문 또는 RSS 제공 정보에서 사실을 추려 배경과 기술적 영향을 독립적인 한국어 기사로 재구성합니다. 직접 취재한 기사나 원문 전문의 번역·재게시가 아닙니다.

출처 · 원문 확인

Cloudflare Blog · David Laban

Under the hood, off the hot path: how D1 scales to millions of databases

원문 발행: 2026-10-14 01:20:18

원문과 이미지의 권리는 해당 권리자에게 있습니다. 정정·게재 중단 요청은 문의 안내를 이용해 주세요.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

댓글을 남기려면 로그인이 필요합니다.

← 전체 소식 개발 도구 둘러보기