이번 시간에는 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.js 와 MySQL 설치가 되어있어야겠죠? 만약 없다면 설치해주세요!
초기화
새 프로젝트를 만들고 필요한 의존성 패키지를 설치하겠습니다.
% 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
를 수정해야합니다. datasource
의 provider
를 postgresql
에서 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가 업데이트된 최신 모델을 사용하는 로직입니다.
Prisma Client 사용하기
이제 client를 사용해봅시다. index.ts 를 생성하고 아래 코드를 작성해주세요.
간단하죠? PrismaClient 를 import 하고 instance를 만들었을 뿐인데 ORM의 역할을 하고 있습니다. 추가 client 관련 API 는 여기 에서 확인할 수 있습니다. 감사합니다.