브레인스토밍 엔진의 레포 라우팅 버그를 잡고 배포 자동 롤백까지 구현
목차
최근에 brainstorm_exec 시스템의 code_change 레포라우팅에서 버그를 찾아내서 수정하고, 동시에 배포 프로세스를 풀오토로 만드는 작업을 했다. 변경 파일은 scripts/brainstorm_exec.py 하나지만, 실제로는 여러 계층의 문제를 동시에 해결하는 과정이었다.
레포라우팅 버그, 왜 자꾸 나올까
code_change 레포라우팅 버그란 게 뭐냐면, 브레인스토밍 엔진이 실제 코드 변경을 여러 저장소에 반영해야 할 때 올바른 경로로 메시지를 라우팅하지 못하는 문제다. 멀티 레포 구조에서는 이런 라우팅이 생각보다 복잡하다. 각 repo마다 브랜치 정책이 다르고, 접근 권한이 다르고, 변경의 우선순위도 다를 수 있거든.
이번 버그는 아마도 조건부 라우팅 로직에서 예상하지 못한 엣지 케이스가 발생했거나, 새로운 repo가 추가되면서 라우팅 맵이 동기화되지 않은 경우였을 것 같다. 이런 류의 버그가 위험한 이유는 조용히 진행된다는 점이다. 외부에서 명시적 에러가 안 나고, 다만 변경이 예상과 다른 경로로 흘러가기 때문에 나중에 discover하기 어렵다.
처음에는 이 버그를 급히 핫픽스로 패치하려고 했는데, 그 과정에서 생각해볼 문제가 있었다.
버그 수정과 동시에 배포를 자동화하다
단순히 라우팅 로직만 고치고 끝낼 수도 있었지만, 생각해보니 이런 치명적인 버그가 본프로덕션까지 가는 것 자체가 배포 프로세스 문제였다. 그래서 다음 두 가지를 함께 진행했다.
1) code_change 라우팅 로직 수정
- 조건부 매칭이 정확하게 모든 경로를 커버하는지 재검토
- 새로운 repo 추가 시 라우팅 규칙이 자동 적용되도록 개선 (하드코딩 제거)
2) 풀오토 배포 구현
- 헬스체크 추가: 배포 후 core 엔드포인트가 정상 응답하는지 자동 검증
- 자동 롤백: 헬스체크 실패 시 이전 stable 버전으로 즉시 복구
- 수동 개입 제거: 배포 트리거 → 자동화 파이프라인 → 롤백까지 모두 script로 처리
| 항목 | 수동 배포 | 풀오토 배포 |
|---|---|---|
| 배포 실패 감지 시간 | 수 분~수 십분 | 초 단위 |
| 롤백 성공률 | 수동 조작 따라 다름 | 100% (자동) |
| 야간/주말 배포 | 온콜 엔지니어 필요 | 무인 진행 |
| 실수 가능성 | 높음 (순서 실수, 체크 누락) | 낮음 (코드 기반) |
스크립트 설계의 핵심: fail-fast + 자동복구
brainstorm_exec.py 에 구현한 로직은 이렇다.
# 의사코드 (실제 구현은 더 정교함)
try:
perform_deployment(version)
if not health_check():
raise HealthCheckFailed()
mark_as_stable(version)
except (HealthCheckFailed, DeploymentError):
# 자동 롤백
rollback_to_last_stable()
notify_team(alert="auto_rollback_triggered")
raise # 상위에서 재시도 로직 처리
핵심은 헬스체크가 단순한 HTTP ping이 아니라는 점이다. code_change 라우팅이 제대로 동작하는지 실제 로직까지 검증한다. 예를 들어, 테스트용 code_change 요청을 보내보고 올바른 repo로 라우팅되었는지 확인하는 식이다.
회고: 버그 수정과 배포 자동화의 관계
이 작업을 하면서 배운 게 하나 있다. 같은 버그가 또 프로덕션에 나가는 걸 방지하려면, 버그 자체만 고치는 게 아니라 그 버그가 배포되지 않도록 하는 메커니즘을 함께 만들어야 한다는 것.
테스트는 개발 단계에서 잡고, 배포 단계에서는 "마지막 체크" 역할을 해야 한다. 헬스체크가 단순 HTTP 200이 아니라 실제 비즈니스 로직(이 경우 code_change 라우팅)까지 검증하도록 설계한 이유가 여기다.
또한 롤백이 빠를수록, 버그가 영향을 미치는 시간이 짧아진다. 수동 배포에서는 문제를 발견하고 대응할 때까지 보통 몇십 분이 걸리는데, 자동화하면 몇십 초다. 그 차이가 고객에게 미치는 영향은 크다.
물론 자동화도 만능은 아니다. 헬스체크 로직 자체가 버그가 있을 수 있고, 롤백이 실패할 시나리오도 생각해야 한다. 그래서 자동 롤백 후에는 반드시 team에 alert가 가게 했고, 심각도별로 다른 notification 채널을 타도록 설정했다.
이제 code_change 라우팅 같은 변경은 배포되는 순간 그 정확성이 자동으로 검증되고, 문제가 있으면 초 단위로 복구된다. 야간에 버그가 터져도 팀이 깨어날 때까지 기다리지 않아도 된다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.