데이터베이스 migration(스키마 변경)은 CI/CD의 가장 까다로운 부분 중 하나입니다 — 상태가 없는 애플리케이션 코드와 달리, 데이터베이스는 단순히 교체하거나 rollback할 수 없는 **상태(state)**를 보유합니다. migration을 신중하게(자동화, 하위 호환성, 안전한 패턴) 처리하는 것은 안정적인 deploy에 필수적입니다.
왜 데이터베이스 migration이 어려운가
앱 코드는 상태가 없음 (교체, 자유롭게 rollback). 데이터베이스는 STATE를 보유:
→ 컬럼을 삭제하거나 데이터를 변형한 migration을 단순히 "rollback"할 수 없음
(데이터가 사라졌을 수 있음) → 파괴적 변경은 rollback이 위험/불가능
→ deploy 중, 이전과 새 앱 코드가 동시에 실행될 수 있음 (rolling deploy) —
둘 다 그 순간의 데이터베이스 스키마와 동작해야 함
→ 스키마 변경은 코드 deploy와 신중한 조정이 필요.
pipeline에서 migration 자동화
→ migration을 코드로 정의 (버전 관리된 migration 파일; Flyway, Liquibase, ORM 도구)
→ migration을 pipeline 단계로 실행 (deploy 시 대기 중인 migration 적용)
→ migration은 버전 관리되고 순서대로, 멱등하게 적용됨
→ production 전에 staging에서 migration 테스트
