금요일 오후 6시, 상용 서비스에서 "특정 카드로 결제 시 500 내부 서버 에러가 발생하여 결제가 안 된다"는 긴급 장애가 접수되었습니다. 현재 develop 브랜치에는 다음 달 출시할 미완성 기능들이 잔뜩 섞여 있어 절대 그대로 배포할 수 없는 절체절명의 상황입니다. 이 문서는 프롬프트 상의 브랜치 표시(branch-name) $를 명시하여 운영 서버를 구출하는 Hotfix 표준 프로세스를 다룹니다.
1. 핫픽스 브랜치의 핵심 원칙
"Hotfix 브랜치는 절대로 develop에서 따지 않는다! 오직 현재 운영 중인 main 브랜치에서만 분기한다."
[ Hotfix 긴급 분기 및 듀얼 머지(Dual Merge) 흐름 ]
main: ───● (v2.0.0 상용 장애 발생!) ───────────────────────● (v2.0.1 긴급 배포)
\ ▲ │
hotfix/v2.0.1: └──● (장애 1줄 긴급 수정) ───────────────────┘ │
▼ (반드시 역머지!)
develop: ───●───●───● (다음 달 기능 개발 중) ──────────────────────● (핫픽스 반영 완료)2. 핫픽스 단계별 실무 긴급 출동 4단계
Step 1. main 브랜치에서 긴급 분기
# 기존 작업 브랜치에서 main으로 이동
(develop) $ git switch main
Switched to branch 'main'
(main) $ git pull origin main
# 최신 main에서 hotfix 브랜치 생성 및 이동
(main) $ git switch -c hotfix/v2.0.1-payment-null-check
Switched to a new branch 'hotfix/v2.0.1-payment-null-check'Step 2. 장애 원인 최소 수정 및 로컬 검증
(hotfix/v2.0.1-payment-null-check) $ git status
(hotfix/v2.0.1-payment-null-check) $ git diff
# 커밋 생성
(hotfix/v2.0.1-payment-null-check) $ git commit -am "fix: 결제 요청 시 카드사 코드 null 참조 예외 처리 (HOTFIX)"Step 3. main 브랜치에 머지 및 패치 태그 발행 (상용 배포)
# main 브랜치로 이동
(hotfix/v2.0.1-payment-null-check) $ git switch main
Switched to branch 'main'
(main) $ git pull origin main
# 핫픽스 머지
(main) $ git merge --no-ff hotfix/v2.0.1-payment-null-check
# 패치 버전 태그 생성 및 푸시
(main) $ git tag -a v2.0.1 -m "Hotfix v2.0.1: 결제 승인 NPE 긴급 수정"
(main) $ git push origin main --tags운영 서버 배포 파이프라인이 즉시 가동되어 버그가 수정된 v2.0.1이 실서버에 반영됩니다.
Step 4. 필수: develop 브랜치로 역머지 (Dual Merge)
⚠️ 이 단계를 빼먹으면 대형 사고가 납니다!
긴급 수정을develop브랜치에도 합쳐주지 않으면, 다음 정기 배포 때 이 버그가 다시 발생하는 참사를 겪게 됩니다.
# develop 브랜치로 이동
(main) $ git switch develop
Switched to branch 'develop'
(develop) $ git pull origin develop
# develop에도 핫픽스 변경사항 머지
(develop) $ git merge --no-ff hotfix/v2.0.1-payment-null-check
(develop) $ git push origin develop
# 임무를 완수한 hotfix 브랜치 삭제
(develop) $ git branch -d hotfix/v2.0.1-payment-null-check
(develop) $ git push origin --delete hotfix/v2.0.1-payment-null-check