Ultimate Next.js Course 강의와 Next.js 공식문서를 보면서 작성한 글입니다.
요약: 이번주는 Neon과 Drizzle을 사용하여 데이터베이스를 셋팅함
root에 server 폴더를 생성하여 index.ts, schema.ts를 작성해주었고, drizzle.config.ts, .env.local(postgre_url넣기 위한)파일을 생성했다.
import { neon } from '@neondatabase/serverless';
import { drizzle } from 'drizzle-orm/neon-http';
const sql = neon(process.env.POSTGRE_URL);
const db = drizzle(sql);
const result = await db.select().from(...);
해결 1. as로 타입 명시하기
해결 2. ! 붙이기
package.json에 추가한 스크립트
"scripts": {
...,
"db:generate": "drizzle-kit generate:pg --config drizzle.config.ts",
"db:push": "drizzle-kit push:pg --config drizzle.config.ts"
},
npm run db:generate 후 에러
해결
에러메시지에 나온 것 참고하여 ':' 뒤에 있는 것들 제거
"scripts": {
...,
"db:generate": "drizzle-kit generate",
"db:push": "drizzle-kit push"
},
그리고 server 폴더 하위에 migrations폴더 및 json, sql 파일이 생성되는 것을 볼 수 있다. sql 파일명은 설정없이 해서 랜덤으로 만들어지는 듯하다(찾아봐야함)
import { defineConfig } from "drizzle-kit"
import * as dotenv from "dotenv"
dotenv.config({
path: ".env.local",
})
export default defineConfig({
dialect: "postgresql",
schema: "./server/schema.ts",
out: "./server/migrations",
dbCredentials: {
url: process.env.POSTGRES_URL!,
},
})
import { pgTable, serial, text } from "drizzle-orm/pg-core";
export const posts = pgTable('posts', {
id: serial('id').primaryKey().notNull(),
title: text('title').notNull()
})
npm run db:push 후 Neon Console을 보면 Tables에 posts라는 테이블이 생성된 것을 확인할 수 있다.
npm i -D drizzle-kit를 했다면 앞으로 실습하면서 터미널 하나 더 켠 후 npx drizzle-kit studio
https://local.drizzle.studio 에 들어가면 굳이 Neon console에 들어가지 않아도 된다