본문 바로가기
JavaScript/Next

Drizzle ORM

by curious week 2025. 2. 12.

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