본문 바로가기

FastAPI

alembic.ini파일과 migrations폴더를 삭제해도 되는가?

아니요, alembic.ini 파일과 migrations 폴더를 삭제해서는 안 됩니다. 이 파일들과 폴더는 Alembic을 사용한 데이터베이스 스키마 버전 관리의 핵심 구성 요소입니다. 
삭제하면 안 되는 주된 이유는 다음과 같습니다.
  • 스키마 변경 이력 관리: migrations 폴더(또는 사용자가 지정한 이름의 마이그레이션 환경 폴더) 안의 versions 폴더에는 데이터베이스 스키마의 변경 내역이 파이썬 스크립트 파일 형태로 저장됩니다. 이 스크립트들은 애플리케이션의 모델 변경 사항을 실제 데이터베이스에 적용(upgrade)하거나 이전 상태로 되돌리는(downgrade) 데 사용됩니다.
  • 환경 간 일관성 유지: 개발, 스테이징, 프로덕션 등 여러 환경에서 데이터베이스 스키마의 일관성을 유지하기 위해서는 이 마이그레이션 스크립트들이 필요합니다.
  • 설정 정보: alembic.ini 파일은 데이터베이스 연결 정보, 마이그레이션 스크립트 위치 등 Alembic의 전반적인 구성을 담고 있는 설정 파일입니다. 이 파일이 없으면 Alembic 명령어를 실행할 수 없습니다.
  • 버전 관리 시스템에 포함: 일반적으로 이 파일들과 폴더는 Git과 같은 버전 관리 시스템에 포함시켜 애플리케이션 소스 코드와 함께 관리해야 합니다. 
만약 데이터베이스 마이그레이션 이력을 완전히 초기화하고 싶다면, 단순히 파일을 삭제하는 대신 다음과 같은 절차를 고려해야 합니다.
  1. 데이터베이스 내의 alembic_version 테이블을 삭제합니다 (이 테이블은 현재 데이터베이스에 적용된 마이그레이션 버전을 기록합니다).
  2. migrations 폴더를 백업 후 삭제합니다.
  3. alembic init 명령어를 다시 실행하여 새로운 마이그레이션 환경을 생성합니다.
  4. 현재 모델 상태를 기반으로 초기 마이그레이션 스크립트를 생성하고, alembic stamp head 명령어로 데이터베이스의 버전을 현재 최신 상태로 설정합니다. 
결론적으로, 특별한 이유(예: 프로젝트 초기화)가 아니라면 해당 파일과 폴더를 삭제하지 말고 애플리케이션 코드와 함께 유지해야 합니다.
 

좀 더 자세히 설명하면....

Alembic에서 alembic.ini 파일과 migrations 폴더가 왜 중요한지, 그리고 삭제했을 때 어떤 문제가 발생하는지 더 자세히 설명해 드리겠습니다.
1. alembic.ini 파일: Alembic의 설정 센터
alembic.ini 파일은 Alembic 툴의 동작 방식을 제어하는 핵심 구성 파일입니다. 이 파일이 없으면 Alembic 명령어를 실행할 수 없습니다.
주요 역할:
  • 데이터베이스 연결 정보: sqlalchemy.url 키에 데이터베이스 주소, 사용자 이름, 비밀번호 등이 설정되어 있습니다. Alembic은 이 정보를 사용해 데이터베이스에 접속합니다.
  • 마이그레이션 폴더 위치 지정: script_location 키에 migrations 폴더의 경로가 지정되어 있습니다. 이 설정이 없으면 Alembic은 마이그레이션 스크립트를 어디서 찾아야 할지 모릅니다.
  • 기타 환경 설정: 로깅 설정, 애플리케이션의 모델 정의가 있는 Python 파일 경로 등 다양한 설정이 포함될 수 있습니다.
삭제 시 문제:
  • alembic revision, alembic upgrade, alembic downgrade 등 모든 Alembic 명령어가 실패합니다.
  • "Cannot find alembic.ini configuration file"과 같은 오류 메시지가 표시됩니다.

2. migrations 폴더: 데이터베이스의 타임라인
migrations 폴더는 데이터베이스 스키마 변경 내역이 저장되는 저장소입니다. 이 폴더 안에는 일반적으로 versions라는 하위 폴더가 있으며, 여기에 실제 마이그레이션 스크립트 파일들(예: XXXXXXXXX_create_users_table.py)이 저장됩니다.
주요 역할:
  • 변경 이력 저장: 각 파일은 특정 시점의 데이터베이스 변경 사항(테이블 생성, 컬럼 추가/삭제 등)을 기록합니다. 이는 파이썬 코드로 작성되어 있어 데이터베이스 종류에 상관없이 작동합니다.
  • 재현성 보장: 새로운 개발자가 프로젝트에 참여했을 때, 이 폴더의 스크립트들을 순서대로 실행(alembic upgrade head)함으로써 로컬 데이터베이스를 프로덕션 환경과 동일하게 구성할 수 있습니다.
  • 롤백 기능: 잘못된 변경 사항을 적용했을 때, 이전 버전 스크립트로 되돌아가는(alembic downgrade) 기능을 제공합니다.
삭제 시 문제:
  • 스키마 동기화 불가: 팀원 간 또는 서버 환경 간에 데이터베이스 스키마를 일관되게 유지할 수 없습니다.
  • 변경 내역 유실: 어떤 변경이 언제 일어났는지 추적할 수 없게 됩니다.
  • 배포 실패: CI/CD 파이프라인에서 마이그레이션 실행 단계가 실패하게 되어 애플리케이션 배포가 불가능해집니다.

요약 및 권장 사항
alembic.ini와 migrations 폴더는 애플리케이션의 소스 코드와 마찬가지로 매우 중요합니다.
  • 버전 관리 시스템(Git 등)에 반드시 포함시켜야 합니다.
  • 절대로 실수로 삭제하거나 .gitignore에 추가해서는 안 됩니다.
만약 부득이하게 마이그레이션 이력을 초기화해야 하는 상황이라면, 상위 설명에서 언급했듯이 alembic stamp head와 같은 Alembic 명령어를 사용하여 안전하게 초기화하는 방법을 따르는 것이 좋습니다.