sec05. Prisma 연동

sngmin·2024년 2월 18일

01. Prisma란?

데이터베이스와 통신하는 일종의 툴. Prisma는 ORM으로 우리가 사용하는 언어로 데이터베이스에 접근할 수 있게 함.
ORM: 객체와 모델 사이의 관계를 기술하는 도구

$yarn add -D prisma

여러가지 cli 명령어들이 있고 이 명령어를 통해 결과물을 만들어냄. 우리는 prisma 자체를 쓰는 것이 아니라 이 결과물을 쓰기 때문에 -D로 다운로드

02. Prisma Table 작성

Prisma 자료형
문자열 - String

정수 - Int

실수 -Float, Double, Decimal

날짜 - DateTime

논리형 - Boolean

model User{
	id String @id @default(uuid()) // PK 선언시에는 @id, default(uuid())는 데이터 생성 될 때 자동으로 id 생성해주는 코드
    age Int? // 자료형 뒤 물음표는 NULL값 허용한다는 뜻
    name String? @db.VarChar(100)
    email String? @db.VarChar(100)
    phoneNumber String? @db.Char(11)
    posts Post[] // 1:N 관계이기 때문에 배열로 넣어줘야함. User는 Post를 여러개 생성할 수 있음
}

model Post {
	id String @id @default(uuid())
    title String? @db.VarChar(100)
    content String? @db.VarChar(100)
    userId String?
    user User? @relation(fields: [userId], references: [id])
    // FK 선언 fields - 어떤 값을 FK로 쓸 것인지, references - 상대 테이블의 어떤 값 연결할지
}

📌 prisma를 사용해서 테이블 작성해보기

$yarn prisma init

입력하면 root > prisma > schema.prisma 생성됨.

// schema.prisma

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

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

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

model User{
  id String @id @default(uuid())

  age Int 
  name String @db.VarChar(200)
  email String @db.VarChar(200)
  phoneNumber String @db.Char(11)
  posts Post[]
}

model Post {
	id String @id @default(uuid())

  title String @db.VarChar(100)
  content String @db.LongText

  userId String // FK
  user User @relation(fields: [userId], references: [id])
}

03. Prisma로 Database 연동하기

.env 파일이란?
환경 변수(프로그램 '실행'에 필요한 변수)를 저장하는 파일. '.'이 붙으면 깃허브에 올리거나 할 때 포함되지 않아 보안에 좋음.

// .env
NODE_ENV=dev // 실행할 환경에 대한 변수. 배포환경에서는 prod
PORT=8000
DATABASE_URL="mysql://root:[내 mysql 비밀번호]@localhost:3306/[사용할 db이름]"

DATABASE_URL

🚨데이터베이스 이름 확인하러 DBeaver 켰더니 에러 발생하고 연결이 안 됐다.

Public Key Retrieval is not allowed

접속하고자 하는 DB 우클릭 > Edit Connection.
켜진 창에서 Driver Properties > allowPublicKeyRetrieval 을 TRUE로 바꿔주니 해결됨.
MySQL 8.x 버전부터 발생하는 문제라고 한다. 이유는 나도 모르겠음..........

04. Prisma Cli 사용법

$yarn prisma init
  • 현재 prisma를 사용하는데 필요한 파일 생성. prisma 폴더, prisma 테이블을 작성할 수 있는 명령어
  • 결과물: prisma/schema.prisma, prisma/.env
$yarn prisma generate
  • prisma/schema.prisma를 기반으로(테이블 정보를 통해서) Prisma Client 등의 자원 생성 -> node_modules 안에 prisma client라는게 생기고 그걸 import 해서 db 연동도 하고 쿼리도 보내고 하는데 사용할 수 있게 됨
  • prisma/schema.prisma 수정 후 반드시 실행해야함
$yarn prisma migrate dev

  • schema.prisma 파일의 내용을 기반으로 DB 업데이트. 테이블들을 DB에 실제로 반영하는 명령어
  • 1) migrate를 진행하면 DB에 _prisma_migrations 테이블이 생성/수정됨
    2) _prisma_migrations 테이블을 통해 git처럼 DB 수정 내역을 관리 가능
  • yarn prisma migrate dev --create-only를 통해 실제 DB에 반영하지 않고 migration 파일 반영 가능
$yarn prisma db pull

  • DB 수정 내용을 불러오는 기능
  • 맨 처음 세팅할 때, 이미 만들어진 DB일 때 사용
  • 다른 사람이 만들어 놓은 내역을 schema.prisma 파일 안에 불러들이는 역할
$yarn prisma db push

  • migration 이력 없이 DB에 수정사항 반영
  • 웬만하면 yarn prisma migrate dev를 사용할 것

📌 실습

$yarn prisma migrate dev



테이블 생성됨

$yarn prisma generate

수정 후 generate 잊지 말기!

0개의 댓글