
개발을 하다 보면 데이터베이스 스키마 변경이 필요할 때가 많다. 새로운 기능을 추가하거나, 기존 테이블 구조를 수정하는 등 다양한 이유로 테이블을 변경해야하기 때문이다. 하지만 변경 사항을 수동으로 관리하면 여러 문제를 겪을 수 있다.
• DB 변경 사항을 추적하기 어렵다 → 누가 언제 어떤 변경을 했는지 기록이 남지 않는다
• 환경별 일관성이 부족하다 → 로컬, 스테이징, 프로덕션 환경 간 스키마가 다를 수 있다
이런 문제를 해결하기 위해 migration 도구를 사용한다.
기존에는 TypeORM을 사용하여 migration 작업을 처리해주었었는데, 회사에서 Prisma를 사용하게 되면서 Prisma Migration을 적용할 기회가 생겼다.
이번 글에서는
데이터베이스 변경 사항을 기준으로 Prisma Schema를 업데이트하고 마이그레이션을 적용하는 방법
Prisma Schema를 기준으로 데이터베이스를 업데이트하고 마이그레이션을 적용하는 방법
이 두 가지를 소개하고, Prisma Migrate를 활용한 데이터베이스 마이그레이션 관리법을 설명하고자 한다.
우선 prisma/migrations 디렉토리에 마이그레이션 폴더를 생성한다.
- 예시: 0_db2schema
- 마이그레이션 파일의 순서가 중요하므로 번호는 순차적으로 증가해야 한다.
$ npx prisma migrate diff --from-schema-datamodel prisma/schema.prisma --to-schema-datasource prisma/schema.prisma --script > prisma/migrations/0_db2schema/migration.sql
npx prisma migrate resolve –-applied {마이그레이션 이름}

_prisma_migrations 테이블이 생성되며, 마이그레이션 정보는 해당 테이블에 적용되어 마이그레이션 이력을 관리하게 된다$ npx prisma db pull

db를 바탕으로 schema.prisma를 업데이트 해준다.
schema.prisma 포맷팅DB에서는 일반적으로 snake_case를 사용하지만, 코드에서는
• 모델명: PascalCase (User, Order)
• 필드명: camelCase (userId, createdAt)
형식을 따르는 것이 일반적이다.
그러나 db pull 명령어를 실행하면 DB의 테이블 및 컬럼명을 그대로 가져와 모델을 생성하기 때문에, snake_case가 적용된다.
이를 컨벤션에 맞춰 변환하기 위해서는 model에 @@map()을 사용하여 우리가 원하는 형식으로 매핑을 해줘야한다
그런데 직접 수정해야 할 모델과 필드의 수가 너무 많고 그걸 수정하는 과정에서의 휴먼에러도 방지하기 위해
prisma-case-format라는 패키지를 사용하여 이를 한번에 수정해주도록 만들어 주었다
package.json 스크립트 추가
"scripts": {
"prisma:format": "npx prisma-case-format -f prisma/schema.prisma --table-case=pascal,singular --field-case=camel --map-field-case=snake"
}
스크립트 실행
$ npm run prisma:format
• 실행 후 schema.prisma의 모델 및 필드명이 컨벤션에 맞게 자동 정리된다.

npx prisma generate
• Prisma Client를 최신 상태로 생성하여 사용할 준비를 한다.
schema.prisma 업데이트schema.prisma 파일에서 모델을 수정하거나 추가한다.schema.prisma 포맷팅$ npm run prisma:format
schema.prisma 업데이트 후 마이그레이션 파일 생성$ npx prisma migrate dev –create-only
{timestamp}_{마이그레이션 이름} 형식으로 자동 생성된다$ npx prisma migrate dev
• DB 변경 사항을 기준으로 Prisma Schema를 업데이트하는 방법과 Prisma Schema를 기준으로 DB를 업데이트하는 방법을 비교하며 정리했다.
• Prisma Migrate를 활용하면 일관된 마이그레이션 관리가 가능하고, 환경별 차이를 최소화할 수 있다.
이제 프로젝트에서 Prisma Migration을 활용해 일관된 스키마 변경 관리를 시작해보자! 🚀