Drizzle <> Cloudflare D1

This guide assumes familiarity with:

**๊ณต์‹ ์›น์‚ฌ์ดํŠธ**์— ๋”ฐ๋ฅด๋ฉด, D1์€ Cloudflare์˜ ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.

Drizzle ORM์€ Cloudflare D1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ Cloudflare Workers ํ™˜๊ฒฝ์„ ์™„์ „ํžˆ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ €ํฌ๋Š” SQL ๋ฐฉ์–ธ๊ณผ ๋ฐฉ์–ธ๋ณ„ ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ๊ตฌ๋ฌธ์„ ์ฑ„ํƒํ•˜๊ณ  ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” SQLite์™€ ์œ ์‚ฌํ•œ all, get, values ๋ฐ run ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ๊ตฌ๋ฌธ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

Cloudflare D1 ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด **๊ณต์‹ ๋ฌธ์„œ**๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

1๋‹จ๊ณ„ - ํŒจํ‚ค์ง€ ์„ค์น˜

npm
yarn
pnpm
bun
npm i drizzle-orm
npm i -D drizzle-kit

2๋‹จ๊ณ„ - ๋“œ๋ผ์ด๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฐ ์ฟผ๋ฆฌ ์‹คํ–‰

D1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•ด wrangler.json ๋˜๋Š” wrangler.toml ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

wrangler.json
wrangler.toml
{
    "name": "YOUR_PROJECT_NAME",
    "main": "src/index.ts",
    "compatibility_date": "2024-09-26",
    "compatibility_flags": [
        "nodejs_compat"
    ],
    "d1_databases": [
        {
            "binding": "BINDING_NAME",
            "database_name": "YOUR_DB_NAME",
            "database_id": "YOUR_DB_ID",
            "migrations_dir": "drizzle/migrations"
        }
    ]
}

์ฒซ D1 ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”:

import { drizzle } from 'drizzle-orm/d1';

export interface Env {
  <BINDING_NAME>: D1Database;
}

export default {
  async fetch(request: Request, env: Env) {
    const db = drizzle(env.<BINDING_NAME>);
    const result = await db.select().from(users).all()
    return Response.json(result);
  },
};

๋‹ค์Œ ๋‹จ๊ณ„