Prisma로 스키마 마이그레이션 하기
스키마 마이그레이션 관리
경고
MongoDB는
prisma db push
만 지원하므로 이 문서가 적용되지 않습니다.- standalone인 경우 트랜잭션을 지원하지 않으므로 정상 작동하지 않을 수 있습니다.
prisma/migrations
디렉토리의<migration>/migration.sql
파일을 통해 스키마 변경 이력을 관리합니다.<migration>
=<timestamp>_<name>
- 데이터베이스의
_prisma_migrations
테이블에 마이그레이션 적용 이력을 관리합니다.
DevOps(개발 부터 배포까지)
- 개발
- 스키마 파일을 수정합니다.
- 마이그레이션 되돌리기를 위한
down.sql
파일을 생성합니다. prisma migrate dev
명령어를 실행합니다.- prisma에서 지원하지않는 옵션이나, 데이터 이동 등이 필요한 경우
prisma migrate dev --create-only
명령어로 마이그레이션 파일만 생성하고- 마이그레이션 파일을 수정한 후
prisma migrate dev
명령어를 실행합니다.
- 데이터베이스를 초기화하려면
prisma migrate reset
명령어를 실행합니다.- seed 설정이 되어있는 경우 초기화 후 자동으로 적용됩니다.
- 배포
- CI/CD 파이프라인에서 마이그레이션하는 경우
- 애플리케이션 배포 전에
prisma migrate deploy
명령어를 실행합니다.
- 애플리케이션 배포 전에
- Kubernetes를 사용하는 경우
initContainers
에서prisma migrate deploy
명령어를 실행합니다.
- CI/CD 파이프라인에서 마이그레이션하는 경우
위험
배포된 애플리케이션을 롤백하는 경우, 데이터베이스 스키마도 롤백되는 것은 아니므로 직접 롤백해야 합니다.
롤백
롤백 파일 생성
경고
마이그레이션 파일을 생성하기 전에 수행해야합니다.
스키마 변경 후 아래 두 명령어 중 하나를 실행합니다. 첫번째 명령어가 더 robust합니다.
prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-migrations prisma/migrations \
--shadow-database-url $SHADOW_DATABASE_URL \
--script \
> down.sql
prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-schema-datasource prisma/schema.prisma \
--script \
> down.sql
prisma migrate dev
를 수행 후 생성된 마이그레이션 디렉토리로 down.sql
파일을 옮깁니다.
Example
prisma/
├── migrations/
│ ├── 20240719141550_init/
│ │ └── migration.sql
│ ├── 20240719163748_add_post/
│ │ ├── down.sql
│ │ └── migration.sql
│ └── migration_lock.toml
└── schema.prisma
롤백
데이터베이스를 확인하여 수작업으로 롤백하거나 아래 명령어를 실행합니다.
prisma db execute --file prisma/migrations/<migration>/down.sql
마이그레이션 실패 때문에 롤백을 한 경우, 해당 마이그레이션이 롤백되었다는 것을 데이터베이스에 표시하기 위해 아래 명령어를 실행합니다.
prisma migrate resolve --rolled-back <migration>
마이그레이션 실패가 아닌 롤백의 경우 데이터베이스의 _prisma_migrations
에서 롤백된 마이그래이션을 삭제해야합니다.