Prisma (ORM) 본문
반응형
미래의 나에게
// 설치
yarn add prisma
// 프리즈마 사용 시 필요한 파일 생성, prisma/schema
yarn init
// schema.prisma 기반의 Prisma client 등의 자원 생성
yarn prisma generate
// schema.prisma 기반으로 DB 업데이트
yarn prisma migrate dev
// 실제 DB 반영 없이 migration 파일 변경
yarn prisma migrate dev --create -only
먼저 ORM이란, SQL 쿼리문을 작성하지 않고도 데이터베이스와 상호작용할 수 있게 도와주는 도구다.
2023.01.29 - [코딩/node.js] - ORM / Sequelize & typeORM
이전에는 항상 TypeORM을 사용하였지만, Prisma 가 요즘 떠오르는 초신성이라 하여 오늘은 Prisma에 대해 포스팅하게 되었다.
TypeORM과 Prisma에 대해 비교하자면 다음과 같다.
TypeORM | Prisma |
풍부한 기능, 풍부한 자료, 많은 커뮤니티 | 새로운 프레임워크이기에 상대적으로 제한적 기능, 상대적으로 적은 자료 |
스키마 관리 도구 없으며, 스키마를 수동으로 작성해야 함 |
스키마 관리 도구가 있으며, 스키마 변경사항을 migration을 통해 로그로 남길 수 있음 |
다양한 DB와 연동 가능 | PostgreSQL, MySQL, SQLite |
상대적으로 성능이 떨어지는 경우 있음 | 내부적으로 쿼리를 최적화하여 쿼리 성능 우수 |
Prisma는 설치 시 다음과 prisma 라는 폴더가 자동으로 생성된다.
이때 해당 폴더 안에는 migrations / schema.prisma 라는 파일이 존재하는데,
migrations 는 DB 스키마 변동 사항이 있는 경우, 시간과 이름으로 기록을 남긴다는 특징을 가진다.
schema.prisma 는 스키마 관리 도구로 구조는 다음과 같다.
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql" // 사용하는 DB
url = env("DATABASE_URL") // database URL
}
model User {
id String @id @default(uuid())
name String @db.VarChar(200)
phoneNumber String @db.Char(11)
email String @db.VarChar(100)
age Int
posts Post[]
}
model Post {
id String @id @default(uuid())
title String @db.VarChar(200)
content String @db.LongText
userId String // foreign key
user User @relation(fields: [userId],references: [id]) // N대1 구조로 연결
}
schema.prisma에서는 한 눈에 프로젝트 내 모든 스키마를 파악할 수 있다는 장점을 가지며,
타 테이블과 관계를 갖는 것에 있어서도 심플한 편이라 매력적인 도구라는 생각이 든다.
반응형
Comments