TIL#53 Node) Prisma

luneah·2021년 12월 18일
0

Node

목록 보기
5/6
post-thumbnail

Prisma

Node와 Typesscript를 위한 최신 트렌드의 ORM이다. Prisma의 동작 방식은 기존 ORM의 동작 방식과는 조금 다르다. Sequelize나 TypeORM과 같은 기존 ORM은 DB 호스트에 직접적인 Connectijon을 이루어 트랜잭션을 수행하는데 Prisma 같은 경우에는 scala로 작성된 Prisma의 서버가 DB호스트를 앞단에서 관리한다.

  1. 패키지 설치 : 원하는 위치에 디렉토리를 생성한 후, Sequelize와 함께 mysql을 사용할 수 있도록 아래 두 패키지를 설치한다.
npm install prisma --save-dev      // prisma 설치 (개발 dependency로 설치)
npm install @prisma/client --save  // client 노드 모듈 패키지 다운
  1. Prisma 시작
npx prisma init // prisma 초기 세팅
  1. 데이터베이스 연결
  • prisma/schema.prisma
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
  • .env
DATABASE_URL = "mysql://USERNAME:PASSWORD@localhost:3306/DATABASE_NAME"
  1. Prisma 모델 생성
    데이터베이스를 연결했으니, Prisma를 통해서 데이터베이스에 테이블을 정의해보자. 이렇게 코드로 데이터베이스를 생성하는 과정을 "모델을 만든다." 라고 표현한다.
├── 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[]
}
  1. Migration
    코드로 필요한 모델을 모두 생성했으니, 해당 모델을 테이블로 변경해준다.
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
profile
하늘이의 개발 일기

0개의 댓글