prisma db push / migrate difference

agnusdei·2023년 7월 21일
0

npx prisma migratenpx prisma db push는 Prisma를 사용하여 데이터베이스의 스키마를 관리할 때 사용하는 명령어입니다. 이 두 가지 명령어의 동작과 원리, 그리고 사용법에 대해 비교하며 설명하겠습니다.

  1. npx prisma migrate

npx prisma migrate는 소스 코드와 함께 관리되면서 데이터베이스의 스키마 변경을 처리하는 마이그레이션 파일을 생성하고, 적용하는 Prisma의 기능입니다. 이것은 자동으로 마이그레이션을 처리하거나 제어할 수 있습니다.

  • 내부 동작 및 원리:

    1. 개발자가 변경된 Prisma 스키마 파일을 저장합니다. (schema.prisma)
    2. npx prisma migrate 명령을 사용하여 시스템이 기존 데이터베이스의 스키마와 비교하여 변경사항을 찾습니다.
    3. 시스템은 변경 사항이 발견되면, 소스 코드와 함께 저장되는 새 마이그레이션 파일을 생성합니다.
    4. 생성된 마이그레이션 파일은 다음의 두 가지 SQL 파일로 구성됩니다.
      • migrate.sql: 변경 사항에 대한 SQL 문이 포함되어 있습니다.
      • rollback.sql: 변경 사항을 되돌리는데 사용되는 SQL 문이 포함되어 있습니다.
    5. npx prisma migrate를 실행하면, 생성된 마이그레이션 파일들을 차례로 데이터베이스에 적용하여 스키마를 업데이트합니다.
  • 관련 CLI:

    • npx prisma migrate dev: 개발 환경에서 사용되며, 변경된 스키마를 자동으로 마이그레이션 파일로 생성하고, 이를 데이터베이스에 적용합니다.
    • npx prisma migrate deploy: 프로덕션 환경에서 사용되며, 이미 생성된 마이그레이션 파일들을 데이터베이스에 적용합니다.
  1. npx prisma db push

npx prisma db push는 개발 및 프로토타이핑 과정에서, 데이터베이스의 스키마를 간편하게 변경할 수 있는 기능입니다. 이것은 마이그레이션 파일을 거치지 않고 직접 변경 사항을 저장한 후, 데이터베이스 스키마를 업데이트합니다.

  • 내부 동작 및 원리:

    1. 개발자가 변경된 Prisma 스키마 파일을 저장합니다. (schema.prisma)
    2. npx prisma db push 명령을 실행하면, 시스템이 기존 데이터베이스의 스키마와 비교하여 변경사항을 찾습니다.
    3. 변경 사항이 발견되면, 이를 즉시 데이터베이스에 적용하여 스키마를 업데이트합니다.
    4. 이 명령어를 실행할 때, 추가 옵션을 사용하여 데이터의 삭제를 허용하거나 기존 데이터를 유지할 수 있습니다.
    5. 이 주요한 차이로 인해, db push는 마이그레이션 기록을 저장하지 않고 변경 사항을 직접 처리하므로 개발 및 프로토타이핑에 적합하지만, 프로덕션 환경은 비추천합니다.
  • 관련 CLI:

    • npx prisma db push: 변경된 스키마를 바로 데이터베이스에 푸시합니다. 이 때는 마이그레이션 기록이 남지 않습니다.
    • npx prisma db push --force-reset: 변경된 스키마를 데이터베이스에 푸시하면서, 기존 데이터를 모두 초기화합니다.

요약하면:

  • npx prisma migrate: 개발 및 프로덕션 환경에서 데이터베이스 스키마 변경을 안전하게 처리하기 위한 솔루션입니다. 마이그레이션 파일을 생성하고 관리하며 데이터베이스의 변경사항을 기록합니다.
  • npx prisma db push: 개발 및 프로토타이핑 과정에서 데이터베이스 구조를 빠르게 변경할 수 있는 기능으로, 마이그레이션 파일이 필요하지 않습니다. 이 명령어를 사용하면 변경 사항이 즉시 반영되지만, 프로덕션 환경에서는 권장되지 않습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

정말 좋은 정보 감사합니다!

답글 달기