대규모 migration, 즉 새 database, 새 framework, 새 platform은 모든 것을 건드리고 끝나기 전까지 사용자에게 보이는 가치를 전달하지 않기에 고위험입니다. 안전한 접근은 big-bang cutover가 아니라 점진적이고 되돌릴 수 있는 것입니다. 검증하고 roll back할 수 있는 슬라이스 단위로 migration합니다.
안전한 migration playbook
text
1. WHY를 알라 — 명확한 보상이 없는 migration은 위험을 감수할 가치가 없다.
2. 점진적으로 migration하라 — 절대 한 번에 모두 뒤집지 마라.
3. OLD와 NEW를 병렬로 돌려라 — strangler-fig 패턴.
4. feature flag / DUAL WRITE를 써서 트래픽을 점진적으로 옮겨라.
5. 지속적으로 VERIFY하라 — old vs. new 출력을 비교하라(shadow traffic).
6. 모든 단계에서 ROLLBACK 경로를 유지하라.
7. 새 시스템이 입증된 뒤에만 옛 시스템을 정리하라.
strangler-fig 패턴
옛 시스템을 감싸고 기능 슬라이스를 하나씩 새 시스템으로 라우팅하여, 옛 시스템이 완전히 "교살"되어 제거될 수 있을 때까지 진행합니다. 매 시점에 작동하는 시스템과 돌아갈 길이 있습니다. 이것이 단일 가장 중요한 migration 기법입니다.
구체적인 예시
database migration: 둘 다에 dual-write하고, 과거 데이터를 backfill하고, 소수 % 트래픽에 대해 새 DB에서 읽고, 결과를 비교하고, 점진적으로 늘리며, 새 DB가 한동안 100% 깨끗하게 서비스한 뒤에만 옛 DB를 폐기합니다.
