본문 바로가기
IT & Tech 정보

무중단 데이터 마이그레이션 자동화: 온라인 스키마 변경 with gh-ost + Argo Workflows

by 지식과 지혜의 나무 2025. 5. 28.
반응형



🎯 주제 개요

대규모 시스템 운영 중 가장 민감하고 위험한 작업 중 하나는 운영 중인 데이터베이스의 스키마 변경입니다.
단일 ALTER TABLE도 잘못하면 서비스 전체가 멈추고, 트래픽 피크 시간대에는 쿼리 Lock으로 대란이 발생할 수 있습니다.

이때 실리콘밸리의 대형 SaaS 기업들은 다음 전략을 사용합니다:
• gh-ost: Lock 없이 MySQL 스키마 변경
• Argo Workflows: 선언형 데이터 마이그레이션 실행 자동화
• GitOps + Slack Notification까지 연계한 안전한 전체 파이프라인 구성



🧱 핵심 아키텍처 구성

Git Commit (ALTER 정의)
    ↓
Argo Workflows Job 실행
    ↓
gh-ost 실행 (Lock-free schema change)
    ↓
Slack 메시지 전송 (변경 결과 요약)




🔧 실전 예시: 운영 MySQL 테이블에 컬럼 추가

1. Git 저장소에 마이그레이션 스크립트 작성

migrations/add-column-user-status.yaml

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  name: user-schema-update
spec:
  entrypoint: run-gh-ost
  templates:
  - name: run-gh-ost
    container:
      image: ghcr.io/github/gh-ost
      command: ["/bin/sh", "-c"]
      args:
        - >
          gh-ost
          --alter="ADD COLUMN status VARCHAR(20) DEFAULT 'active'"
          --database=prod_db
          --table=users
          --user=dbadmin
          --password=$MYSQL_PASS
          --host=mysql-cluster.internal
          --allow-on-master
          --execute




2. Git Commit → Argo 자동 감지

Argo Events 또는 CronWorkflow를 활용해 Git push 시 자동 실행



3. Slack 알림 연동 (Success/Fail 분기)

Argo Workflow의 onExit 템플릿 활용

- name: notify-slack
  container:
    image: curlimages/curl
    command: ["/bin/sh", "-c"]
    args:
      - |
        curl -X POST -H 'Content-type: application/json' \
        --data '{"text":"✅ gh-ost 완료: users.status 컬럼 추가 성공"}' \
        https://hooks.slack.com/services/XXX

실패 시엔 ❌ 실패 메시지와 로그 링크 포함 전송



🔍 gh-ost vs pt-online-schema-change vs native ALTER

툴 Lock 없음 Production 안정성 모니터링 지원 사용 난이도
gh-ost ✅ 매우 높음 ✅ (Progress file) 중간
pt-online-schema-change ⚠️ 일부 Lock 발생 가능 중간 중간 중간
ALTER TABLE ❌ 낮음 ❌ 쉬움

→ gh-ost는 GitHub, Slack, GitLab, Square 등 실서비스 환경에서 사용 중



🔐 보안과 안정성 강화 팁
• IAM 기반 DB 접근 (IAM DB Auth 또는 세션 토큰)
• gh-ost 실행 전 후 트래픽 스냅샷 저장 (CloudWatch or Datadog)
• 실패한 gh-ost Job은 자동 Rollback 설정 (Argo 조건 분기)



📦 확장 아이디어

확장 항목 설명
여러 테이블 일괄 변경 Workflow DAG 기반 순차 병렬 실행
버전 별 데이터 마이그레이션 관리 Git tag 기준 Rollforward / Rollback 자동화
Slack + Notion 통합 변경 로그 문서 자동 등록




✅ 결론

대규모 트래픽을 가진 서비스에서의 DB 변경은 사고가 아니라 전략입니다.
gh-ost와 Argo Workflows를 조합하면:
• Lock 없이 실시간으로
• 코드 기반 선언적 관리로
• 알림까지 자동화된 상태에서

무중단 데이터 마이그레이션이 완성됩니다.

반응형