Drizzle <> SQLite

Drizzle๋Š” libsql ๋ฐ better-sqlite3 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQLite ์—ฐ๊ฒฐ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  Drizzle ORM๊ณผ ํ†ตํ•ฉํ•˜๋Š” ๋™์•ˆ ๋ฐœ๊ฒฌํ•œ libsql๊ณผ better-sqlite3 ๋“œ๋ผ์ด๋ฒ„ ์‚ฌ์ด์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

๋“œ๋ผ์ด๋ฒ„ ์ˆ˜์ค€์—์„œ๋Š” ๋‘ ๋“œ๋ผ์ด๋ฒ„ ์‚ฌ์ด์— ๋งŽ์€ ์ฐจ์ด๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฃผ์š” ์ฐจ์ด์ ์€ 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/clientdefaults to node import, automatically changes to web if target or platform is set for bundler, e.g. esbuild --platform=browser
@libsql/client/nodenode compatible module, supports :memory:, file, wss, http and turso connection protocols
@libsql/client/webmodule for fullstack web frameworks like next, nuxt, astro, etc.
@libsql/client/httpmodule for http and https connection protocols
@libsql/client/wsmodule for ws and wss connection protocols
@libsql/client/sqlite3module for :memory: and file connection protocols
@libsql/client-wasmSeparate experimental package for WASM

default
node
web
http
web sockets
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');

๋™๊ธฐ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋“œ๋ผ์ด๋ฒ„ ์—ฐ๊ฒฐ์„ ์ง€์ •ํ•˜๊ณ  ์ด๋ฅผ Drizzle ์ธ์Šคํ„ด์Šค์— ์ „๋‹ฌํ•˜๋Š” ์ถ”๊ฐ€ ์—ฐ๊ฒฐ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

2๋‹จ๊ณ„ - ๋“œ๋ผ์ด๋ฒ„ ์ดˆ๊ธฐํ™” ๋ฐ ์ฟผ๋ฆฌ ์ž‘์„ฑ

better-sqlite3
better-sqlite3 with config
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');

๋‹ค์Œ ๋‹จ๊ณ„๋Š”?