prisma

kimyz·2023년 12월 26일

Prisma

node.js 기반의 object-relational mapping 도구
DB와의 상호작용을 단순화하고 개발 생산성을 높여줌

SQL 쿼리 대신 자바스크립트로 쿼리 작성 및 타입 지정된 쿼리 작성을 통해서 런타임 에러 방지
또한, DB 스키마 변경을 감지하고 자동으로 마이그레이션하여 스키마 관리를 간소화 해줌

구성요소

Client: Node.js & TS 용 쿼리 작성 클라이언트
Migrate: 마이그레이션 시스템
Studio: 데이터를 보고 편집할 수 있는 GUI 툴

기능

Prisma Client: DB와 상호작용하기 위한 자바스크립트 코드를 자동으로 생성
스키마 정의, DB 마이그레이션(추적 및 적용), DB 관계 정의하도록 쿼리 제공

스키마

Model: 특정 테이블이나 컬렉션
Field: 데이터의 속성, 데이터 타입과 제약 조건을 가짐
Relation: 모델 간 연결, 두 테이블 간의 외래 키 관리하고 연관된 데이터 쿼리 가능

문법 예시

// generator 정의
generator client {
	provider = 'prisma-client-js'
}

// 터미널에서 prisma/client 패키지 설치 후 생성
yarn add @prisma/client
prisma generate

// 인스턴스화
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

생성

const user = await prisma.user.create({
	data: {
    	email: '',
        name: '',
    }
})

조회

findMany, findUnique

const users = await prisma.user.findMany({
	where: {
    	age: {
        	gte: 18
        }
    },
  	orderBy: {
    	name: 'asc'
    },
  	include: {
    	posts: true
    },
  	select: {
    	id: true,
      	name: true
    }
})

업데이트

update, updateMany

const user = await prisma.user.update({
  	where: {
    	id: 1
    },
	data: {
        name: 'updated',
    }
})

삭제

delete, deleteMany

const user = await prisma.user.deleteMany({
  	where: {
    	email: {
        	contains: '@naver.com',
        }
    }
})

마이그레이션

npx prisma migrate dev --name init

마이그레이션 된 파일은 prisma/migration에 생성되고
현재 날짜, 시간 --name 문자의 조합으로 이름이 정해짐

직접 수정하면 안 되고, 항상 명령어를 통해서 파일을 생성하거나 DB 수정해야함

profile
😛

0개의 댓글