Prisma๋ฅผ ์ํ Drizzle ํ์ฅ
Prisma๊ฐ ์๋ ๊ธฐ์กด ํ๋ก์ ํธ๊ฐ ์๊ณ Drizzle์ ์๋ํ๊ฑฐ๋ ์ ์ง์ ์ผ๋ก ๋์ ํ๋ ค๋ ๊ฒฝ์ฐ, Prisma ํด๋ผ์ด์ธํธ์ Drizzle API๋ฅผ ์ถ๊ฐํ๋ ์ผ๊ธ ํ์ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๋ฉด์ Prisma ์ฟผ๋ฆฌ์ ํจ๊ป Drizzle์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
์์กด์ฑ ์ค์น
Drizzle ์์ฒด์ Prisma ์คํค๋ง์์ Drizzle ์คํค๋ง๋ฅผ ์์ฑํ๋ ์์ฑ๊ธฐ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
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 generatePrisma ํด๋ผ์ด์ธํธ์ Drizzle ํ์ฅ ์ถ๊ฐ
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())๋ ์์ ๋์ผํ ์ด์ ๋ก ์ง์๋์ง ์์ต๋๋ค. - ์ค๋น๋ ๋ฌธ ์ง์์ ์ ํ์ ์
๋๋ค -
.prepare()๋ ์ค๋น๋ ์ฟผ๋ฆฌ๋ฅผ ์ํ Prisma API๊ฐ ์๊ธฐ ๋๋ฌธ์ Drizzle ์ธก์์๋ง SQL ์ฟผ๋ฆฌ๋ฅผ ๋น๋ํฉ๋๋ค.