티스토리 뷰

이제 실제로 migration을 만들기 전에 Prisma에 대해 조금은 알아보고 시작해보자.

 

❓Prisma

  • Node.js 기반의 ORM(Object-Relational-Mapping) 도구
  • 데이터베스와 상호작용을 단순화 하고 개발 생산성을 높이는 도구
  • SQL 쿼리를 직접 작성하지 않고 javaScript 코드로 쿼리를 작성할 수 있게 해주는 도구
  • 타입 세이프한 쿼리 작성을 통해 런타임 에러를 방지
  • 타 ORM과는 달리, 자체적인 스키마 문법을 제공해 직접 DB마이그레이션, 클라이언트 코드 생성 작업 가능

 

개념

` Prisma Client `

Node.js & TypeScript용 쿼리 작성 클라이언트

 

` Prisma Migrate `

마이그레이션 시스템

 

` Prisma Studio `

데이터베이스의 데이터를 보고 편집하는 GUI

 

Prisma로 데이터 모델 정의하기

model User {
  id                      String        @id @default(uuid())
  email                   String        @unique
  name                    String?
  image                   String?
  desc                    String?
  rooms                   Room[]
}

model Room {
  id                      Int           @id @default(autoincrement())
  title                   String
  images                  String[]
  hasWifi                 Boolean       @default(false)
  userId                  String        
  user                    User          @relation(fields: [userId], references: [id], onDelete: Cascade) 
@@index([userId])
}
  • 데이터모델을 정의해 데이터베이스 테이블과 관련된 개체를 생성(데이터 모델은 schema.prisma파일에 정의)
  • ` model User` ` model Room ` : 데이터베이스의 테이블을 나타낸다.
  • ` @id ` : 기본키
  • ` @unique ` : 데이터 유일성을 나타냄
  • ` @relation ` : 테이블간의 관계 정의

 

명령어
npx prisma migrate dev >> migration  생성
npx prisma studio >> supabase가 아닌 studio로 확인 

 

 

DATABASE_URL="postgresql://postgres.qsuuxdhkwcdugxpispka:[YOUR-PASSWORD]@aws-0-ap-northeast-2.pooler.supabase.com:6543/postgres"

데이터베이스에 추가할 내용을 작성 후 

 npx prisma migrate dev 명령어를 사용하면 내가 작성한 db의 내용이 폴더로 생성이 된다. 

 

 


 

⚠️주의할 점

 

npx prisma migrate dev 명령어 제대로 작동하지 않는 경우

`directUrl  = env("DIRECT_URL")` 추가하기

prisma/schema.prisma

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
}

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

 

변경후 ⬇️⬇️

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider    = "postgresql"
  url         = env("DATABASE_URL")
  directUrl   = env("DIRECT_URL")
}

 

그리고 .env 파일에서 ` DIRECT_URL ` 을 생성해주어야 한다. 

 

` DIRECT_URL ` 작성 방법

DATABASE_URL의 코드를 그대로 복사해 DIRECT_URL에 복사 후 6543 ➡️ 5432 로 변경

 

`DATABASE_URL` 수정 방법

` ?pgbouncer=true `쿼리스트링을 가장 뒤에 추가

 

DATABASE_URL="postgresql://postgres.qsuuxdhkwcdugxpispka:[YOUR-PASSWORD]@aws-0-ap-northeast-2.pooler.supabase.com:6543/postgres"

 

변경후 ⬇️⬇️

DATABASE_URL="postgresql://postgres.qsuuxdhkwcdugxpispka:[YOUR-PASSWORD]@aws-0-ap-northeast-2.pooler.supabase.com:6543/postgres?pgbouncer=true"
DIRECT_URL="postgresql://postgres.qsuuxdhkwcdugxpispka:[YOUR-PASSWORD]@aws-0-ap-northeast-2.pooler.supabase.com:6543/postgres""

 


 

다시 npx prisma migrate dev 명령어를 작성하면 

생성될 폴더의 이름을 작성하면 생성된 시간과 함께 내가 작성한 이름을 가진 폴더가 생성된 것을 볼 수 있다.

 

< npx prisma migrate dev 명령어 사용 및 폴더 이름 작성 >

 

< migrations 폴더 생성 >

 

*내용을 확인하면 SQL 문으로 생성되어 있다.