Skip to main content

Prisma로 스키마 마이그레이션 하기


스키마 마이그레이션 관리

warning

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 명령어를 실행합니다.
danger

배포된 애플리케이션을 롤백하는 경우, 데이터베이스 스키마도 롤백되는 것은 아니므로 직접 롤백해야합니다.

롤백

롤백 파일 생성

warning

마이그레이션 파일을 생성하기 전에 수행해야합니다.

스키마 변경 후 아래 두 명령어 중 하나를 실행합니다. 첫번째 명령어가 더 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에서 롤백된 마이그래이션을 삭제해야합니다.

CLI Reference