DataBase/PostgreSQL

EF Core 마이그레이션 재설정 및 재적용 방법

검은고양이개발자 2025. 3. 31. 13:16
반응형

EF Core를 사용하다 보면 개발 중 데이터베이스 스키마에 여러 번 변경이 발생하고, 그 결과 여러 마이그레이션 파일이 생성됩니다. 때로는 테스트 환경이나 초기 개발 단계에서 기존에 적용했던 마이그레이션을 제거하고 새롭게 시작해야 할 필요가 있습니다. 이번 포스트에서는 기존 DB에 적용된 마이그레이션을 제거하고 새로운 마이그레이션으로 재적용하는 방법을 단계별로 설명합니다.

1. 상황 이해

  • 현재 상황:
    기존에 여러 마이그레이션이 적용된 상태에서, 코드 변경으로 인해 스키마를 다시 초기화하거나 새롭게 정의해야 하는 경우.
  • 문제점:
    이미 데이터베이스에 적용된 마이그레이션이 존재하면, dotnet ef migrations remove 명령어로 단순히 제거할 수 없습니다. (이미 DB에 반영된 경우 “마이그레이션 제거 불가” 오류가 발생)

2. 옵션 선택

옵션 A: 데이터베이스 초기화 (Drop) 후 새 마이그레이션 적용

  • 장점:
    모든 데이터가 사라지므로, 깔끔하게 최신 스키마로 재설정할 수 있습니다.
  • 단점:
    프로덕션 환경에서는 사용 불가하며, 테스트용 혹은 개발 환경에서만 적용 가능.

옵션 B: 새로운 마이그레이션을 생성하여 변경 사항 반영

  • 기존 마이그레이션을 직접 제거할 수 없으므로,
    "스냅샷 재생성"을 위한 새로운 마이그레이션을 생성하거나,
    수동으로 DB 스키마를 변경하는 방법을 고려할 수 있습니다.

3. 옵션 A: 데이터베이스 초기화 후 재적용

  1. 데이터베이스 백업:
    현재 데이터베이스의 중요한 데이터를 백업하세요.
  2. 데이터베이스 삭제:
    Visual Studio의 SQL Server Object Explorer나 SQL Server Management Studio(SSMS)를 사용하거나
    CLI에서 아래 명령어로 삭제할 수 있습니다.--force 옵션은 삭제 확인 없이 실행합니다.
  3. dotnet ef database drop --force
  4. 마이그레이션 초기화:
    기존 마이그레이션 파일들을 삭제하거나, 새 프로젝트로 클린 빌드를 진행합니다.
    (만약 Git 등 버전 관리 시스템을 사용 중이라면, 삭제하기 전에 백업해 두세요.)
  5. 새로운 마이그레이션 생성:
    아래 명령어로 새로운 마이그레이션을 생성합니다.마이그레이션 이름은 상황에 맞게 (예: InitialCreate 혹은 ResetMigration) 지정하세요.
  6.  
    dotnet ef migrations add InitialCreate
  7. 데이터베이스 업데이트:
    생성된 마이그레이션을 기반으로 데이터베이스를 최신 상태로 업데이트합니다.
  8. dotnet ef database update

4. 옵션 B: 새로운 마이그레이션을 생성하여 기존 마이그레이션 수정

기존 마이그레이션이 이미 여러 데이터베이스에 적용되었거나 삭제할 수 없는 경우,
새로운 마이그레이션을 생성하여 스키마 변경을 반영하는 방법입니다.

  1. 모델 업데이트:
    코드상에서 데이터 모델을 최신 상태로 수정합니다.
  2. 새 마이그레이션 생성:마이그레이션 이름은 변경사항을 잘 나타낼 수 있도록 지정하세요.
  3. dotnet ef migrations add UpdateSchema_YYYYMMDD
  4. 데이터베이스 업데이트:
  5. dotnet ef database update

5. 주의 사항

  • 데이터 손실 주의:
    데이터베이스를 삭제하는 옵션 A는 모든 데이터가 삭제됩니다. 반드시 백업 후 진행하세요.
  • 마이그레이션 관리:
    프로덕션 환경에서는 마이그레이션 히스토리를 보존하는 것이 좋으므로, 초기 개발 단계에서만 데이터베이스를 초기화하는 것이 안전합니다.
  • 버전 관리:
    마이그레이션 파일은 코드베이스의 일부이므로, 버전 관리를 철저히 하여 다른 팀원들과의 충돌을 방지하세요.
반응형