드리즐 ORM은 SQL 데이터베이스와 상호작용하기 위한 라이브러리로, SQL 쿼리를 직접 작성하는 것과 유사한 방식으로 작동합니다. 이를 통해 개발자는 SQL의 강력한 기능을 그대로 활용할 수 있습니다.
https://orm.drizzle.team/docs/get-started-postgresql#postgresjs
npm i drizzle-orm postgres
npm i -D drizzle-kit
보통 Drizzle ORM설정을 위해 스키마 파일과 데이터베이스 연결을 위해 한 곳에 코드를 모아둡니다. 이를 src > app > db 폴더 하위의 database.ts파일에 설정합니다.
src > app > db > database.ts
import { env } from "@/env";
import * as schema from "./schema";
import { PostgresJsDatabase, drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
declare global {
// eslint-disable-next-line no-var -- only var works here
var database: PostgresJsDatabase<typeof schema> | undefined;
}
let database: PostgresJsDatabase<typeof schema>;
let pg: ReturnType<typeof postgres>;
if (env.NODE_ENV === "production") {
pg = postgres(env.DATABASE_URL);
database = drizzle(pg, { schema });
} else {
if (!global.database) {
pg = postgres(env.DATABASE_URL);
global.database = drizzle(pg, { schema });
}
database = global.database;
}
export { database, pg };
@t3-oss/env-nextjs는 zod와 함께 런타임 및 빌드 타임 에 환경 변수를 보다 쉽게 검증할 수 있게 해줍니다.
npm i @t3-oss/env-nextjs
src> app >.env
import { createEnv } from "@t3-oss/env-nextjs";
import { z } from "zod";
export const env = createEnv({
server: {
DATABASE_URL: z.string().url(),
},
client: {
NEXT_PUBLIC_BUCKET_URL: z.string().url(),
},
runtimeEnv: {
NODE_ENV: process.env.NODE_ENV,
},
});