운영 원칙
공존 구간을 먼저 만든다
컬럼을 바로 바꾸지 않고
구버전 경로와 신버전 경로가 함께 살아도 안전한 상태
를 만든 뒤, 마지막에만 옛 경로를 제거합니다.
그래서 스키마 변경이 한 번의 위험한 작업이 아니라, 서비스가 요청을 계속 처리하는 여러 배포 단계로 나뉩니다.
롤백
Contract 직전까지는 이전 코드가 기대하는
name
경로가 남아 있어 되돌리기 쉽습니다.
무중단
새 구조를 먼저 준비하고 데이터를 맞춘 뒤 전환하므로, 전환 순간에 값 공백이나 긴 잠금이 생기지 않습니다.
단계
1. Expand
새 컬럼만 먼저 추가
앱은 그대로 두고 스키마만 넓힙니다.
2. Sync
기존 값을 채우며 공존
백필과 동기화로 두 컬럼을 같은 의미로 유지합니다.
3. Switch
애플리케이션 전환
읽기와 쓰기의 기준을 새 컬럼으로 넘깁니다.
4. Contract
옛 경로 제거
의존성이 사라진 뒤에만 정리합니다.
스키마
name + full_name
ALTER TABLE ... ADD full_name
두 컬럼이 함께 존재
새 구조는 열렸지만, 아직 옛 경로도 유지합니다.
full_name
가 기준
스키마는 여전히 공존 상태라 전환 중에도 안전합니다.
full_name
만 남김
DROP COLUMN name
애플리케이션
아직
name
사용
배포 순서를 스키마 쪽이 먼저 가져갑니다.
구버전 코드 계속 동작
사용자 요청은 평소처럼 처리됩니다.
읽기·쓰기를
full_name
으로 전환
이 시점부터 새 코드가 주 경로가 됩니다.
신버전만 남음
더 이상 옛 컬럼을 참조하는 경로가 없습니다.
데이터·안전성
안전한 이유
아직 깨지는 코드는 없음
옛 컬럼이 그대로 있으므로 기존 배포본이 계속 읽을 수 있습니다.
핵심 공존 구간
백필 + 동기화로 값 차이를 없앰
UPDATE ... SET full_name = name
뒤에도 새 쓰기를 함께 맞춰 둡니다.
전환 시점
신구 버전이 잠시 함께 떠도 같은 데이터를 봄
전환 실패 시에도 Contract 전이라면 이전 경로로 되돌릴 수 있습니다.
마지막 정리
의존성이 사라진 뒤에만 제거
그래서 제거 단계만 별도로 떼어 내고, 서비스 중단 없이 마무리합니다.