Drizzle <> SQLite
Drizzle๋ libsql ๋ฐ better-sqlite3 ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ SQLite ์ฐ๊ฒฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค.
๋ ๋๋ผ์ด๋ฒ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๊ณ Drizzle ORM๊ณผ ํตํฉํ๋ ๋์ ๋ฐ๊ฒฌํ libsql๊ณผ better-sqlite3 ๋๋ผ์ด๋ฒ ์ฌ์ด์๋ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
๋๋ผ์ด๋ฒ ์์ค์์๋ ๋ ๋๋ผ์ด๋ฒ ์ฌ์ด์ ๋ง์ ์ฐจ์ด๊ฐ ์์ ์ ์์ง๋ง, ์ฃผ์ ์ฐจ์ด์ ์ libSQL์ด SQLite ํ์ผ๊ณผ Turso ์๊ฒฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋์ ์ฐ๊ฒฐํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. LibSQL์ SQLite์ ํฌํฌ๋ก ํ์ค SQLite์ ๋นํด ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
libSQL๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ง์ ALTER ๋ฌธ์ ์ฌ์ฉํ ์ ์์ดbetter-sqlite3๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์คํค๋ง๋ฅผ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.- ์ ์ฅ ์ ์ํธํ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ํ๋ ๋๊ท๋ชจ ํ์ฅ ๊ธฐ๋ฅ ์ธํธ๋
libSQL์์ ์ง์๋ฉ๋๋ค.
libsql
1๋จ๊ณ - ํจํค์ง ์ค์น
npm i drizzle-orm @libsql/client
npm i -D drizzle-kit
2๋จ๊ณ - ๋๋ผ์ด๋ฒ ์ด๊ธฐํ
Drizzle๋ ๋ชจ๋ @libsql/client ๋๋ผ์ด๋ฒ ๋ณํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค:
@libsql/client | defaults to node import, automatically changes to web if target or platform is set for bundler, e.g. esbuild --platform=browser |
@libsql/client/node | node compatible module, supports :memory:, file, wss, http and turso connection protocols |
@libsql/client/web | module for fullstack web frameworks like next, nuxt, astro, etc. |
@libsql/client/http | module for http and https connection protocols |
@libsql/client/ws | module for ws and wss connection protocols |
@libsql/client/sqlite3 | module for :memory: and file connection protocols |
@libsql/client-wasm | Separate experimental package for WASM |
import { drizzle } from 'drizzle-orm/libsql';
const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});3๋จ๊ณ - ์ฟผ๋ฆฌ ์์ฑ
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 i drizzle-orm better-sqlite3
npm i -D drizzle-kit @types/better-sqlite3
2๋จ๊ณ - ๋๋ผ์ด๋ฒ ์ด๊ธฐํ ๋ฐ ์ฟผ๋ฆฌ ์์ฑ
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');