TechFeedTechFeed
Backend

드리즐 ORM, Prisma, 슈퍼베이스 | 1인 개발자가 ORM 고를 때 어디서 갈리나?

드리즐은 TypeScript로 스키마를 직접 쓰고 번들 크기가 작다. Prisma는 .prisma 파일 중심이고 자동 타입 생성이 편하다. Next.js 15 + 슈퍼베이스 환경에서 설치 방법, 마이그레이션 흐름, 서버리스 번들 크기 차이를 비교하고 1인 개발자가 어느 시점에 무엇을 쓰면 되는지 정리한다.

by

ORM을 새로 선택할 때 드리즐(Drizzle ORM)이 자주 언급됩니다. 저는 슈퍼베이스와 연결된 Next.js 프로젝트 여러 곳에서 Prisma를 쓰다가 일부는 드리즐로 옮겼습니다. 번들 크기, 마이그레이션 흐름, 타입 생성 방식 세 가지가 실제로 선택을 가르는 지점입니다.


이 글은 드리즐과 Prisma를 Next.js 15 + 슈퍼베이스 환경 기준으로 비교합니다. 설치 방법, 스키마 정의, 마이그레이션 흐름, 서버리스 환경에서의 번들 영향까지 정리합니다.


드리즐과 Prisma 핵심 차이 한눈에

두 도구는 방향이 다릅니다. Prisma는 .prisma 스키마 파일을 중심으로 타입과 클라이언트를 자동 생성합니다. 드리즐은 TypeScript 파일로 스키마를 직접 쓰고 SQL에 가까운 방식으로 쿼리를 작성합니다.


항목드리즐 ORMPrisma
스키마 언어TypeScript 파일.prisma 파일 (자체 언어)
번들 크기~30KB (코어 + 드라이버)~100KB+ (쿼리 엔진 포함)
마이그레이션drizzle-kit generate → migrateprisma migrate dev
쿼리 방식SQL 가까운 빌더Prisma Client (객체 기반)
타입 생성스키마 정의에서 자동 추론prisma generate로 별도 생성
Edge 런타임지원 (Neon 드라이버 등)제한적 (Prisma Accelerate 필요)
학습 곡선SQL 아는 사람에게 쉬움SQL 몰라도 쓰기 쉬움

드리즐 ORM과 Prisma 스키마 파일을 나란히 보여주는 코드 에디터 화면
드리즐은 TypeScript로 스키마를 정의하고, Prisma는 .prisma 전용 언어를 쓴다

Next.js + 슈퍼베이스에서 드리즐 설치하기

드리즐은 drizzle-orm과 데이터베이스 드라이버를 각각 설치합니다. 슈퍼베이스(PostgreSQL)에 연결하려면 postgres 패키지를 씁니다.


드리즐 설치와 슈퍼베이스 연결 (Next.js 15)
# 설치 npm install drizzle-orm postgres npm install -D drizzle-kit # db/schema.ts import { pgTable, text, timestamp, uuid } from 'drizzle-orm/pg-core' export const posts = pgTable('posts', { id: uuid('id').primaryKey().defaultRandom(), title: text('title').notNull(), slug: text('slug').notNull().unique(), createdAt: timestamp('created_at', { withTimezone: true }).defaultNow(), }) # db/index.ts import { drizzle } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import * as schema from './schema' const client = postgres(process.env.DATABASE_URL!) export const db = drizzle(client, { schema }) # drizzle.config.ts import { defineConfig } from 'drizzle-kit' export default defineConfig({ schema: './db/schema.ts', out: './drizzle', dialect: 'postgresql', dbCredentials: { url: process.env.DATABASE_URL! }, })

슈퍼베이스 서버리스 환경에서는 postgres 드라이버의 커넥션 수를 제한합니다. postgres(url, { max: 1 })처럼 옵션을 줍니다. 슈퍼베이스 connection pooler(포트 6543)를 쓰거나, Neon serverless 드라이버를 쓰면 HTTP 기반으로 연결해 커넥션 수 걱정을 줄일 수 있습니다.


Prisma 설치와 스키마 흐름

Prisma는 prisma init으로 시작합니다. prisma/schema.prisma 파일에 데이터소스와 모델을 정의합니다.


Prisma 설치와 스키마 정의
# 설치 npm install prisma @prisma/client npx prisma init # prisma/schema.prisma datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model Post { id String @id @default(uuid()) title String slug String @unique createdAt DateTime @default(now()) @map("created_at") @@map("posts") } # 타입 생성 (스키마 변경할 때마다) npx prisma generate # 마이그레이션 생성 + 적용 npx prisma migrate dev --name add_posts_table # 슈퍼베이스 + 서버리스: DATABASE_URL에 ?pgbouncer=true 추가 # DIRECT_URL도 별도 설정 필요 (마이그레이션용)

마이그레이션 파일을 어떻게 다르게 관리하나

마이그레이션 흐름은 두 도구에서 가장 체감되는 차이입니다.


Prismaprisma migrate dev 하나로 SQL 파일 생성과 DB 적용이 동시에 됩니다. prisma/migrations/에 날짜 기반 폴더로 SQL이 쌓입니다. 마이그레이션 파일을 직접 수정하면 안 되고, 수정이 필요하면 새 마이그레이션을 만들어야 합니다.


