https://orm.drizzle.team/

드리즐 ORM은 SQL 데이터베이스와 상호작용하기 위한 라이브러리로, SQL 쿼리를 직접 작성하는 것과 유사한 방식으로 작동합니다. 이를 통해 개발자는 SQL의 강력한 기능을 그대로 활용할 수 있습니다.

1. Dirzzle 설정

https://orm.drizzle.team/docs/get-started-postgresql#postgresjs

npm i drizzle-orm postgres
npm i -D drizzle-kit

1-1. db 폴더 생성 및 데이터베이스 구조 세팅

보통 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 };

1-2 기타작업. env 설정

@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,
    },
});