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 |