prisma 사용기 1

김지원·2022년 9월 17일
0

prisma

목록 보기
3/3
post-thumbnail

새로운 프로젝트를 시작했다.
ORM을 무엇으로 해볼까 고민하다가 prisma를 한번 해보기로 하였다.
ORM으로 생각하고 prisma 공식 페이지로 확인해본 결과

😬 prisma는 ORM이 아니였다..!

공식 페이지의 설명을 보면 ORM과 같은 목적을 가지고 있지만 다른 방식으로 문제를 해결합니다. 라고 정의 되어있다.

다른 방식?

Prisma는 데이터베이스를 쉽게 사용할 수 있게 도와주는 데이터베이스 툴킷 입니다.
저희는 Prisma를 통해 ORM을 대체할 수 있습니다. Prisma는 크게 세 가지로 구성됩니다.
  • Prisma Client: Prisma server 와 상호작용을 하는 Prisma Client 입니다.
  • Prisma Migrate: Django의 migration과 같이 데이터베이스 모델을 선언할 수 있습니다.
  • Prisma Studio: 데이터베이스의 데이터를 수정할 수 있도록 Prisma에서 제공해주는 GUI 입니다.

prisma는 ORM보다는 툴킷에 가깝다는 내용이 적혀있었다.
그리고 여기서 client와 migrate를 중점으로 사용할 것 같다.

여담이지만 쓰려고 할때는 몰랐지만 나중에 보니 prisma1과 prisma2가 있다고 한다.

둘의 차이점은 prisma서버를 들리나 안들리나의 차이인데 자세한 내용은 정리한 블로그가 있다. (지금은 prisma2에 관련된 라이브러리만 사용할꺼니까ㅎㅎ)

👨🏽‍💻 이제 사용해보자

  • 사용 환경
    • RDS: mysql
    • framework: nestjs
  • 사용하는 라이브러리
prisma, @prisma/client

일단 사용하기 전 prisma 동작 방식을 먼저 이해하고 사용하는 것이 좋다고 생각한다.

Prisma CLI를 사용하는 프로젝트는 Prisma schema file를 거쳐서 스키마 내용을 불러온다.

그러려면 기본적으로 schema.prisma 네이밍을 띄게 되고
다른 네이밍을 가질 경우는 명령어에 --schema 옵션과 주소를 같이 넣어주면 된다.

EXAMPLE

npx prisma generate --schema ./diffentname.prisma

그리고

npx prisma init

명령어를 하게 되면

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
generator client {
  provider = "prisma-client-js"
}

schema.prisma는 위 내용처럼 자동으로 작성된다.
Prisma Schema에서는 3가지를 설정 할 수 있는데 자세한 내용은 공식 페이지에 있으니 간단하게만 설명하도록 하겠다.

  1. Data source: 데이터베이스를 연결
  2. Generator: Prisma Client를 생성
  3. Data model: 애플리케이션의 모델을 정의

3번 Data model에서 데이터 모델을 만들 수 있게 된다.

typeorm의 entity 역할이라고 볼 수 있다.

간단하게 예를 들어보면

model User {
  id    Int     @default(autoincrement()) @id
  email String  @unique
  name  String?
  posts Post[]
}

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

이렇게 데코레이터로 컬럼의 특징을 정의할 수 있다.
OneToMany와 ManyToOne도 깔끔하게 정의한 모습을 볼 수 있다.

마지막으로 typeorm의 synchronize기능을 써보도록 하겠다

npx prisma migrate dev --name init

그럼 migration 폴더와 SQL 파일을 생성하고 데이터베이스에 대해 직접 실행하게 된다.

초기설정으로도 글이 길어진 것 같아 다음 글에서 nestjs에 맞게 어떻게 실행하게 되는지 적어보도록 하겠다.

안농~

profile
backend-developer

0개의 댓글