Prisma
TypeScript와 JavaScript 환경에서 데이터베이스와 상호작용을 쉽게 할 수 있게 도와주는 ORM(Object Relational Mapping)입니다.
- ORM (Object Relational Mapping)
- 객체 지향 프로그래밍 언어에서 사용되는 객체를 관계형 데이터베이스의 테이블과 매핑하여, 객체와 데이터베이스 간의 데이터를 자동으로 변환하는 기술입니다.
설치
1 2
npm install @prisma/client npx prisma init
구성 요소
Prisma Client
자동으로 생성된 TypeScript/JavaScript 코드로, 데이터베이스와 상호작용할 수 있는 인터페이스를 제공합니다.
쿼리를 작성할 때 타입 안전성을 제공하며, 코드 자동 완성, 오류 처리 등을 통해 데이터를 다루는 과정에서 개발자의 실수를 줄여줍니다.
Prisma Migrate
데이터베이스 스키마 변경을 추적하고, 이를 반영하기 위한 마이그레이션 파일을 자동으로 생성해줍니다.
개발자가 데이터베이스의 구조를 수정할 때, 변경을 쉽게 관리하고, 배포 환경에서도 안정적인 스키마 관리를 도와줍니다.
Prisma Studio
Prisma에서 제공하는 GUI(그래픽 사용자 인터페이스)로, 데이터베이스의 데이터를 시각적으로 관리하고 조작할 수 있게 해줍니다.
이를 통해 SQL 쿼리를 직접 작성하지 않고도 데이터베이스의 데이터를 쉽게 편집할 수 있으며, 개발과 디버깅 작업이 훨씬 직관적으로 이루어집니다.
사용 방법
npx prisma init
실행 시 prisma 폴더가 생성되고, 그 안에 schema.prisma
파일이 생성됩니다.
schema.prisma
파일에서 DB 연결 정보를 설정하고 모델을 정의합니다.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL") // "postgresql://user:password@localhost:5432/mydb"
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
}
데이터 모델을 정의한 후, Prisma Migrate를 사용하여 마이그레이션 파일을 생성합니다.
1
npx prisma migrate dev --name init
명령을 실행하면 prisma/migrations 폴더에 마이그레이션 파일이 생성됩니다.
또한, Prisma는 DB에 실제로 마이그레이션을 적용하고, Prisma Client를 업데이트합니다.
기존의 DB에 스키미가 정의되어 있는 경우 명령어를 사용해 schema.prisma
파일로 변환할 수 있습니다.
npx prisma introspect
데이터베이스 스키마를 읽어서 현재 상태를 기준으로 schema.prisma 파일을 갱신합니다.
이 때, schema.prisma 파일의 내용을 완전히 덮어씁니다.
사용 용도 : 초기 설정 또는 데이터베이스와 동기화
npx prisma db pull
명령어도 DB의 구조를 읽어오지만, 기존 파일의 내용을 유지하려고 시도합니다.
커스텀으로 추가한 주석, 포맷, 이름 변경 등의 수정이 덮어쓰이지 않습니다.
사용 용도 : 점진적으로 변경 사항 반영
쿼리 메서드
Prisma는 DB와 상호작용하기 위한 다양한 쿼리 메서드를 제공하여, CRUD 작업은 물론 집계, 조건 필터링, 다중 레코드 작업 등 다양한 작업을 손쉽게 처리할 수 있습니다.
기본 CRUD :
create
,findUnique
,findFirst
,findMany
,update
,updateMany
,delete
,deleteMany
집계 및 쿼리 :
count
,aggregate
,groupBy
조건 및 필터링 :
where
,select
,include
,orderBy
,skip
,take
사용 방법
Prisma Client의 인스턴스를 통해 데이터베이스에 대한 다양한 CRUD 작업을 처리할 수 있는 쿼리 메서드 사용할 수 있습니다.
Prisma Client의 인스턴스.모델명.쿼리 멤서드 형태로 사용
1
2
3
4
5
6
7
8
9
10
11
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient(); // Prisma Client의 인스턴스
// User 모델에 데이어 생성
const user = await prisma.user.create({
data: {
name: "Alice",
email: "alice@example.com",
},
});