PostgreSQL 무중단 마이그레이션: 안전한 스키마 변경을 위한 프로덕션 실무 가이드

1 hour ago 4

무중단 마이그레이션은 단순히 데이터베이스가 켜져 있는 상태가 아니라, 서비스 품질과 데이터 정확성을 유지하면서 구버전과 신버전 애플리케이션이 함께 동작하도록 하는 배포 방식임 확장-축소(expand-contract) 패턴으로 스키마 추가, 데이터 이전, 읽기/쓰기 전환, 검증, 기존 구조 제거를 독립적으로 배포하고 관찰해야 함 실행 전부터 잠금 대기열이 장애를 일으킬 수 있으므로, 실제 PostgreSQL 버전의 잠금과 테이블 재작성 동작을 확인하고 짧은 잠금 타임아웃으로 영향을 제한해야 함 동시 인덱스 생성, 제약 조건의 추가와 검증 분리, 작은 배치 단위 백필로 차단과 부하를 줄일 수 있지만, 각 방식의 트랜잭션 제약과 자원 비용을 고려해야 함 SQL 실행 완료만으로 성공을 판단하지 말고 신구 데이터 대조와 서비스 지표를 검증해야 하며, 되돌리기 어려운 삭제는 복구 계획과 관찰 기간을 거친 뒤 수행해야 함 무중단의 기준은 서비스 동작과 데이터 정확성 개발 환경에서 즉시 끝나는 SQL도 프로덕션에서는 대형 테이블, 장기 트랜잭션, 잠금 대기열, 복제본, 연결 풀, 백그라운드 작업, 동시 쓰기 때문에 장애를 일으킬 수 있음 무중단 마이그레이션의 성공 조건은 데이터베이스의 온라인 상태보다 넓음 요청 오류율이 유의미하게 증가하지 않고, p95/p99 지연 시간이 합의한 범위에 있어야 함 핵심 업무의 쓰기가 계속되고 복제 지연이 제한되어야 함 데이터 손실, 중복, 잘못된 변환이 없어야 함 배포 중 구버전과 신버전이 모두 유효하게 동작하며, 즉흥적인 대응 없이 중단하거나 되돌릴 수 있어야 함 목표는 잠금을 완전히 없애는 것이 아니라 빠른 잠금 획득과 영향 제한임 제한적인 잠금을 보유한 채 오래 걸리는 작업을 수행하지 않아야 함 각 마이그레이션에 예상 잠금, 실행 시간, I/O 특성, 호환성 유지 기간, 관측 계획, 중단 조건, 정리 단계를 지정해야 함 SQL이 실행되기 전에도 잠금 대기열이 장애를 만들 수 있음 여러 ALTER TABLE 형식은 일반적인 읽기와 쓰기 모두와 충돌하는 ACCESS EXCLUSIVE 잠금을 획득함 마이그레이션이 장기 트랜잭션의 잠금 해제를 기다리면, 이후 애플리케이션 쿼리도 그 뒤에 줄을 설 수 있음 스키마 변경이 실제로 시작되지 않았어도 장애 범위가 커질 수 있음 위험은 실제 실행 및 잠금 동작을 기준으로 판단해야 하며, DDL과 데이터 마이그레이션이라는 분류만으로는 부족함 Postgre...

Read Entire Article