42장. Migration과 Event Version의 배포 순서를 정한다
schema 변경은 expand→backfill→dual read/write→contract로 나눈다. migration은 app startup에서 여러 pod가 경쟁하지 않고 CI의 단일 Job이 수행한다. lock 시간, replica lag, disk, old/new code 호환을 production 유사 데이터에서 본다. 기존 migration 파일을 수정하지 않는다.
event에 필드가 추가되면 consumer가 unknown field를 무시하거나 optional로 읽을 수 있는지 확인한다. 의미 변경은 새 event version을 만들고 consumer를 먼저 배포한다. API, publisher, worker가 서로 다른 version으로 rolling되는 시간을 compatibility matrix로 시험한다. DLQ에 남은 구 event도 새 consumer가 처리할 수 있어야 한다.
rollback 표는 image뿐 아니라 schema, event, already-sent SMS/WebSocket을 포함한다. 외부 알림을 보낸 뒤 DB를 삭제해 과거로 돌리는 대신 adjustment event와 사용자 정정 안내가 필요할 수 있다. migration success보다 old/new contract test와 업무 대사가 승인 조건이다.