누적된 DB 마이그레이션을 스키마에 통합해 혼동 해소
목차
마이그레이션 파일이 50개, 100개 쌓이면서 schema.sql이 현재 운영 DB와 맞지 않기 시작했다. 이번에 누적된 마이그레이션을 모두 schema.sql에 통합하는 폴드인 작업을 진행했다.
왜 이런 문제가 발생했는가
처음엔 간단했다. 초기 schema.sql에 전체 스키마를 정의하고, 이후 변경사항마다 migration_XXX.sql 파일을 추가하는 방식. 명확하고 git으로 이력 추적도 깔끔했다.
하지만 시간이 지나면서 차이가 누적됐다:
- 마이그레이션 파일이 한두 개씩 쌓여 점점 많아진다
- schema.sql은 초기 상태 그대로 멈춰있다
- 새로운 환경(로컬, 테스트 서버, 프리뷰)을 셋업할 때마다 schema.sql 적용 후 모든 마이그레이션을 순차 재생해야 한다
- 팀원들이 "현재 스키마가 정확히 뭐야?"라고 물어도 명확히 답하기 어렵다
- schema.sql과 실제 운영 DB 상태의 차이가 커지면서 혼동이 생긴다
결국 schema.sql이 "옛날 스냅샷"처럼 느껴지기 시작했다.
폴드인의 의미
폴드인(fold-in)은 단순한 작업이다: 지금까지의 모든 마이그레이션을 schema.sql에 통합해서 schema.sql이 현재 운영 DB의 정확한 상태를 반영하도록 정렬하는 것.
-- 폴드인 전
-- schema.sql
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255)
);
-- migration_001_add_email.sql
ALTER TABLE users ADD COLUMN email VARCHAR(255);
-- migration_002_add_indexes.sql
CREATE INDEX idx_users_email ON users(email);
이를 폴드인하면:
-- 폴드인 후 schema.sql (모든 변경사항 통합)
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
CREATE INDEX idx_users_email ON users(email);
이제 새 환경을 셋업할 때 schema.sql 한 번이면 끝난다. 마이그레이션 파일 100개를 순차 재생할 필요가 없다.
언제 필요한가
여러 신호가 있었다:
| 상황 | 구체적 어려움 |
|---|---|
| 새 팀원 온보딩 | schema.sql + 마이그레이션 전체 재생에 10분+ 소요 |
| CI 파이프라인 | 매 빌드마다 마이그레이션 재생으로 테스트 환경 구성 시간 증가 |
| 코드 리뷰 | "이 변경사항 schema.sql에 이미 있지 않나?" 혼동 |
| 협업 | 팀원 간 "정확한 현재 스키마가 뭐야?"라는 질문 반복 |
폴드인 후 이런 혼동들이 거의 사라진다. schema.sql이 "진실의 원천"이 되기 때문이다.
실제 작업 과정
- 현재 운영 DB 상태를 명확히 파악 (schema 추출)
- schema.sql에 모든 최신 정의 반영
- 테스트 환경에서 schema.sql만으로 재구성 후 실제 DB와 비교 검증
- 기존 마이그레이션 파일 비활성화 또는 보관
- 팀 공지 (향후 스키마 변경 방식 안내)
주의할 점:
- schema.sql 적용 후 실제 운영 DB와 정확히 일치하는지 여러 번 확인
- 마이그레이션 파일 삭제 전 git 히스토리가 안전하게 보관되는지 확보
- 팀원 모두가 로컬 DB를 최신 상태로 업데이트했는지 확인
회고
이 작업을 통해 몇 가지를 배웠다.
유지보수성은 주기적 정리가 필요하다. 마이그레이션 방식은 처음엔 깔끔하지만, 일정 수준 이상 쌓이면 번거로워진다. 팀의 성장에 맞춰 이런 "정리 작업"을 의도적으로 계획할 필요가 있다.
팀 소통이 스키마 정의보다 중요할 수도 있다. schema.sql이 현재 상태를 반영하지 못하면 팀원 간 혼동이 생긴다. 특히 새로 합류한 팀원이 "현재 스키마가 뭐라고 되어 있어요?"라고 물을 때 명확히 답할 수 없으면 신뢰가 깨진다.
개발자 경험도 작은 곳부터. 새 팀원 입장에선 "마이그레이션 100개를 재생해야 합니다" vs "schema.sql 한 번으로 끝입니다" 의 차이가 크다. 온보딩 시간 단축과 스트레스 감소는 예상보다 중요한 신호다.
다음엔 마이그레이션이 일정 수(20-30개?) 이상 쌓이면 자동으로 폴드인하는 기준을 팀과 정해두는 게 좋을 것 같다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.