Drizzle와 SQLite 연동

Drizzle는 libsqlbetter-sqlite3 드라이버를 통해 SQLite 연결을 기본적으로 지원합니다.

libsqlbetter-sqlite3 드라이버를 사용하고 Drizzle ORM과 통합하면서 발견한 몇 가지 차이점이 있습니다. 예를 들어:

드라이버 수준에서는 두 드라이버 간에 큰 차이가 없지만, 주요 차이점은 libSQL이 SQLite 파일과 Turso 원격 데이터베이스 모두에 연결할 수 있다는 점입니다. LibSQL은 SQLite의 포크로, 표준 SQLite보다 더 많은 기능을 제공합니다. 예를 들면:

libsql

1단계 - 패키지 설치

다음 명령어를 사용하여 필요한 패키지를 설치합니다.

npm
yarn
pnpm
bun
npm i drizzle-orm @libsql/client
npm i -D drizzle-kit

2단계 - 드라이버 초기화

Drizzle는 모든 @libsql/client 드라이버 변형을 기본적으로 지원합니다:

@libsql/client기본적으로 node 모듈로 임포트되며, 번들러에서 target이나 platform이 설정되면 자동으로 web 모듈로 변경됩니다. 예를 들어, esbuild --platform=browser와 같은 설정이 적용됩니다.
@libsql/client/nodenode 호환 모듈로, :memory:, file, wss, http, turso 연결 프로토콜을 지원합니다.
@libsql/client/webnext, nuxt, astro와 같은 풀스택 웹 프레임워크를 위한 모듈입니다.
@libsql/client/httphttphttps 연결 프로토콜을 위한 모듈입니다.
@libsql/client/wswswss 연결 프로토콜을 위한 모듈입니다.
@libsql/client/sqlite3:memory:file 연결 프로토콜을 위한 모듈입니다.
@libsql/client-wasmWASM을 위한 별도의 실험적 패키지입니다.

기본
Node
HTTP
웹 소켓
WASM
import { drizzle } from 'drizzle-orm/libsql';

const db = drizzle({ connection: {
  url: process.env.DATABASE_URL, 
  authToken: process.env.DATABASE_AUTH_TOKEN 
}});

3단계 - 쿼리 만들기

libsql
libsql with config
import { drizzle } from 'drizzle-orm/libsql';

const db = drizzle(process.env.DATABASE_URL);
 
const result = await db.execute('select 1');

동기식 연결이 필요하다면, 추가 연결 API를 사용할 수 있습니다. 이때 드라이버 연결을 지정하고 Drizzle 인스턴스에 전달합니다.

import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';

const client = createClient({ url: process.env.DATABASE_URL, authToken: process.env.DATABASE_AUTH_TOKEN });
const db = drizzle(client);

const result = await db.execute('select 1');

better-sqlite3

1단계 - 패키지 설치

npm
yarn
pnpm
bun
npm i drizzle-orm better-sqlite3
npm i -D drizzle-kit @types/better-sqlite3

위 명령어를 사용하여 필요한 패키지를 설치합니다. drizzle-ormbetter-sqlite3는 프로젝트에 필수적인 패키지이며, drizzle-kit@types/better-sqlite3는 개발 환경에서 사용할 패키지입니다.

2단계 - 드라이버 초기화 및 쿼리 실행

better-sqlite3
better-sqlite3 설정 포함
import { drizzle } from 'drizzle-orm/better-sqlite3';

const db = drizzle(process.env.DATABASE_URL);

const result = await db.execute('select 1');

기존 드라이버를 제공해야 하는 경우:

import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';

const sqlite = new Database('sqlite.db');
const db = drizzle({ client: sqlite });

const result = await db.execute('select 1');

다음 단계는 무엇인가요?