서비스를 멈추지 않는 DB 변경의 확장·축소 순서
운영 DB의 컬럼을 바로 이름 바꾸거나 삭제하면 구 버전 애플리케이션이 아직 그 필드를 읽고 있을 수 있습니다. 무중단 변경은 확장과 축소를 여러 배포로 나눕니다.
데이터 흐름의 경계를 확인한다
첫 단계는 새 컬럼이나 테이블을 추가하되 기존 읽기·쓰기가 계속 동작하도록 만드는 것입니다. 기본값과 null 허용 여부가 큰 테이블의 잠금이나 백필 비용에 영향을 줄 수 있습니다. 실제 DB 엔진의 변경 방식도 확인해야 합니다.
실패와 중복 처리를 정한다
전환 기간에는 새 버전과 구 버전이 동시에 존재할 수 있습니다. 쓰기 경로를 어디에 둘지, 데이터를 양쪽에 동기화할지, 언제 새 읽기 경로로 바꿀지 정합니다. 이중 쓰기를 하면 실패 시 불일치 복구 방법도 필요합니다.
작은 범위에서 재처리한다
새 필드의 과거 데이터는 배치로 채우고 원본과 대조합니다. 모든 인스턴스가 새 경로를 사용하고 되돌리기 기간이 끝나기 전에는 옛 필드를 삭제하지 않습니다. 배포 순서를 자동 점검할 수 있게 체크리스트를 둡니다.
지연과 불일치를 관측한다
새·구 필드 불일치 건수, 백필 진행률, 오래된 앱 인스턴스 수, DB 잠금 시간을 봅니다. 코드가 새 필드를 쓰더라도 배치 작업이나 관리자 도구가 옛 필드를 참조할 수 있습니다. 사용처 검색과 런타임 관찰을 함께 해야 합니다.
복구 절차를 유지한다
최종 삭제는 가장 마지막 단계입니다. 롤백 계획이 구 컬럼에 의존하는지 확인하고, 삭제 전 백업과 복구 절차를 시험합니다. 스키마 변경을 한 커밋으로 끝내려는 압박보다 실제 서비스 공존 기간을 설계하는 일이 중요합니다.
현장에 적용할 때의 순서
- 호환되는 새 구조 먼저 추가
- 백필·읽기 전환·구조 삭제 분리
- 구·신 앱 공존 기간 테스트
주의할 실패: 추가와 삭제를 한 배포로 묶기
관찰할 지표: 불일치·백필·오래된 인스턴스
적용 전 체크리스트
- 호환되는 새 구조 먼저 추가
- 백필·읽기 전환·구조 삭제 분리
- 구·신 앱 공존 기간 테스트
참고 자료
PostgreSQL — ALTER TABLE. 스키마 변경 명령과 DB 동작은 PostgreSQL 공식 문서를 참고했습니다. 확장·전환·축소 순서는 적용 제안입니다.
이미지와 도식은 이해를 돕기 위한 개념 시각화입니다. 특정 고객의 실제 설비·데이터·화면을 재현한 것이 아닙니다.
#DB마이그레이션 #무중단배포 #확장축소 #스키마변경 #데이터백필 #네이처프랙탈 #시스템설계 #서비스운영 #안정성 #데이터활용
이 주제를 실제 시스템으로 옮기려면 웹 서비스 개발 살펴보기