Nest.js를 배워보자

🚀 prisma db push는 무엇인가요?

_Blue_Sky_ 2025. 12. 9. 23:58
728x90

prisma db push 명령어는 개발 환경에서 사용되는 Prisma CLI 명령어입니다.

이 명령어의 역할은 개발자가 작성한 최신 schema.prisma 파일의 내용을 읽어서, 실제 데이터베이스에 즉시 반영(푸시)하여 동기화하는 것입니다.

쉽게 말해, "스키마 파일에 변경사항이 있으면 마이그레이션(migration) 파일 생성 과정 없이 바로 DB 구조를 업데이트해!" 라고 명령하는 것입니다.


💡 prisma db push의 특징 및 용도

특징 설명
개발 전용 이 명령어는 개발 또는 테스트 환경에서만 사용해야 합니다. 데이터 손실 위험 때문에 프로덕션 환경에서는 절대 사용하지 않습니다.
즉시 반영 마이그레이션 파일(.sql 파일)을 생성하거나 기록을 남기지 않고, 변경 사항을 즉시 데이터베이스에 적용합니다.
빠른 반복 개발 작은 스키마 변경이 잦은 개발 초기 단계에서 개발 속도를 높이는 데 최적화되어 있습니다.
데이터 손실 경고 테이블 삭제, 컬럼 타입 변경 등 데이터 손실을 유발하는 변경이 있을 경우, 사용자에게 경고 메시지를 보여주고 진행 여부를 확인합니다.
 

📝 예시로 이해하기

다음과 같이 schema.prisma 파일에 User 모델이 있다고 가정해 봅시다.

1단계: 초기 모델 정의

// schema.prisma (최초 상태)

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

이 상태에서 prisma db push를 실행하면, MySQL 데이터베이스에 User 테이블이 생성됩니다.

npx prisma db push
# 결과: 데이터베이스에 id, email, name 컬럼을 가진 User 테이블이 생성됨.

2단계: 모델 변경 및 db push 실행

이제 개발자가 User 모델에 isActive라는 새로운 컬럼을 추가하고, name 컬럼을 필수로 변경했습니다.

// schema.prisma (변경 후)

model User {
  id       Int     @id @default(autoincrement())
  email    String  @unique
  name     String  // String? (선택)에서 String (필수)로 변경
  isActive Boolean @default(true) // 신규 컬럼 추가
}

다시 prisma db push를 실행하면, Prisma는 변경된 사항을 감지하여 MySQL에 적용합니다.

npx prisma db push
# 결과: 
# 1. User 테이블에 isActive 컬럼이 추가되고 기본값(true)이 설정됨.
# 2. User 테이블의 name 컬럼이 NULL 허용(선택)에서 NOT NULL(필수)로 변경됨.
# (name 컬럼 변경은 데이터 손실 위험이 있으므로 경고 메시지가 나올 수 있습니다.)

🆚 prisma db push vs. prisma migrate dev

두 명령어 모두 데이터베이스 구조를 변경하지만, 목적과 안전성에서 큰 차이가 있습니다.

명령어 목적 및 사용 환경 안전성 및 기록
prisma db push 빠른 개발/테스트 환경. (즉시 반영) 위험 높음. 마이그레이션 파일 없음. 데이터 손실 가능성이 높음.
prisma migrate dev 프로덕션 환경을 포함한 모든 환경. (체계적 관리) 안전함. 변경 사항을 추적하는 마이그레이션 파일 생성. 데이터 손실 방지 로직이 내장됨.
 
728x90