Drizzle <> Supabase

This guide assumes familiarity with:

**๊ณต์‹ ์›น์‚ฌ์ดํŠธ**์— ๋”ฐ๋ฅด๋ฉด, Supabase๋Š” ์ตœ์†Œํ•œ์˜ ๊ตฌ์„ฑ์œผ๋กœ ์•ˆ์ „ํ•˜๊ณ  ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚œ Postgres ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค Firebase ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค.

๊ณต์‹ Supabase + Drizzle ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

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

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

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

index.ts
import { drizzle } from 'drizzle-orm/postgres-js'

const db = drizzle(process.env.DATABASE_URL);

const allUsers = await db.select().from(...);

๊ธฐ์กด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ:

index.ts
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'

const client = postgres(process.env.DATABASE_URL)
const db = drizzle({ client });

const allUsers = await db.select().from(...);

Supabase๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ํ’€๋ง์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ (์—ฌ๊ธฐ์— ์„ค๋ช…๋จ) โ€œTransactionโ€ ํ’€ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, prepared statement๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ prepare๋ฅผ ๋„๋„๋ก ํ•˜์„ธ์š”.

index.ts
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'

// "Transaction" ํ’€ ๋ชจ๋“œ์—์„œ๋Š” prefetch๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค
const client = postgres(process.env.DATABASE_URL, { prepare: false })
const db = drizzle({ client });

const allUsers = await db.select().from(...);

์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ๋Š” Connection Pooler๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ , ์žฅ๊ธฐ ์‹คํ–‰ ์„œ๋ฒ„์—์„œ๋Š” Direct Connection์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„๋Š”?