prisma
는 ORM으로써 javascript 객체
와 데이터베이스의 관계
를 연결
해주는 도구이다.
prisma와 같은 ORM은 여러가지의 관계형 데이터베이스(RDB)를 사용할 수 있다.
MySQL
이나 강의에서 다루지 않는 Oracle
, MariaDB
와 같은 다양한 데이터베이스를 사용할 수 있다.
ORM의 장단점
장점
- 사용하는 데이터베이스가 언제 바뀔 지 알 수 없다
- 데이터베이스에서 사용하는 DB또는 Table속성이 변경되었을 때 빠르게 수정이 가능하다.
단점
- 복잡한 쿼리를 작성할 경우
ORM
으로 구현하기 위해SQL
보다는ORM
을 더 깊게 이해해야 하는 상황- 극한의 성능을 요구하는 쿼리가 필요한 상황에서는
Raw Query
를 사용하는 것이 더욱 좋을 수 있다.
npm init -y
npm i express prisma @prisma/client
// prisma 초기화
npx prisma init
schema.prisma
파일은 prisma가 사용할 데이터베이스의 설정 정보를 정의하기 위해 사용하는 파일이다.
generator
- prisma 클라이언트를 생성하는 방식을 설정하는 구문이다.
datasource
- 데이터베이스에 대한 정의를 하기 위해 사용된다.
- prisma가 어떤 데이터베이스 엔진을 사용할 것인지, 데이터베이스의 위치는 어디인지 등의 정보를 정의
// schema.prisma
datasource db {
// MySQL 데이터베이스 엔진을 사용합니다.
provider = "mysql"
// 데이터베이스 연결 정보를 .env 파일의 DATABASE_URL 로부터 읽어옵니다.
url = "mysql://이름:비번@RDS엔드포인트주소/프로젝트이름"
}
Prisma의 model 구문은 특정 Table과 Column의 속성값을 입력하여, 데이터베이스와 Express 프로젝트를 연결 (Mapping)시켜줍니다
//schema.prisma
model Users {
userId Int @id @default(autoincrement()) @map("userId")
email String @unique @map("email")
password String @map("password")
refreshToken String @default("asdf") @map("refreshToken")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
@@map("Users")
}
데이터 유형:
Int
,String
,Datetime
데이터 유형 뒤에?
가 붙으면NULL
을 허용
고유 값 =>@unique
@@map
은Users
테이블을 MySQL에서도 Users란 이름으로 사용하겠다는 뜻
=>@@map
을 사용하지 않으면 테이블명의 대문자는 전부 소문자로 치환됨
Prisma CLI
prisma db push
schema.prisma
파일에 정의된 설정값을 실제 데이터베이스에 반영한다.
내부적으로prisma generate
가 실행
데이터베이스 구조를 변경하거나 새로운 테이블을 생성
prisma init
- prisma를 사용하기 위한 초기 설정을 생성
schema.prisma
파일과 같은 필요한 설정 파일들이 생성
prisma generate
- prisma client를 생성하거나 업데이트 한다.
대표적으로shcema.prisma
에 변동 사항이나 데이터베이스 구조가 변경되었을 때 사용
prisma db pull
- 현재 연결된 데이터베이스의 구조를
schema.prisma
파일로 가져온다.