Prisma 2 사용기

김승엽
Berkbach
8 min readJun 26, 2020

--

Photo by Andrej Lišakov on Unsplash

이번 시간에는 Prisma2의 간단한 사용법을 알아보겠습니다.

⚠️ Prisma1이 아닙니다!
Prisma1과 Prisma2는 큰 차이점을 가지고 있습니다. 이 글에서는 Prisma2를 다룹니다. Prisma1과 Prisma2의 차이점은 아래 블로그에 자세히 나와 있습니다.

Prisma? 🤔

공식 문서에 나와있는 것 처럼 Prisma는 데이터베이스를 쉽게 사용할 수 있게 도와주는 데이터베이스 툴킷 입니다. 저희는 Prisma를 통해 ORM을 대체할 수 있습니다. Prisma는 크게 세 가지로 구성됩니다.

  • Prisma Client: Prisma server 와 상호작용을 하는 Prisma Client 입니다.
  • Prisma Migrate: Django의 migration과 같이 데이터베이스 모델을 선언할 수 있습니다.
  • Prisma Studio: 데이터베이스의 데이터를 수정할 수 있도록 Prisma에서 제공해주는 GUI 입니다.

⚠️ Prisma is not ORM
Prisma는 ORM이 아닙니다. ORM과 같은 목적을 가지고 있지만 다른 방식으로 문제를 해결합니다.

Prisma는 어떻게 동작할까? ⚙️

Prisma Schema

Prisma를 사용하는 모든 프로젝트는 Prisma schema file 을 거칩니다. Prisma schema file 은 기본적으로 schema.prisma 라는 네이밍을 가지고 Prisma CLI 가 자동으로 감지합니다. 만약 다른 네이밍을 가질 경우, 명령어에 --schema 옵션과 주소를 같이 넣어주면 됩니다.

prisma generate --schema ./database/myschema.prisma

schema.prisma 는 위처럼 작성할 수 있습니다. Prisma Schema에서는 3가지를 설정 할 수 있습니다. 더 자세한 내용은 공식 문서에서 확인할 수 있습니다.

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

Prisma data model

data model은 모델의 집합입니다. 이 모델은 두 가지의 중요한 함수를 가지고 있습니다.

  • 데이터베이스의 테이블을 나타냅니다.
  • Prisma Client API의 쿼리에 대한 기반을 제공합니다.

또한 Prisma Schema에 모델을 입력하는 방법도 크게 두 가지가 있습니다. 두 가지 방법 모두 아래 예제에서 해보겠습니다.

  • 데이터베이스를 검사해서 데이터 모델을 생성하는 방법
  • 데이터 모델을 수동으로 작성하여 Migrate로 데이터베이스에 매핑하는 방법

Prisma로 MySQL 세팅하기 🛠

필수 사항

Prisma와 MySQL을 사용하기 전에 Node.jsMySQL 설치가 되어있어야겠죠? 만약 없다면 설치해주세요!

초기화

새 프로젝트를 만들고 필요한 의존성 패키지를 설치하겠습니다.

% mkdir hello-prisma
% cd hello-prisma
% npm init -y
% npm i -D @prisma/cli typescript ts-node @types/node

그리고 tsconfig.json 를 만들어서 typescript 설정을 하겠습니다.

// tsconfig.json{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}

Prisma CLI를 설치했다면 명령어로 prisma schema 파일을 만들 수 있습니다.

% npx prisma init

데이터베이스 연결

위 명령어를 입력했다면 schema.prisma 라는 파일이 생성된 것을 확인할 수 있는데요, MySQL을 사용하기 위해선 schema.prisma 파일의 datasource 를 수정해야합니다. datasourceproviderpostgresql 에서 mysql 로 바꿔주세요. 그리고 자신의 데이터베이스 connection URL 을 알아야합니다. MySQL은 이런 형식을 가지고 있습니다.

mysql://USER:PASSWORD@HOST:PORT/DATABASE

connection URL 에 대한 다른 정보는 여기 에서 확인해주세요. 참고로 MySQL의 기본 포트는 3306 입니다!

Prisma Migrate로 데이터베이스 테이블 생성

간단하게 Post, Profile, User Model을 작성해보겠습니다.

schema.prisma 에 위 처럼 모델을 작성하고 아래 명령어로 migrate를 해주세요.

% npx prisma migrate save --name init --experimental
% npx prisma migrate up --experimental

migrate save 로 migration 히스토리를 생성하고 migrate up 을 통해 실제 DB의 테이블을 생성합니다. 데이터베이스에 접속하면 모델을 작성한대로 테이블과 _Migration 테이블이 생성된 것을 확인할 수 있습니다.

데이터베이스 테이블 불러오기

명령어 npx prisma migrate 를 통해서 데이터베이스 테이블을 생성했다면, 이번엔 반대로 Prisma에서 데이터베이스 테이블을 불러오는 방법을 알아보겠습니다.
명령어 npx prisma introspect 로 불러올 수 있습니다. 이 명령어로 Prisma CLI가 데이터베이스를 검사하고 다른 부분이 있다면 Prisma schema 를 업데이트 합니다.

데이터베이스 제어하기 ✍

데이터베이스를 연결하고 테이블을 생성했으니 사용해봐야겠죠? Prisma로 데이터베이스를 제어하려면 제어할 client가 있어야합니다.

% npm install @prisma/client

Prisma Client 생성하기

아래 명령어를 통해 Prisma CLI가 우리의 Prisma schema 를 읽고 node_modules/@prisma/client 에 Prisma Client 를 생성합니다.

% npx prisma generate

⚠️ 주의: Prisma schema 가 변경될 때 마다 npx prisma generate 로 업데이트를 해야합니다!

Prisma Client가 업데이트된 최신 모델을 사용하는 로직입니다.

introspect를 통해서 Prisma Schema를 업데이트 하고 Prisma Client가 사용하는 로직
migrate를 통해서 Database를 업데이트 하고 Prisma Client가 사용하는 로직

Prisma Client 사용하기

이제 client를 사용해봅시다. index.ts 를 생성하고 아래 코드를 작성해주세요.

간단하죠? PrismaClient 를 import 하고 instance를 만들었을 뿐인데 ORM의 역할을 하고 있습니다. 추가 client 관련 API 는 여기 에서 확인할 수 있습니다. 감사합니다.

--

--