Node와 Typesscript를 위한 최신 트렌드의 ORM이다. Prisma의 동작 방식은 기존 ORM의 동작 방식과는 조금 다르다. Sequelize나 TypeORM과 같은 기존 ORM은 DB 호스트에 직접적인 Connectijon을 이루어 트랜잭션을 수행하는데 Prisma 같은 경우에는 scala로 작성된 Prisma의 서버가 DB호스트를 앞단에서 관리한다.
npm install prisma --save-dev // prisma 설치 (개발 dependency로 설치)
npm install @prisma/client --save // client 노드 모듈 패키지 다운
npx prisma init // prisma 초기 세팅
prisma/schema.prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
.env
DATABASE_URL = "mysql://USERNAME:PASSWORD@localhost:3306/DATABASE_NAME"
├── node_modules
├── prisma
│ └── schema.prisma
├── package.json
└── server.js
prisma/schema.prisma
model articles {
id Int @id @default(autoincrement())
user_id Int
title String
body String
created_at DateTime? @default(now())
updated_at DateTime?
deleted_at DateTime?
users users @relation(fields: [user_id], references: [id])
comments comments[]
@@index([user_id], name: "user_id")
}
model comments {
id Int @id @default(autoincrement())
article_id Int
user_id Int
body String
created_at DateTime? @default(now())
updated_at DateTime?
deleted_at DateTime?
articles articles @relation(fields: [article_id], references: [id])
users users @relation(fields: [user_id], references: [id])
@@index([article_id], name: "article_id")
@@index([user_id], name: "user_id")
}
model users {
id Int @id @default(autoincrement())
email String @unique
password String
created_at DateTime? @default(now())
updated_at DateTime?
deleted_at DateTime?
articles articles[]
comments comments[]
}
npx prisma migrate dev --name init
마이그레이션이 성공하면 prisma/migrations 디렉토리에 생성시각_init
이라는 이름의 마이그레이션 폴더가 생성되고 내부에는 데이터베이스에 직접 테이블을 생성해줄 migration.sql
파일이 있다.
├── node_modules
├── prisma
│ ├── migratinos
│ │ └── 20201212000000_init
│ │ └── migration.sql
│ └── schema.prisma
├── package.json
└── server.js