Drizzle ORM(https://orm.drizzle.team/)이란?
Drizzle ORM - next gen TypeScript ORM.
Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.
orm.drizzle.team
**TypeScript 기반의 초경량 SQL ORM(Object-Relational Mapping)**이야.
👉 Prisma, TypeORM보다 가볍고 빠르면서, TypeScript 타입 안정성이 뛰어남!
👉 Next.js, Neon, PlanetScale 등 서버리스 환경과 궁합이 좋음.
- 초경량 ORM → Prisma보다 가볍고 빠름
- TypeScript 기반 → 완벽한 타입 안정성 제공
- SQL-like 문법 지원 → 복잡한 쿼리도 쉽게 작성 가능
- Prisma보다 간단한 마이그레이션 시스템 제공
- PostgreSQL, MySQL, SQLite, Neon 지원
- 서버리스 데이터베이스 (Neon, PlanetScale)와 완벽한 조합

Drizzle ORM 사용하기

Neon과 사용하기 위해서 Neon을 선택했다. neon 선택 시 neon-serverless driver를 사용한다.
Step 1 - Install @neondatabase/serverless package
npm i drizzle-orm @neondatabase/serverless dotenv
npm i -D drizzle-kit tsx
// bun 사용 시
bun add drizzle-orm @neondatabase/serverless dotenv
bun add -D drizzle-kit tsx
Step 2 - Setup connection variables
https://curiousweek.tistory.com/69
Neon
Neon(https://neon.tech/)이란? Neon Serverless Postgres — Ship fasterThe database you love, on a serverless platform designed to help you build reliable and scalable applications faster.neon.techNeon은 서버리스 PostgreSQL 데이터베이스 서비
curiousweek.tistory.com
Neon으로 DATABASE_URL= 생성.
Step 3 - Connect Drizzle ORM to the database
// src/db/index.ts
import { drizzle } from 'drizzle-orm/neon-http';
const db = drizzle(process.env.DATABASE_URL!);
Step 4 - Create a table
// src/db/schema.ts
import { integer, pgTable, varchar } from "drizzle-orm/pg-core";
export const usersTable = pgTable("users", {
id: integer().primaryKey().generatedAlwaysAsIdentity(),
name: varchar({ length: 255 }).notNull(),
age: integer().notNull(),
email: varchar({ length: 255 }).notNull().unique(),
});
Step 5 - Setup Drizzle config file
drizzle.config.ts: Drizzle kit에서 사용되는 구성 파일로 , 데이터베이스 연결, 마이그레이션 폴더 및 스키마 파일에 대한 모든 정보를 포함.
// 프로젝트 루트/drizzle.config.ts
import 'dotenv/config';
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
out: './drizzle',
schema: './src/db/schema.ts',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});
Step 6 - Applying changes to the database
변경 사항 적용
npx drizzle-kit push
// bun 사용 시
bunx drizzle-kit push
drizzle-kit studio
npx drizzle-kit studio
// bun 사용 시
bunx drizzle-kit studio
예시 데이터 넣어보기
// src/index.tsx
import 'dotenv/config';
import { drizzle } from 'drizzle-orm/neon-http';
import { eq } from 'drizzle-orm';
import { usersTable } from './db/schema';
const db = drizzle(process.env.DATABASE_URL!);
async function main() {
const user: typeof usersTable.$inferInsert = {
name: 'John',
age: 30,
email: 'john@example.com',
};
await db.insert(usersTable).values(user);
console.log('New user created!')
const users = await db.select().from(usersTable);
console.log('Getting all users from the database: ', users)
/*
const users: {
id: number;
name: string;
age: number;
email: string;
}[]
*/
await db
.update(usersTable)
.set({
age: 31,
})
.where(eq(usersTable.email, user.email));
console.log('User info updated!')
await db.delete(usersTable).where(eq(usersTable.email, user.email));
console.log('User deleted!')
}
main();
적용하기
npx tsx src/index.ts
// bun 사용 시 (bunx 아님!)
bun tsx src/index.ts
'JavaScript > Next' 카테고리의 다른 글
| Upstash (1) | 2025.03.05 |
|---|---|
| Middleware 미들웨어 사용법 (0) | 2025.03.05 |
| Neon (0) | 2025.02.12 |
| Clerk (0) | 2025.02.12 |
| ShadCN/UI & Lucide React 사용하기 (0) | 2025.02.12 |