드리즐은 두 단계가 분리됩니다. drizzle-kit generate로 SQL 파일을 먼저 만들고, drizzle-kit migrate로 DB에 적용합니다. SQL 파일을 보고 수정한 뒤 적용할 수 있습니다. 개발 중 빠르게 반영하려면 drizzle-kit push(마이그레이션 파일 없이 즉시 스키마 동기화)를 씁니다.


드리즐과 Prisma의 마이그레이션 폴더 구조를 비교한 화면
두 도구 모두 SQL 마이그레이션 파일을 생성하지만 관리 방식이 다르다

서버리스 환경에서 번들 크기가 왜 중요한가

Vercel 같은 서버리스 환경에서 번들 크기는 콜드 스타트 시간에 영향을 줍니다.


Prisma는 런타임에 쿼리 엔진(Rust 바이너리, 디스크 기준 5~30MB)이 필요합니다. Vercel 배포 시 람다 함수 패키지 크기를 늘립니다. Prisma Accelerate(유료 서비스)를 쓰면 이 문제를 우회할 수 있습니다. Vercel 무료 플랜의 함수 크기 제한(250MB)에 걸리는 경우도 있습니다.


드리즐은 쿼리 엔진이 없고 postgres 드라이버에 직접 쿼리를 보냅니다. 번들 크기가 Prisma 대비 작고 서버리스 환경에서 더 가볍습니다. Edge 런타임(Vercel Edge, Cloudflare Workers)에서도 drizzle-orm/neon-http 드라이버로 쓸 수 있습니다.


어느 상황에서 무엇을 선택하나

💡 드리즐이 맞는 경우 | SQL을 직접 쓰는 게 불편하지 않고, 번들 크기를 줄이고 싶고, Edge Runtime이나 서버리스 환경에서 쓸 때. 슈퍼베이스와 연결하면서 Prisma 쿼리 엔진 무게를 피하고 싶을 때. 마이그레이션 SQL 파일을 직접 확인하고 싶을 때.


💡 Prisma가 맞는 경우 | SQL에 익숙하지 않고 직관적인 객체 방식을 선호할 때. 팀에서 공통 스키마 파일(.prisma)을 기준으로 커뮤니케이션할 때. Prisma Studio(GUI 뷰어)가 필요할 때. 복잡한 관계(relations)와 eager loading을 쉽게 쓰고 싶을 때.


⚠️ 기존 Prisma 프로젝트 전환 시 주의 | Prisma에서 드리즐로 옮기면 스키마와 쿼리를 전부 다시 써야 합니다. 규모가 크면 새 프로젝트에서 드리즐로 시작하고, 기존 프로젝트는 Prisma를 유지하는 게 현실적입니다.


서버리스 환경에서 데이터베이스 연결 구조를 나타낸 다이어그램
서버리스에서는 매 요청마다 DB 연결을 맺는 비용이 있어 ORM 선택이 영향을 준다

자주 묻는 것들

슈퍼베이스와 연결할 때 direct URL과 pooler URL 중 어느 걸 써야 하나?

서버리스 Next.js에서는 슈퍼베이스 connection pooler(포트 6543)를 씁니다. 드리즐은 postgres 드라이버 옵션으로 max: 1을 줍니다. Prisma는 ?pgbouncer=true를 URL에 추가합니다. 마이그레이션 실행 시에는 direct URL(포트 5432)이 필요합니다. 두 URL을 환경변수로 분리해두는 게 일반적입니다.


드리즐에서 relation을 어떻게 쓰나?

스키마 파일에 relations()를 정의하고, 쿼리 시 db.query.posts.findMany({ with: { author: true } })처럼 씁니다. Prisma의 include와 비슷하지만, 드리즐 relational queries를 쓰려면 drizzle(client, { schema })에 스키마 객체를 넘겨줘야 합니다.


두 ORM 모두 트랜잭션을 지원하나?

지원합니다. 드리즐은 db.transaction(async (tx) => { ... }), Prisma는 prisma.$transaction(async (tx) => { ... })입니다. 서버리스 환경에서 긴 트랜잭션은 커넥션을 오래 잡아 풀 고갈 위험이 있습니다. 트랜잭션은 최대한 짧게 유지하세요.


드리즐에서 raw SQL을 쓸 수 있나?

쓸 수 있습니다. 드리즐의 sql 태그 템플릿으로 파라미터를 자동 이스케이프하면서 raw SQL을 실행합니다. ORM 쿼리로 표현하기 어려운 복잡한 쿼리를 보완할 때 씁니다.


Prisma Studio 없이 드리즐에서 데이터를 GUI로 볼 수 있나?

드리즐에는 Drizzle Studio가 있습니다. npx drizzle-kit studio로 실행하면 로컬에서 DB 내용을 브라우저로 볼 수 있습니다. Prisma Studio와 비슷한 기능입니다.


드리즐 ORMPrisma슈퍼베이스ORMNext.js백엔드PostgreSQL마이그레이션TypeScript서버리스개발자번들

함께 보면 좋은 문제 해결

EXPLORE / Backend

이어서 읽어보기

전체 토픽 둘러보기