🌿 Node

prisma migration

ji-hyun 2022. 5. 14. 23:01

migration

마이그레이션은 손쉽게 애플리케이션의 데이터베이스를 수정하고 데이터베이스 스키마를 공유할 수 있도록 해주며 데이터베이스를 위한 버전 컨트롤과 같은 역할을 한다. 마이그레이션은 보통 라라벨의 스키마 빌더와 쌍을 이루어 애플리케이션의 데이터베이스 스키마를 손쉽게 만들 수 있다.

 

설명은 장황하지만 쉽게 생각하면 수동으로 테이블을 수정,삭제,생성 하는게 아니고 migration을 생성 후 적용 하면 손쉽게 데이터베이스를 수정 할 수 있다.

 

 

 

migration 장점

 

DB 스키마를 쉽게 공유할 수 있다.

migration 이력이 남아 버전 관리를 할 수 있다.

 

 

 

 

 

 

 

 

 

prisma migrate

Does not apply for MongoDB: Instead of migrate dev and related commands, db push is used for MongoDB.

 

 

Prisma Migrate는 다음을 가능하게 하는 필수 데이터베이스 스키마 마이그레이션 도구 입니다.

  • 데이터베이스 스키마가 진화함에 따라 Prisma 스키마 와 동기화된 상태로 유지
  • 데이터베이스의 기존 데이터 유지

 

 

Prisma Migrate generates a history of .sql migration files, and plays a role in both development and deployment.

 

 

 

 

공식 문서에 따르면 prisma 는 아래의 구성 요소로 이루어져 있다.

 

  • Prisma Client: Auto-generated and type-safe query builder for Node.js & TypeScript
  • Prisma Migrate: Migration system
  • Prisma Studio: GUI to view and edit data in your database

 

 

 

 

 

 

1. prisma 설치

 

npm i prisma dotenv -D
npm i @prisma/client

 

 

 

2. 설치 후, npx prisma init을 실행하면 프로젝트 루트 디렉토리 내에 아래 두 파일이 생성된다.

 

npx prisma init

 

  • prisma/schema.prisma: 자세한 용도는 아래에서 언급
  • .env: 데이터베이스 연결을 위한 환경변수를 정의할 때 사용

 

 

 

 

3. 데이터베이스 준비

 

.env 에 다음과 같이 적어줌

 

DATABASE_URL="mysql://USER:PASSWORD@HOST:PORT/DATABASE"

 

 

 

 

4. prisma schema 파일 작성

 

Prisma Schema에서 정의한 모델을 바탕으로, Migrate 과정을 통해 MySQL에 실제 DB의 테이블을 생성할 수 있다.

 

Migrate를 실행한 후 MySQL의 해당 데이터베이스에 접속해서 테이블을 확인해보면, Prisma schema에서 작성한 model을 토대로 table이 생성된 것을 확인할 수 있다.

 

 

mysql> show tables;
+-------------------------+
| Tables_in_my_database   |
+-------------------------+
| _prisma_migrations      |
| categories              |
| drinks                  |
+-------------------------+

 

 

 

 

 

 

 

 

Prisma Client로 DB 조작하기

위의 Prisma schema, Prisma Migrate를 통해, Prisma에서 작성한 model 이 실제 DB 에 table로 추가, 반영되었다.

이제 Prisma를 통해 Node.js 환경에서 데이터베이스의 데이터에 접근하고 제어, 조작하는 방법을 알아보자.

이때 필요한 것이 바로 Prisma Client이다.

 

 

 

Prisma Client 활용

예를 들면 CRUD 작업을 행할 수 있다.

 

 

Create

Prisma Client의 쿼리문 중에 create라는 메소드가 있다.
아래의 예시는 create를 사용하여 유저와 post를 같이 생성한 것이다.

 

const user = await prisma.user.create({
  data: {
    name: "Alice",
    email: "alice@prisma.io",
    posts: {
      create: { title: "Join us for Prisma Day 2020" },
    },
  },
})

 

 

 

 

Read

findUnique라는 메소드를 사용하여, id가 99인 record를 찾고 있다.

 

const user = await prisma.user.findUnique({
  where: {
    id: 99,
  },
})

 

 

 

Update

update라는 메소드를 사용하여, 조건에 해당하는 post를 update하고 있다.

 

const post = await prisma.post.update({
  where: { id: 42 },
  data: { published: true },
})

 

 

 

Delete

delete 메소드를 사용하여, 조건에 해당하는 user를 delete하고 있다.

 

const deleteUser = await prisma.user.delete({
  where: {
    email: 'bert@prisma.io',
  },
})

 

 

위에서 사용한 API 외에도 다양한 Prisma Client API가 존재한다.
자세한 내용은 Prisma Client API의 공식문서를 참고.

 

 

 

'🌿 Node' 카테고리의 다른 글

commonJs 가 뭔데...  (1) 2022.02.21
express 공부  (0) 2022.02.20
espress 기초 다지기 - 미들웨어편  (0) 2022.02.20
express 파일 구조와 몽고 디비  (0) 2022.02.16
노드 이해하기2  (1) 2022.02.13