Drizzle ORM이란

Drizzle ORM: SQL의 직관성과 TypeScript의 안전성을 결합한 차세대 ORM
최근 TypeScript 생태계에서 가장 뜨거운 관심을 받고 있는 ORM을 꼽으라면 단연 Drizzle ORM입니다. "SQL처럼 보이고, TypeScript처럼 동작한다"는 철학 아래 개발된 Drizzle ORM은 기존 Prisma나 TypeORM이 가졌던 한계점을 극복하며 급부상하고 있습니다.
오늘은 Drizzle ORM이 왜 특별한지, 그리고 실제 프로젝트에서 어떻게 활용할 수 있는지 상세히 알아보겠습니다.
공식 사이트
Drizzle ORM - next gen TypeScript ORM.
Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.
orm.drizzle.team
1. Drizzle ORM이란 무엇인가?
Drizzle ORM은 TypeScript 환경에 최적화된 '헤드리스(Headless)' ORM입니다. 여기서 헤드리스란 특정 데이터베이스 엔진에 종속되지 않으면서도, 런타임 오버헤드가 거의 없는 가벼운 라이브러리임을 의미합니다.
기존의 Prisma가 자체적인 DSL(Prisma Schema)을 사용하여 별도의 코드 생성(Generate) 단계를 거쳐야 했던 것과 달리, Drizzle은 순수 TypeScript만을 사용하여 스키마를 정의합니다. 즉, 여러분이 작성한 코드가 곧 타입이 되고 쿼리가 됩니다.
2. Drizzle ORM의 핵심 장점
① 압도적인 성능 (Runtime Overhead Zero)
Drizzle은 런타임에 무거운 라이브러리를 실행하지 않습니다. 작성된 쿼리는 즉시 최적화된 SQL 문법으로 변환되어 전송되므로, SELECT * 수준의 간단한 쿼리부터 복잡한 Join까지 원시 SQL(Raw SQL)에 가까운 속도를 자랑합니다.
② 완전한 타입 안전성 (Type Safety)
코드 생성 단계 없이도 선언한 스키마를 기반으로 결괏값의 타입을 완벽하게 추론합니다. 이는 개발 과정에서 발생할 수 있는 런타임 에러를 획기적으로 줄여주며, 강력한 자동 완성 기능을 제공합니다.
③ SQL 친화적인 설계
SQL 문법과 매우 유사한 API를 제공합니다. SQL에 익숙한 개발자라면 별도의 학습 없이 바로 사용할 수 있으며, 복잡한 쿼리를 ORM의 한계 때문에 포기하고 생쿼리를 작성해야 했던 고충을 해결해 줍니다.
④ 유연한 환경 지원 (Edge Ready)
Node.js는 물론이고 Bun, Deno, Cloudflare Workers, Vercel Edge Functions 등 모든 환경에서 동작합니다. 특히 패키지 사이즈가 매우 작아 서버리스(Serverless) 환경에서 콜드 스타트(Cold Start) 문제를 최소화할 수 있습니다.
3. 실전 사용법: 스키마 정의부터 쿼리까지
3.1 테이블 스키마 정의 (schema.ts)
TypeScript 문법을 그대로 사용하여 데이터베이스 테이블을 정의합니다.
import { pgTable, serial, text, varchar, timestamp } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: serial("id").primaryKey(),
name: text("name").notNull(),
email: varchar("email", { length: 256 }).unique().notNull(),
createdAt: timestamp("created_at").defaultNow(),
});
export const posts = pgTable("posts", {
id: serial("id").primaryKey(),
title: varchar("title", { length: 256 }).notNull(),
content: text("content"),
authorId: serial("author_id").references(() => users.id),
});
3.2 데이터 조작 (CRUD)
정의된 스키마를 바탕으로 데이터를 자유롭게 조작할 수 있습니다.
import { db } from "./db";
import { users, posts } from "./schema";
import { eq, and, like } from "drizzle-orm";
// 1. 데이터 삽입 (Insert)
await db.insert(users).values({
name: "김성수",
email: "kss@example.com"
});
// 2. 복잡한 조건 조회 (Select with Join)
const result = await db.select({
userName: users.name,
postTitle: posts.title
})
.from(posts)
.leftJoin(users, eq(posts.authorId, users.id))
.where(and(
like(posts.title, "%Next.js%"),
eq(users.id, 1)
));
4. Drizzle Kit: 마이그레이션 도구
Drizzle의 진가는 Drizzle Kit이라는 CLI 도구에서 발휘됩니다. 스키마 파일(schema.ts)의 변경 사항을 감지하여 자동으로 SQL 마이그레이션 파일을 생성해 줍니다.
drizzle-kit generate: 스키마 변경 사항을 바탕으로.sql파일 생성drizzle-kit push: 로컬 DB에 즉시 반영 (개발 단계에서 매우 유용)drizzle-kit studio: 브라우저에서 DB 데이터를 관리할 수 있는 GUI 제공
5. 공식 문서 및 참고 자료
Drizzle ORM은 커뮤니티와 문서화가 매우 잘 되어 있습니다. 더 깊은 내용을 학습하시려면 아래 공식 링크를 참고하세요.
6. 결론
서버리스 환경에서 빠른 속도가 필요하거나, SQL의 제어권을 유지하면서 TypeScript의 타입 안정성을 챙기고 싶은 프로젝트라면 Drizzle ORM이 정답입니다. Prisma의 무거움이나 TypeORM의 복잡함에 지쳤다면, 지금 바로 Drizzle로 전환해 보시는 것을 강력히 추천드립니다.
추천 글
https://velog.io/@hunter_joe99/Drizzle-ORM
Drizzle - ORM
아래 본문은 참고자료를 chat gpt를 통해 번역 + 정리한 글 입니다. 보다 정확한 정보는 공식문서와 참고자료 링크를 통해 확인부탁드립니다. 웹 개발자로서 SQL 데이터베이스를 다룬다면, TypeScript
velog.io
https://velog.io/@starmooncloudk/NestJs-drizzle-orm-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
[NestJs] drizzle-orm 적용해보기
개발을 시작할 때 많은 것을 고민한다. 그 중 새로운 기술을 접하게 되었을 때 가장 고민되는것 같다. 항상 새로운 기술들은 나오고, 그 전에 사용하던 기술들은 항상 다 써보지도 못하고 적응할
velog.io