~/VibeHandbook
$39

Cloudflare

developers.cloudflare.com

D1

무엇인가

D1은 SQLite 위에 구축된 Cloudflare의 서버리스 SQL 데이터베이스다. 데이터베이스를 만들어 Worker나 Pages 프로젝트에 바인딩하고, 작은 JavaScript API를 통해 평범한 SQL로 질의한다. 크기를 정할 서버도, 관리할 커넥션 풀도 없다 — Cloudflare가 스토리지·복제·확장을 처리하고, 당신은 읽고 쓴 행(row)에 대해 비용을 낸다.

강점

  • 진짜 SQL (SQLite 방언) — 익숙한 SELECT, JOIN, 트랜잭션, 인덱스.
  • 서버리스: 프로비저닝 없음, 커넥션 한도 없음, 0까지 확장 축소.
  • 단일 바인딩으로 Workers 및 Pages와 긴밀하게 통합된다.
  • 읽기 복제가 사용자 근처에 복사본을 배치해 저지연 읽기를 제공한다.
  • 일반적인 앱 워크로드에는 저렴하며, 쓸 만한 무료 티어가 있다.

트레이드오프

  • SQLite 의미론: 거대한 데이터셋과 매우 무거운 쓰기 동시성은 강점 영역이 아니다.
  • 데이터베이스당 크기 한도가 있어 매우 큰 데이터는 샤딩이나 R2가 필요할 수 있다.
  • Postgres/MySQL보다 새로워서 툴링과 생태계가 아직 성숙해 가는 중이다.
  • 엣지에서 접근하는 것이 가장 좋다. Cloudflare 외부에서 쓰는 것은 덜 자연스럽다.

언제 쓰나

Cloudflare에 호스팅된 프로젝트의 앱 데이터에 D1을 골라라: 사용자 레코드, 콘텐츠, 설정, 세션 메타데이터 — 관계형 모델에 맞고 Workers나 Pages 앱 옆에 사는 모든 것.

바이브 코딩 적합성

에이전트가 이미 Workers 위에서 빌드하고 있다면 D1은 강력한 기본값이다. 데이터베이스, 스키마, 쿼리가 모두 같은 프로젝트 안에 살기 때문이다. 에이전트에게 마이그레이션을 버전 관리되는 .sql 파일에 보관하고 Wrangler로 적용하도록 요청해, 스키마가 재현 가능하도록 하라. 바인딩 덕분에 핸들러 안에서 질의는 한 줄짜리가 된다.

# wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "app-db"
database_id = "your-d1-id"
# Create a DB and run a migration
npx wrangler d1 create app-db
npx wrangler d1 execute app-db --file=./schema.sql