Drizzle ORM 세팅
3 minute read
2024-07-29
필요한 코드 세팅
스키마, 인스턴스 그리고 설정 파일이 필요하다.
스키마 선언
import { pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core";
export const enTable = pgTable("en", {
id: uuid("id").defaultRandom().primaryKey(),
sentence: text("sentence").default(""),
link: text("link").default(""),
createdAt: timestamp("created_at").notNull().defaultNow(),
updatedAt: timestamp("updated_at")
.notNull()
.$onUpdate(() => new Date()),
});
export type SelectEnTable = typeof enTable.$inferSelect;
export type InsertEnTable = typeof enTable.$inferInsert;여기서 주의할 사항은 id 를 uuid 로 하는 게 좋을 것 같다. 자동 증가하는 정수로 생성되는 serial 은 에러가 뜬다. 이유는 잘 모르겠다.

db 싱글톤 인스턴스
import { config } from "dotenv";
import { drizzle } from "drizzle-orm/neon-http";
import { neon } from "@neondatabase/serverless";
config({ path: ".env" });
const sql = neon(process.env.DATABASE_URL!);
export const db = drizzle(sql);당연히 환경변수를 추가해줘야한다.
DATABASE_URL="postgresql://..."config
import { config } from "dotenv";
import { defineConfig } from "drizzle-kit";
config({ path: ".env" });
export default defineConfig({
schema: "./src/schema.ts",
out: "./migrations",
dialect: "postgresql",
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});이제 지금까지 작성한 스키마를 기반으로 설정 파일을 작성해준다.
맨처음과 변경될 때마다
npx drizzle-kit generate위 명령어를 호출하면 아래와 같이 out 에 지정한 디렉토리 하위에 마이그레이션 파일들이 생성된다.

그 다음 migrate 하거나 push (migrate 포함) 을 진행한다.
npx drizzle-kit migrate
npx drizzle-kit push공식문서 에서 더 자세한 사항 확인하자.
간단한 사용법
삽입 시에는 SQL 과 같은 문법으로 메소드 체이닝으로 작성 가능하다.
async function insert() {
const newData = {
sentence:
"These migrations are stored in the drizzle/migrations directory, as specified in your drizzle.config.ts",
} satisfies InsertEnTable;
await db.insert(enTable).values(newData);
}조회 시에도 동일하다.
async function select() {
const result = await db.select().from(enTable);
return result;
}어떤 플랫폼?
위에서는 Neon 서버리스 데이터베이스 서비스를 사용했다. vercel postgres 도 내부적으로 neon 을 이용한다.
npm 사용량도 많다.

region 어디로 해야하나?
가장 가까운 곳이 일반적으로 location latency 가 짧다.

참고한 블로그 를 기준으로는 Singapore 혹은 Sydney 로 선택하는게 가장 적절해보였다.