Prisma๋ฅผ ์œ„ํ•œ Drizzle ํ™•์žฅ

Prisma๊ฐ€ ์žˆ๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๊ณ  Drizzle์„ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์ ์ง„์ ์œผ๋กœ ๋„์ž…ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, Prisma ํด๋ผ์ด์–ธํŠธ์— Drizzle API๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ผ๊ธ‰ ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉด์„œ Prisma ์ฟผ๋ฆฌ์™€ ํ•จ๊ป˜ Drizzle์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์˜์กด์„ฑ ์„ค์น˜

Drizzle ์ž์ฒด์™€ Prisma ์Šคํ‚ค๋งˆ์—์„œ Drizzle ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ๊ธฐ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

npm
yarn
pnpm
bun
npm i drizzle-orm@latest
npm i -D drizzle-prisma-generator

Prisma ์Šคํ‚ค๋งˆ ์—…๋ฐ์ดํŠธ

Prisma ์Šคํ‚ค๋งˆ์— Drizzle ์ƒ์„ฑ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. output์€ ์ƒ์„ฑ๋œ Drizzle ์Šคํ‚ค๋งˆ TS ํŒŒ์ผ์ด ์ €์žฅ๋  ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

schema.prisma
generator client {
  provider = "prisma-client-js"
}

generator drizzle {
  provider = "drizzle-prisma-generator"
  output   = "./drizzle" // ์ƒ์„ฑ๋œ Drizzle ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•  ์œ„์น˜
}

// ๋‚˜๋จธ์ง€ Prisma ์Šคํ‚ค๋งˆ

datasource db {
  provider = "postgresql"
  url      = env("DB_URL")
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

...

Drizzle ์Šคํ‚ค๋งˆ ์ƒ์„ฑ

prisma generate

Prisma ํด๋ผ์ด์–ธํŠธ์— Drizzle ํ™•์žฅ ์ถ”๊ฐ€

PostgreSQL
MySQL
SQLite
import { PrismaClient } from '@prisma/client';
import { drizzle } from 'drizzle-orm/prisma/pg';

const prisma = new PrismaClient().$extends(drizzle());

prisma.$drizzle๋ฅผ ํ†ตํ•ด Drizzle ์ฟผ๋ฆฌ ์‹คํ–‰ โœจ

Drizzle ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Drizzle ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๊ธฐ ์„ค์ •์—์„œ ์ง€์ •ํ•œ ์ถœ๋ ฅ ๊ฒฝ๋กœ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { User } from './drizzle';

await prisma.$drizzle.insert().into(User).values({ email: 'sorenbs@drizzle.team', name: 'Sรธren' });
const users = await prisma.$drizzle.select().from(User);

์ œํ•œ ์‚ฌํ•ญ