개발환경 구축

mysql & prisma 개발환경 구축

jeong_ga 2024. 1. 29. 16:38

mysql & prisma 개발환경 구축


  • Prisma는 데이터베이스 ORM
    • Prisma로 DB 관련 코드를 작성하면 여러 DB에 거의 똑같은 코드로 연결 가능

prisma 세팅

 

설치

npm install prisma --save-dev
npx prisma init

npx prisma init를 진행하면 prisma/schema.prisma 파일 생성됨

  1. prisma/schema.prisma : 이 파일은 가장 기본이 되는 DB의 뼈대를 만드는 파일
  2. Prisma에서 사용하는 Model(모델)이 qlite, PostgreSql, MySql 등에서는 테이블로 전환

db provider를 mysql로 변경

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

.env 파일에서 mysql user의 아이디와 패스워드 그리고 db명을 입력

  1. 예시
DATABASE_URL="mysql://johndoe:randompassword@localhost:3306/mydb" // .env.local

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
datasource db { provider = "mysql" url = "mysql://{username}:{비밀번호}@localhost:{port}/{Name}" }

 

prisma/schema.prisma 파일에서 다음 스키마를 입력

  1. generator client : Prisma는 백엔드쪽이기 때문에 Next.js 같은 Client쪽에서 Prisma DB를 연결하려면 prisma-client가 필요
  2. datasource 부분이 바로 어떤 종류의 DB를 쓰는지 & 해당 파일에 대한 url 부분
  3. 모델은 보통 대문자로 입력
  4. 모든 SQL의 테이블엔 id가 들어가야 함
    1. @default(autoincrement()) 명령어는 id를 자동으로 하나씩 증가하게 설정
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

// 여기서부터 추가됨
model User {
  id       Int     @id @default(autoincrement())
  email    String  @unique
  name     String?
  password String
  posts    Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User    @relation(fields: [authorId], references: [id])
  authorId  Int
}

 

 

 

Prisma 스키마, 코드 연결

npx prisma migrate dev --name init

prisma 내부에dev.db 파일과 migrations 폴더 생성된 것 확인

npx prisma studio 설치하여 연결 확인

npx prisma studio

 

Next.js에서 Prisma를 사용할 수 있게 하는 SDK 설치

npm i @prisma/client

 

Next.js에서 Prisma Client를 불러오는 모듈 작성

// /app/lib/prisma.ts

import { PrismaClient } from "@prisma/client";

const globalForPrisma = global as unknown as { prisma: PrismaClient };

export const prisma = globalForPrisma.prisma || new PrismaClient();

if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;

export default prisma;