← 블로그 목록

Cloudflare D1 + Drizzle ORM으로 Edge 데이터베이스 구축

서버리스 환경에서 SQL 데이터베이스를 사용하는 방법. D1과 Drizzle ORM 조합의 장점과 실전 팁.

Cloudflare D1Drizzle서버리스

D1이란?

Cloudflare D1은 SQLite 기반의 서버리스 데이터베이스입니다. Workers/Pages에서 직접 접근하며, 글로벌 읽기 복제를 지원합니다.

Drizzle ORM 선택 이유

- TypeScript 퍼스트: 스키마 정의부터 쿼리까지 완전 타입 안전

- 경량: 번들 사이즈가 작아 Edge 환경에 적합

- D1 네이티브 지원

스키마 정의

import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";

export const projects = sqliteTable("projects", {
  id: integer("id").primaryKey({ autoIncrement: true }),
  name: text("name").notNull(),
  client: text("client").notNull(),
  status: text("status").default("진행중"),
  createdAt: text("created_at").default("CURRENT_TIMESTAMP"),
});

API 라우트에서 사용

import { drizzle } from "drizzle-orm/d1";
import { getRequestContext } from "@cloudflare/next-on-pages";

export function db() {
  const { env } = getRequestContext();
  return drizzle(env.DB);
}

마이그레이션

npx drizzle-kit generate:sqlite
npx wrangler d1 migrations apply DB_NAME

주의사항

1. **쓰기 제한**: 무료 티어 하루 10만 행 쓰기 제한

2. **트랜잭션**: D1은 단일 쿼리 트랜잭션만 지원 (batch 사용)

3. **로컬 개발**: `wrangler dev --local`로 로컬 SQLite 사용 가능

결론

소규모 프로젝트에서 별도 DB 서버 없이 SQL을 쓸 수 있는 가장 실용적인 선택입니다.