Prisma는 직관적인 데이터 모델, 자동 마이그레이션, 타입 안전성 및 자동 완성 기능을 제공하는 차세대 ORM이다.
📌 ORM: Object-Relational Mapping. 객체로 연결해준다는 의미. 어플리케이션과 데이터베이스 연결 시 SQL 언어가 아닌 어플리케이션 개발 언어를 사용하여 데이터베이스에 접근할 수 있게 해주는 툴
아래 명령어로 Prisma를 설치한다.
npm install prisma --save-dev
설치 후 아래 명령어로 Prisma를 실행한다.
npx prisma init
실행하면 프로젝트 파일의 루트 디렉토리에 prisma
폴더와 .env
파일이 생성된다.
MySQL에 접속해 아래 명령어로 연결할 데이터베이스를 생성한다.
CREATE DATABASE my_db;
.env 파일에는 데이터베이스 URL을 저장할 수 있다.
DATABASE_URL="db종류://유저이름:비밀번호@HOST:포트/데이터베이스"
DATABASE_URL="mysql://root:1234@localhost:3306/my_db"
prisma
폴더에 들어가면 schema.prisma
파일이 존재한다. schema.prisma
파일은 Prisma를 설정하는 메인 파일이다.
schema.prisma
파일은 크게 세 부분으로 나뉜다.
아래와 같은 양식으로 작성한다.
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String
password String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String?
content String?
author User @relation(fields: [authorId], references: [id])
authorId Int
}
...
각 모델은 하나의 id만 가질 수 있고 @default()
로 기본값을 설정, autoincrement()
로 자동 증가하는 id값을 설정할 수 있다.
String?
은 String 혹은 null이 될 수 있다는 의미이다.
User와 Post 간 1:N 관계가 있을 때 Post[]
로 표현, Post 모델에서는 @relation(fields: [authorId], references: [id])
를 입력한다.
→ Post의 authorId
는 User의 id
를 참조한다는 의미.
마이그레이션을 통해 schema.prisma
에서 정의한 Schema를 바탕으로 DB에 테이블을 생성할 수 있다.
npx prisma migrate dev --name init
위의 명령어로 마이그레이션을 실행하면 prisma/migrations/날짜_init/migration.sql
파일이 생성된다.
마이그레이션 실행 후, MySQL에 접속해 생성된 테이블을 확인할 수 있다.
mysql> SHOW TABLES;
+--------------------+
| Tables_in_my_db |
+--------------------+
| _prisma_migrations |
| user |
| post |
+--------------------+
참조
https://www.prisma.io/docs/orm/overview/introduction/what-is-prisma
https://www.prisma.io/docs/orm/prisma-schema/data-model/relations