Drizzle는 neon-http와 neon-websockets 드라이버를 통해 Neon 연결을 기본적으로 지원합니다. 이 드라이버들은 내부적으로 neon-serverless 드라이버를 사용합니다.
neon-http와 neon-websockets 드라이버를 사용하면 서버리스 환경에서 TCP 대신 HTTP 또는 WebSockets를 통해 Neon 데이터베이스에 접근할 수 있습니다.
단일 비대화형 트랜잭션의 경우 HTTP를 통한 쿼리가 더 빠릅니다.
세션이나 대화형 트랜잭션 지원이 필요하거나, pg 드라이버와 완벽히 호환되는 대체재가 필요하다면 WebSocket 기반의 neon-serverless 드라이버를 사용할 수 있습니다. Postgres를 통해 Neon 데이터베이스에 직접 연결할 수도 있습니다.
Cloudflare Worker에서 Neon Serverless 드라이버와 Drizzle ORM을 사용하는 예제는 **여기**를 참고하세요.
서버 환경에서 Neon을 사용하려면 Neon의 **공식 Node.js 문서**에 설명된 PostgresJS 드라이버를 사용할 수 있습니다. 자세한 내용은 **문서**를 확인하세요.
1단계 - 패키지 설치
npm
yarn
pnpm
bun
npm i drizzle-orm @neondatabase/serverlessnpm i -D drizzle-kit
bun add drizzle-orm @neondatabase/serverlessbun add -D drizzle-kit
위 명령어를 사용하여 필요한 패키지를 설치합니다. drizzle-orm과 @neondatabase/serverless는 프로젝트에 필수적인 패키지이며, drizzle-kit는 개발 환경에서만 사용하는 개발 의존성 패키지입니다.
2단계 - 드라이버 초기화 및 쿼리 실행
Neon HTTP
Neon Websockets
node-postgres
postgres.js
import { drizzle } from 'drizzle-orm/neon-http';const db = drizzle(process.env.DATABASE_URL);const result = await db.execute('select 1');
import { drizzle } from 'drizzle-orm/neon-serverless';const db = drizzle(process.env.DATABASE_URL);const result = await db.execute('select 1');
// Node.js 환경에서는 'ws'와 'bufferutil' 패키지를 설치해야 함import { drizzle } from 'drizzle-orm/neon-serverless';import ws from 'ws';const db = drizzle({ connection: process.env.DATABASE_URL, ws: ws,});const result = await db.execute('select 1');
IMPORTANT
Node.js와 같이 WebSocket 전역 변수가 정의되지 않은 환경에서 WebSockets를 사용하려면 추가 설정이 필요합니다.
ws와 bufferutil 패키지를 프로젝트 의존성에 추가하고, Drizzle 설정에서 ws를 지정하세요.
// 'pg' 패키지를 설치해야 함import { drizzle } from 'drizzle-orm/node-postgres';const db = drizzle(process.env.DATABASE_URL);const result = await db.execute('select 1');
// 'postgres' 패키지를 설치해야 함import { drizzle } from 'drizzle-orm/postgres-js';const db = drizzle(process.env.DATABASE_URL);const result = await db.execute('select 1');
기존 드라이버를 제공해야 하는 경우:
Neon HTTP
Neon Websockets
node-postgres
postgres.js
import { neon } from '@neondatabase/serverless';import { drizzle } from 'drizzle-orm/neon-http';const sql = neon(process.env.DATABASE_URL!);const db = drizzle({ client: sql });const result = await db.execute('select 1');
import { Pool } from '@neondatabase/serverless';import { drizzle } from 'drizzle-orm/neon-serverless';const pool = new Pool({ connectionString: process.env.DATABASE_URL });const db = drizzle({ client: pool })const result = await db.execute('select 1');
// Node.js 환경에서는 'ws'와 'bufferutil' 패키지를 설치해야 함import { Pool, neonConfig } from '@neondatabase/serverless';import { drizzle } from 'drizzle-orm/neon-serverless';neonConfig.webSocketConstructor = ws;const pool = new Pool({ connectionString: process.env.DATABASE_URL });const db = drizzle({ client: pool })const result = await db.execute('select 1');
IMPORTANT
Node.js와 같이 WebSocket 전역 변수가 정의되지 않은 환경에서 WebSockets를 사용하려면 추가 설정이 필요합니다.
ws와 bufferutil 패키지를 프로젝트 의존성에 추가하고, Drizzle 설정에서 ws를 지정하세요.
// 'pg' 패키지를 설치해야 함import { pgTable, serial, text, varchar } from "drizzle-orm/pg-core";import { drizzle } from "drizzle-orm/node-postgres";import { Pool } from "pg";const pool = new Pool({ connectionString: process.env.DATABASE_URL,});const db = drizzle({ client: pool });const result = await db.execute('select 1');
// 'postgres' 패키지를 설치해야 함import { drizzle } from 'drizzle-orm/postgres-js';import postgres from 'postgres';const queryClient = postgres(process.env.DATABASE_URL);const db = drizzle({ client: queryClient });const result = await db.execute('select 1');