ORM 과 Prisma
Prisma란?
ORM(Object Relational Mapping)으로써 JS 객체(object)와
데이터베이스의 관계(Relation)을 연결(mapping)해주는 도구
Prisma vs mongoose
mongoose의 경우 ODM(Object Document Mapping)으로 JS의 객체를
Document와 연결하지만, Prisma는 ORM(Object Realtional Mapping)으로
JS와의 객체와 데이터베이스의 관계(Relation)를 연결해주는 차이점이있음
mongoose의 경우 Schema의 형태로 컬렉션(Collection)에 대한 속성을 설정하였다면,
Prisma의 경우 Model의 형태로 테이블(Table)의 속성을 설정할 수 있다.
=> mongoose의 컬렉션과 MySQL의 테이블은 동일한 위상을 갖는다.
ORM의 장단점
Prisma와 같은 ORM을 사용하는 가장 큰 대표적인 이유 2가지
1. 프로덕션에서 사용하는 데이터베이스가 언제 바뀔 지 알 수 없음
2. 데이터베이스에서 사용하는 DB 또는 Table 속성이 변경되었을 때 빠르게 수정 가능
단점
JOIN, UNIQUE 연산자를 동시에 사용하는 복잡한 쿼리를 작성할 경우
원인과 결과가 뒤집힌 상황이 발생할 수 있음.
Prisma 라이브러리 설치하기
# yarn 프로젝트를 초기화합니다.
yarn init -y
# express, prisma, @prisma/client 라이브러리를 설치합니다.
yarn add express prisma @prisma/client
# nodemon 라이브러리를 DevDependency로 설치합니다.(개발 환경에서 의존성을 가지게 한다.)
yarn add -D nodemon
# 설치한 prisma를 초기화 하여, prisma를 사용할 수 있는 구조를 생성합니다.
npx prisma init
Prisma는 우리가 Prisma를 터미널에서 사용할 수 있도록 도구를 설치하는 패키지
@prisma/client는 우리가 Node.js 에서 Prisma를 사용할 수 있게 한다.
nodemon은 개발 코드가 변경되었을 때 자동으로 서버 재시작을 해주는 패키지
schema.prisma 파일: prisma가 사용할 데이터베이스의 설정 정보를 정의하기 위해 사용하는 파일
- datasource : 데이터베이스에 대한 정의를 하기 위해 사용된다.
prisma가 데이터베이스를 연결할 수 있도록 설정, 관리하는데 필요한 정보를 설정하는 구문
Prisma model
- prisma의 model 구문은 특정 Table과 Column의 속성값을 입력하여,
데이터베이스와 Express 프로젝트를 연결(Mapping)시켜준다.
- model 구문은 prisma를 사용할 때 가장 많이 작성하게 될 구문,
prisma가 사용할 데이터베이스의 테이블 구조를 정의하기 위해 사용된다.
- schema.prisma 파일에서는 model에 작성된 정보를 바탕으로 prisma client를 통해
JavaScript에서 MySQL의 테이블을 조작할 수 있다.
model 구문은 JS에서 MySQL의 테이블을 사용하기 위한 다리 역할을 수행,
MySQL과 실제 연결되어 사용할 수 있게 도와준다.