본문 바로가기

Prisma (ORM) 본문

개발/알쓸코잡

Prisma (ORM)

자전하는명왕성 2023. 4. 17. 18:27

미래의 나에게

// 설치
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에서는 한 눈에 프로젝트 내 모든 스키마를 파악할 수 있다는 장점을 가지며,

타 테이블과 관계를 갖는 것에 있어서도 심플한 편이라 매력적인 도구라는 생각이 든다.

 

 

'개발 > 알쓸코잡' 카테고리의 다른 글

TCP & UDP  (0) 2023.04.22
Gitflow  (0) 2023.03.04
CI / CD  (0) 2023.03.04
Kubernetes (쿠버네티스)  (0) 2023.03.03
서버리스  (0) 2023.03.01
Comments