회고 & 기록/기타 경험기

[트러블슈팅] Django Migration rename 감지로 인해 CI가 멈춘 문제

yubi5050 2026. 5. 7. 20:00

🧩 문제 상황

Jenkins 환경에서 migration 자동화를 구성하던 중,
Django migration 단계에서 빌드가 멈추는 문제가 발생했다.

문제 상황은 단순했다.

updated_at → action_at

 

처럼 필드명을 변경한 뒤:

python manage.py makemigrations

 

를 수행했는데,

CI 환경에서 프로세스가 종료되지 않았다.

 

 

🚨 원인 분석 

필드명을 변경하는 경우, migration 도구 들은 '변경'인지, '기존 컬럼 삭제' + '신규 컬럼 생성'인지 알 수가 없다.

 

그래서 Django migration은 rename 상황에서 자동으로 판단하지 않고 질문을 한다.

Was this field renamed? [y/N]

 

 

여기서:

  • Y → rename / alter 처리
  • N → 기존 컬럼 삭제 + 신규 컬럼 생성

으로 동작한다.

 

문제는 Jenkins 같은 CI 환경에서는 interactive input을 받을 수 없다는 점이었다.

다른 옵션 중 아래

--noinput

 

옵션은 자동으로 N 처리 (기존 컬럼 삭제 + 신규 컬럼 생성) 되기 때문에,

의도치 않게 create/delete migration이 생성될 수 있었다.

 

🛠 해결

최종적으로는 아래 파이프 방식으로 처리했다.

yes y | python manage.py makemigrations

 

📌 Django vs Alembic(FastAPI) Migration 차이

 

이번 이슈를 통해 Django migration과 Alembic의 차이도 체감하게 되었다.

Django Migration

  • rename 어느 정도 자동 감지
  • interactive 기반 질문 존재
  • 자동화 수준 높음 (약 semi-auto-migration 느낌)

 

 

Alembic(FastAPI)

반면 Alembic은:

alembic revision --autogenerate

를 사용해도 rename 자동 감지가 약한 편이다.

 

그래서 보통:

op.alter_column(...)

같은 migration 코드를 직접 수정하게 된다.

대신 interactive prompt는 거의 없어서 CI 환경에서는 단순한 편이었다.

 

🔥 한 줄 요약

Django migration은 auto성의 위한 interactive prompt를 제공한다. 

fastapi migration은 alembic 에서 확인하기 어렵고, 직접 migration 변형 코드를 참고 해보아야 한다.