핫픽스(hotfix)는 프로덕션의 중요한 버그를 일반 릴리스 주기 외에서 긴급 수정하는 것입니다. 계획된 릴리스와 달리, hotfix는 QA 및 테스트의 일부 단계를 건너뛰어 최단 시간 내에 수정 사항을 사용자에게 전달합니다. Atlassian Git 워크플로 가이드에 따르면, hotfix 브랜치는 최신 릴리스 태그에서 생성되며, 적용 후 main과 develop에 다시 병합됩니다. Hotfix 프로세스는 회귀가 없음을 확신하기에 충분한 최소한의 검사 세트를 포함합니다.
핵심 포인트
핫픽스(신속 수정)는 중요한 문제를 해결하기 위해 대기열 밖에서 릴리스되는 애플리케이션 프로덕션 버전용 패치입니다. 핫픽스는 며칠이 아닌 몇 시간 내에 사용자에게 전달되며, 애플리케이션을 사용할 수 없거나, 데이터가 손실되거나, 사용자 보안이 위협받는 상황에만 사용됩니다.
핫픽스의 일반적인 시나리오: 특정 장치에서 시작 시 충돌(마지막 릴리스 후 회귀), 잘못된 인증으로 인한 개인 데이터 유출, 결제 통합 중단(수익 손실), GDPR/CCPA 규정 위반. 이러한 모든 상황은 인시던트 분류에서 심각도 P0 또는 P1에 해당합니다. 계획된 작업 — 최적화, 리팩토링, 새 화면 — 은 핫픽스를 통해 절대 수행되지 않습니다.
중요한 규칙: 핫픽스는 최소한의 변경(1~2개 파일, 10~20줄의 코드)만 포함합니다. diff가 작을수록 새로운 버그를 도입할 위험이 낮아집니다. 문제 해결을 위해 아키텍처 변경이나 새 모듈 추가가 필요한 경우 — 이는 핫픽스가 아니라 완전한 코드 리뷰와 QA가 필요한 긴급 릴리스입니다.
핫픽스와 계획된 릴리스의 주요 차이점은 속도, 변경 범위, 테스트 수준입니다. 계획된 릴리스는 수십 가지 기능을 포함할 수 있고, 전체 QA 사이클(회귀 + 통합 + UI 테스트)을 거치며, 코드 프리즈에서 배포까지 1~2주가 소요될 수 있습니다. 핫픽스는 하나 또는 두 개의 수정 사항을 포함하며, 가속화된 리뷰(3 대신 2 승인)와 최소한의 스모크 테스트를 거칩니다.
Git 프로세스 관점에서, 핫픽스는 릴리스 태그에서 생성되며 develop 브랜치가 아닙니다. 이는 develop의 미완성 기능을 실수로 포함하지 않고 문제 해결에 필요한 변경 사항만 핫픽스에 포함되도록 보장합니다. 배포 후 핫픽스는 main과 develop에 다시 병합됩니다(cherry-pick 또는 merge를 통해).
| 기준 | 계획된 릴리스 | 핫픽스 |
|---|---|---|
| 범위 | 다양한 기능 및 버그 수정 | 1~2개 중요 수정 |
| 브랜치 | develop의 릴리스 브랜치 | 릴리스 태그의 핫픽스 브랜치 |
| 코드 리뷰 | 3 승인, 전체 프로세스 | 2 승인, fast-track |
| QA | 전체 회귀 스위트 | 스모크 테스트 + 영향 영역 |
| 배포 시간 | 1~4주 | 1~24시간 |
| 롤백 | revert commit 통해 | 이전 태그 재구축 통해 |
중요: 모든 긴급 작업이 핫픽스는 아닙니다. 관리자가 “긴급히 버튼을 추가해야 합니다”라고 말하면 — 이는 핫픽스가 아니라 우선순위 변경입니다. 진정한 핫픽스는 비즈니스의 긴급성이 아니라 사용자에 대한 심각도에 의해 결정됩니다. 기준: 애플리케이션이 충돌하지 않고 데이터가 유출되지 않는 경우 — 작업은 계획된 릴리스를 기다립니다.
중요한 문제 발견 시 첫 번째 단계는 트라이어지입니다 — 심각도의 신속한 평가. 온콜 엔지니어가 버그를 확인하고, 로그와 충돌 보고서를 확인하며, 문제가 최신 릴리스의 회귀인지 오래된 버그인지 판단합니다. 심각도가 P0인 경우 — 핫픽스 파이프라인이 시작됩니다. 트라이어지 단계는 15분을 초과해서는 안 됩니다.
두 번째 단계 — 최신 릴리스 태그(v2.5.0 → hotfix/v2.5.1)에서 브랜치 생성. 개발자는 최소한의 수정을 하고, 메시지에 HOTFIX 접두사를 붙여 커밋하고, 푸시하고 [HOTFIX] 레이블로 PR을 엽니다. Fast-track 코드 리뷰: CODEOWNERS를 통해 두 명의 리뷰어가 자동 할당되며, 리뷰 시간은 30분 이내입니다. 20분 내에 리뷰가 없으면 — 리뷰어가 건너뛰어지고 다음 사람이 할당됩니다.
세 번째 단계 — CI/CD를 통한 빌드 및 배포. 핫픽스 파이프라인은 일반과 다릅니다: 긴 통합 테스트(몇 시간 소요)는 건너뛰고, 스모크 스위트만 실행됩니다(10~15개 중요 시나리오, 5~10분). 배포 후: 충돌률, 오류율, API 지연 시간을 30분간 모니터링합니다. 핫픽스용 DORA 메트릭: 평균 복구 시간(MTTR)은 1시간 미만이어야 합니다.
# .github/workflows/hotfix-deploy.yml
name: Hotfix Deploy Pipeline
on:
pull_request:
types: [labeled]
branches: [hotfix/*]
jobs:
hotfix-checks:
runs-on: ubuntu-latest
if: contains(github.event.label.name, 'hotfix-critical')
steps:
- uses: actions/checkout@v4
- name: Validate diff size
run: bash .github/scripts/diff-check.sh 30
- name: Build
run: ./gradlew assembleRelease
- name: Smoke test
run: ./gradlew smokeTest
- name: Deploy to staging
run: fastlane deploy_staging
- name: Approve & deploy to production
if: success()
run: fastlane deploy_production
env:
HOTFIX_MODE: true
이 파이프라인의 주요 최적화: diff 확인(30줄 이하), 통합 테스트 건너뛰기, 스모크 테스트 성공 시 스테이징 및 프로덕션에 자동 배포. HOTFIX_MODE 환경 변수는 런타임에 추가 검사를 활성화합니다 — 예: 빠른 문제 진단을 위한 확장 로깅.
핫픽스 브랜치 작업 전략은 Gitflow Workflow에 설명되어 있습니다. 주요 규칙: 핫픽스 브랜치는 최신 릴리스 태그(git checkout -b hotfix/v2.5.1 tags/v2.5.0)에서 생성되며, develop이나 main이 아닙니다. 이는 핫픽스가 현재 프로덕션에 있는 동일한 코드 상태를 기반으로 하며 develop의 미완료 변경 사항을 가져오지 않도록 보장합니다.
수정이 완료되면, 핫픽스 브랜치는 main(또는 master)과 develop에 병합됩니다. main에는 — 새 패치 릴리스 태그(v2.5.1)가 있는 일반 병합 커밋. develop에는 — 팀 정책에 따라 병합 또는 cherry-pick. develop에 main보다 더 많은 변경 사항이 있는 경우, 충돌을 피하기 위해 특정 핫픽스 커밋의 cherry-pick이 권장됩니다. GitFlow는 먼저 hotfix를 main에 병합한 다음, main을 develop에 병합할 것을 권장합니다.
# 최신 릴리스 태그에서 핟픽스 브랜치 생성
git checkout -b hotfix/v2.5.1 tags/v2.5.0
# 수정 적용
git commit -m "HOTFIX: Fix crash on Android 14 notification permission"
# main에 병합하고 릴리스 태그
git checkout main
git merge --no-ff hotfix/v2.5.1
git tag -a v2.5.1 -m "Hotfix release v2.5.1"
# develop에도 병합
git checkout develop
git merge --no-ff hotfix/v2.5.1
# 임시 브랜치 정리
git branch -d hotfix/v2.5.1
중요: 핫픽스가 현재 develop 브랜치에 존재하는 버그를 수정하는 경우(버그가 여러 스프린트 전에 도입됨), hotfix를 main과 develop에 병합한 후 develop에는 이미 수정 사항이 포함됩니다. 버그가 릴리스 브랜치에서만 도입된 경우(cherry-pick을 통해 오류가 축적됨), develop에서 수정이 필요하지 않을 수 있습니다. 근본 원인 분석은 develop에 cherry-pick이 필요한지 판단하는 데 도움이 됩니다.
핫픽스의 주요 위험은 서두름으로 인해 새롭고 더 심각한 버그를 도입하는 것입니다. Stripe(2021)의 연구에 따르면, 핫픽스의 15%가 회귀를 일으키고 두 번째 핫픽스가 필요합니다. 이것은 아이러니의 법칙입니다: 더 빨리 수정할수록 실수할 확률이 높아집니다. 위험 최소화는 diff 크기의 엄격한 제한(30줄 이하)과 필수 자동 스모크 테스트를 통해 달성됩니다.
두 번째 위험 — 기술 부채 축적. 팀이 계획된 릴리스 대신 정기적으로 핫픽스를 사용하면 코드베이스가 저하됩니다: 핫픽스 커밋은 리팩토링되지 않고, 임시 해결책은 적절한 해결책으로 대체되지 않으며, 문서는 업데이트되지 않습니다. 건강 상태 확인: 핫픽스가 한 달에 한 번 이상 릴리스되면 — 릴리스 프로세스를 검토해야 합니다.
세 번째 위험 — 심리적. 정기적인 핫픽스는 팀을 소진시킵니다: 온콜 개발자는 지속적인 스트레스에 시달리고, 코드 리뷰는 형식화되고(모두가 더 빠르게 진행하려 함), 품질 문화는 저하됩니다. 성숙한 팀의 정상적인 핫픽스 빈도는 분기당 1~2회입니다. 그 이상이라면 — 문제는 핫픽스가 아니라 계획된 릴리스의 품질에 있습니다.
핫픽스를 배포하고 메트릭이 안정화된 후, 무책임 포스트모템 회고가 진행됩니다. 팀은 네 가지 질문에 답합니다: 무슨 일이 일어났는가, 검사가 왜 버그를 발견하지 못했는가, 수정을 위해 무엇을 했는가, 재발을 어떻게 방지할 것인가. 포스트모템은 핫픽스 후 24~48시간 이내에, 세부 사항이 아직 생생할 때 진행됩니다. 무책임 문화가 핵심 원칙입니다: 사람이 아닌 프로세스에 대해 논의합니다.
포스트모템의 결과는 책임자와 기한이 있는 구체적인 액션 아이템입니다. 일반적인 액션 아이템: 놓친 케이스에 대한 단위 테스트 추가, 스모크 테스트 스위트 확장, 모니터링 개선(메트릭에 알림 추가), 유사한 인시던트에 대한 runbook 업데이트. 액션 아이템은 다음 계획된 릴리스 전에 완료되어야 합니다.
자주 묻는 질문
완전히 같지는 않습니다. 패치 릴리스는 정기적인 일정에 따라 소규모 수정을 계획적으로 제공하는 것입니다. 핫픽스는 일정 외의 긴급 수정입니다. 패치 릴리스는 전체 QA 사이클을 거치고, hotfix는 축소된 사이클을 거칩니다. 하지만 기술적으로 둘 다 패치 버전 증가를 사용할 수 있습니다(v2.5.0 → v2.5.1).
아니요, 핫픽스는 추적 가능성을 위해 항상 Git에 기록됩니다. 예외는 코드 변경이 필요하지 않은 구성 수준(피처 플래그, 원격 구성)의 긴급 수정입니다. 각 핫픽스는 명확한 메시지가 있는 커밋에 연결되어야 하며 인시던트 티켓에서 참조되어야 합니다.
iOS의 경우, App Review를 통한 hotfix는 1~24시간이 소요됩니다(신속 검토 가능). Android의 경우 — Google Play Console을 통해 1~4시간입니다. 배포 시간은 스토어 정책과 긴급 검토 프로세스의 가용성에 따라 다릅니다.
결정은 온콜 엔지니어가 심각도 기준에 따라 내립니다. 심각도가 P0인 경우 — 핫픽스는 추가 승인 없이 시작됩니다. P1 — 기술 리더의 승인이 필요합니다. 팀 권한 부여: 온콜 엔지니어는 관료적 절차 없이 핫픽스를 시작할 권한이 있습니다.
성숙한 팀의 경우 — 분기당 1~2회 핫픽스. 한 달에 한 번 이상의 빈도는 QA 프로세스 문제, 불충분한 테스트 커버리지, 또는 잘못된 릴리스 전략을 나타냅니다. 정상적인 핫픽스 빈도는 개발 프로세스 품질의 KPI입니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.