[Node.js][TIL] Prisma 사용하기

Trippy·2023년 11월 29일
0

Node.js

목록 보기
17/28
post-thumbnail

Prisma란?

prisma는 ORM으로써 javascript 객체와 데이터베이스의 관계연결 해주는 도구이다.

prisma와 같은 ORM은 여러가지의 관계형 데이터베이스(RDB)를 사용할 수 있다.
MySQL이나 강의에서 다루지 않는 Oracle, MariaDB와 같은 다양한 데이터베이스를 사용할 수 있다.

ORM의 장단점

장점

  • 사용하는 데이터베이스가 언제 바뀔 지 알 수 없다
  • 데이터베이스에서 사용하는 DB또는 Table속성이 변경되었을 때 빠르게 수정이 가능하다.

단점

  • 복잡한 쿼리를 작성할 경우 ORM으로 구현하기 위해 SQL보다는 ORM을 더 깊게 이해해야 하는 상황
  • 극한의 성능을 요구하는 쿼리가 필요한 상황에서는 Raw Query를 사용하는 것이 더욱 좋을 수 있다.

Prisma 시작하기

Prisma라이브러리 설치

npm init -y

npm i express prisma @prisma/client

// prisma 초기화
npx prisma init


schema.prisma

schema.prisma 파일은 prisma가 사용할 데이터베이스의 설정 정보를 정의하기 위해 사용하는 파일이다.

generator

  • prisma 클라이언트를 생성하는 방식을 설정하는 구문이다.

datasource

  • 데이터베이스에 대한 정의를 하기 위해 사용된다.
  • prisma가 어떤 데이터베이스 엔진을 사용할 것인지, 데이터베이스의 위치는 어디인지 등의 정보를 정의

datasource 설정하기

// schema.prisma

datasource db {
  // MySQL 데이터베이스 엔진을 사용합니다.
  provider = "mysql"
  // 데이터베이스 연결 정보를 .env 파일의 DATABASE_URL 로부터 읽어옵니다.
  url      = "mysql://이름:비번@RDS엔드포인트주소/프로젝트이름"
}


prisma model

Prisma의 model 구문은 특정 Table과 Column의 속성값을 입력하여, 데이터베이스와 Express 프로젝트를 연결 (Mapping)시켜줍니다

//schema.prisma

model Users {
  userId    Int      @id @default(autoincrement()) @map("userId")
  email     String   @unique @map("email")
  password  String   @map("password")
  refreshToken String @default("asdf") @map("refreshToken") 
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  @@map("Users")
}

데이터 유형: Int, String, Datetime
데이터 유형 뒤에 ?가 붙으면 NULL을 허용
고유 값 => @unique
@@mapUsers 테이블을 MySQL에서도 Users란 이름으로 사용하겠다는 뜻
=> @@map을 사용하지 않으면 테이블명의 대문자는 전부 소문자로 치환됨


Prisma CLI

prisma db push

  • schema.prisma 파일에 정의된 설정값을 실제 데이터베이스에 반영한다.
    내부적으로 prisma generate가 실행
    데이터베이스 구조를 변경하거나 새로운 테이블을 생성

prisma init

  • prisma를 사용하기 위한 초기 설정을 생성
  • schema.prisma파일과 같은 필요한 설정 파일들이 생성

prisma generate

  • prisma client를 생성하거나 업데이트 한다.
    대표적으로 shcema.prisma 에 변동 사항이나 데이터베이스 구조가 변경되었을 때 사용

prisma db pull

  • 현재 연결된 데이터베이스의 구조를 schema.prisma파일로 가져온다.
profile
감금 당하고 개발만 하고 싶어요

0개의 댓글