Bun SQLite
New database
Meet Drizzle
Get started
New database
Existing database
PostgreSQL Neon Vercel Postgres Supabase Xata PGLite MySQL PlanetScale TiDB SingleStore SQLite Turso Cloudflare D1 Bun SQLite Cloudflare Durable Objects Expo SQLite OP SQLite
Drizzle와 Bun:SQLite 시작하기
This guide assumes familiarity with:
bun - 자바스크립트 올인원 툴킷 - 여기서 읽기
bun:sqlite - 고성능 SQLite3 드라이버의 네이티브 구현 - 여기서 읽기
기본 파일 구조
이 프로젝트의 기본 파일 구조입니다. src/db
디렉토리 안에는 schema.ts
파일에 테이블 정의가 있습니다. drizzle
폴더에는 SQL 마이그레이션 파일과 스냅샷이 있습니다.
📦 <project root>
├ 📂 drizzle
├ 📂 src
│ ├ 📂 db
│ │ └ 📜 schema.ts
│ └ 📜 index.ts
├ 📜 .env
├ 📜 drizzle.config.ts
├ 📜 package.json
└ 📜 tsconfig.json
1단계 - 필요한 패키지 설치하기
npm i drizzle-orm
npm i -D drizzle-kit @types/bun
yarn add drizzle-orm
yarn add -D drizzle-kit @types/bun
pnpm add drizzle-orm
pnpm add -D drizzle-kit @types/bun
bun add drizzle-orm
bun add -D drizzle-kit @types/bun
2단계 - 연결 변수 설정하기
프로젝트 루트 디렉토리에 .env
파일을 생성하고 데이터베이스 연결 변수를 추가하세요:
중요
예를 들어, 테스트 목적으로 프로젝트 루트에 SQLite 데이터베이스 파일을 생성하려면 아래 예제를 사용할 수 있습니다:
DB_FILE_NAME=mydb.sqlite
3단계 - Drizzle ORM을 데이터베이스에 연결하기
src
디렉토리에 index.ts
파일을 생성하고 연결을 초기화해 보겠습니다.
import 'dotenv/config' ;
import { drizzle } from 'drizzle-orm/bun-sqlite' ;
const db = drizzle ( process . env . DB_FILE_NAME ! );
import 'dotenv/config' ;
import { drizzle } from 'drizzle-orm/bun-sqlite' ;
// libsql 연결 옵션에서 원하는 속성을 지정할 수 있습니다.
const db = drizzle ({ connection : { source : process . env . DB_FILE_NAME ! }});
기존 드라이버를 제공해야 한다면 다음과 같이 작성합니다:
import 'dotenv/config' ;
import { drizzle } from 'drizzle-orm/bun-sqlite' ;
import { Database } from 'bun:sqlite' ;
const sqlite = new Database ( process . env . DB_FILE_NAME ! );
const db = drizzle ({ client : sqlite });
4단계 - 테이블 생성
src/db
디렉토리에 schema.ts
파일을 생성하고 테이블을 선언해 보겠습니다. 아래 코드는 users_table
이라는 테이블을 정의하며, 각 컬럼의 타입과 제약 조건을 설정합니다.
import { int , sqliteTable , text } from "drizzle-orm/sqlite-core" ;
export const usersTable = sqliteTable ( "users_table" , {
id : int () .primaryKey ({ autoIncrement : true }) , // 자동 증가하는 기본 키
name : text () .notNull () , // 이름 (필수 값)
age : int () .notNull () , // 나이 (필수 값)
email : text () .notNull () .unique () , // 이메일 (필수 값, 고유 값)
});
이 코드는 drizzle-orm
라이브러리를 사용하여 SQLite 데이터베이스의 테이블 스키마를 정의합니다. 각 컬럼은 타입과 제약 조건을 가지며, id
는 자동 증가하는 기본 키로 설정됩니다.
5단계 - Drizzle 설정 파일 구성
Drizzle 설정 파일 - Drizzle Kit 에서 사용하는 설정 파일로, 데이터베이스 연결 정보, 마이그레이션 폴더, 스키마 파일 등 모든 정보를 포함합니다.
프로젝트 루트에 drizzle.config.ts
파일을 생성하고 다음 내용을 추가하세요:
import 'dotenv/config' ;
import { defineConfig } from 'drizzle-kit' ;
export default defineConfig ({
out : './drizzle' ,
schema : './src/db/schema.ts' ,
dialect : 'sqlite' ,
dbCredentials : {
url : process . env .DB_FILE_NAME ! ,
} ,
});
6단계 - 데이터베이스에 변경 사항 적용하기
drizzle-kit push
커맨드를 사용하면 데이터베이스에 직접 변경 사항을 적용할 수 있습니다. 이 방법은 로컬 개발 환경에서 새로운 스키마 디자인이나 수정 사항을 빠르게 테스트할 때 유용합니다. 마이그레이션 파일을 관리할 필요 없이 빠르게 반복 작업을 진행할 수 있습니다:
npx drizzle-kit push
push
커맨드에 대해 더 알아보려면 문서 를 참고하세요.
팁
또는 drizzle-kit generate
커맨드로 마이그레이션을 생성한 후, drizzle-kit migrate
커맨드로 적용할 수도 있습니다:
마이그레이션 생성:
npx drizzle-kit generate
마이그레이션 적용:
npx drizzle-kit migrate
마이그레이션 프로세스에 대해 더 알아보려면 문서 를 참고하세요.
7단계 - 데이터베이스 시드 및 쿼리
src/index.ts
파일을 사용자 생성, 조회, 수정, 삭제 쿼리로 업데이트해 보겠습니다.
import 'dotenv/config' ;
import { drizzle } from 'drizzle-orm/bun:sqlite' ;
import { eq } from 'drizzle-orm' ;
import { usersTable } from './db/schema' ;
const db = drizzle ( process . env .DB_FILE_NAME ! );
async function main () {
// 새로운 사용자 데이터 생성
const user : typeof usersTable .$inferInsert = {
name : 'John' ,
age : 30 ,
email : 'john@example.com' ,
};
// 사용자 생성
await db .insert (usersTable) .values (user);
console .log ( '새로운 사용자가 생성되었습니다!' );
// 모든 사용자 조회
const users = await db .select () .from (usersTable);
console .log ( '데이터베이스에서 모든 사용자를 가져옵니다: ' , 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 ( '사용자 정보가 업데이트되었습니다!' );
// 사용자 삭제
await db .delete (usersTable) .where ( eq ( usersTable .email , user .email));
console .log ( '사용자가 삭제되었습니다!' );
}
main ();
8단계 - index.ts 파일 실행하기
bun
을 사용하여 스크립트를 실행하려면 아래 명령어를 사용하세요:
bun src/index.ts