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 파일이 저장될 경로입니다.
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 클라이언트가 생성되고, 데이터베이스 스키마에 기반한 타입 안전한 쿼리 빌더를 사용할 수 있습니다. 이 명령어는 프로젝트 루트 디렉토리에서 실행해야 합니다.
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);
제한 사항
- 관계형 쿼리는 Prisma 드라이버 제한 사항으로 인해 지원되지 않습니다. 이로 인해 Prisma는 관계형 쿼리가 작동하기 위해 필요한 배열 형식으로 쿼리 결과를 반환할 수 없습니다.
- SQLite에서는
.values()
(예:await db.select().from(table).values()
)가 위와 같은 이유로 지원되지 않습니다. - 준비된 문장(Prepared statements) 지원은 제한적입니다. Prisma가 준비된 쿼리를 위한 API를 제공하지 않기 때문에,
.prepare()
는 Drizzle 측에서만 SQL 쿼리를 빌드합니다.