본문 바로가기
TIL

TIL #17) ORM, Prisma 파먹기

by 해룸 2024. 1. 27.

Today I Learned

무작정 강의를 따라듣다보니 기본적인 개념이 궁금해져 공부해보려 한다.

 

ORM(Object-relational maping) : DB데이터를 객체로 매핑해주는것. 모델링 된 객체와 관계를 바탕으로 SQL을 자동으로 생성해주는 도구. 기존 ORM들이 겪는 많은 문제들을 겪지 않을 수 있게 한다고 프리즈마 공식 문서에서는 말한다.

 

Prisma의 구성: Prisma  Schema, Prisma introspect, Prisma migration, Prisma client, Prisma studio

 

1. Prisma  Schema

프리즈마 v1에서는 graphQL을 통해 모델을 정의했다면, 프리즈마 v2에 와서는 PSL(Prisma Schema Language)를 통해 모델을 정의한다. generator, data sources, data model 3가지로 이루어져 있다.

 

Generator  - Prisma 명령을 실행하는 환경을 결정하는 필드. 일반적으로 provider외에 설정할 필요 없음

generator client{
  provider = "prisma-client-js"
  previewFeatures = []
}

 

Data source - 프리즈마를 사용해 연결할 데이터베이스의 정보를 설정해 주는 필드

필요한 정보로는 Database의 종류(provider) 와 Database URL(url)이 있다.

 datasource db{
  provider = Database 종류
  url	= Database  
}

이번 강의에서는 Mysql, url은 env파일을 연결해 사용했다.

MySQL의 기본 URL 구성: mysql://USER:PASSWORD@HOST:PORT/DATABASE
DATABASE_URL="mysql://root:a**321@expr*atabase.cfm***om:3306/communityHub"

추가적으로 .env파일은 다음과 같이 설정했다.

기본 url구성을 알고보니 그저 복붙했던 내 url도 그런 규칙을 따라 되어있다는걸 알게되었다. ㅎ

 

Data model - 총 2가지로 구성되며, PSL(Prisma Schema Language)를 사용해 작성한다.  

model: database 테이블에 매핑되는 개념

enum: 열거형(database에서 지원하는 경우만 사용가능)

model ModelName {
    Field1	FieldType @option
    Field2	FieldType
    Field3	FieldType
}

 

2. Prisma introspect

프리즈마에서는 기존의 DB를 수작업을 ORM에 매핑해줄 필요가 없다. DB URL을 정의하고 npx prisma introspect 한번이면 기존의 DB 구조를 자동으로 Prisma schema로 불러올 수 있다. 기존에 있던 DB에 Prisma를 사용하려는 사람들에게 유용한 기능이다.

 

3. Prisma Migrate

새로운 테이블을 생성하거나, 기존 테이블에 열을 추가하는등 DB를 변경하는 기능(도구)이다. 프리즈마 스키마를 직접 변경하여 DB를 변경함으로써, 복잡한 SQL문을 사용하지 않아도 된다. - 아직 잘 와닿지는 않는다..

 

4. Prisma Client

데이터에 맞춰 자동생성되는 쿼리 생성기 이다. prisma schema를 기반으로 DB에 요청을 보낼수있다.

 

Prisma와 같이 사용할 수 있는 라이브러리 및 프레임워크
Express, koa, hapi, Fastify, Sils, AdonisJs, NestJs, Next.js, Foal TS, Polka, Micro, Feathers

=> Express를 사용 중이고 NestJs, Next.js를 배울 예정이라 지금 우리가 Prisma ORM을 배우고 있구나!  

 

참고블로그

https://velog.io/@ltnscp9028/Prisma-%EB%84%8C-%EB%88%84%EA%B5%AC%EB%8B%88-gr0ecme3