HookChaos: Webhook 스트레스 테스터 CLI/오픈소스 프로젝트
Source: Dev.to
주문이 두 번 처리되었습니다. 핸들러가 멱등하지 않고 제공자가 타임아웃 시 재시도하고 있다는 것을 알아내는 데 이틀이 걸렸습니다. 괜찮아요, 교훈을 얻었죠.
그런데 다시 발생했습니다. 다른 버그지만 같은 카테고리—우리가 “테스트”라고 부른 것은 사실: 핑을 보내고, 200을 받고, 배포하는 것이 전부였기 때문에 전혀 테스트하지 못한 웹훅 엣지 케이스였습니다.
그때 깨달았습니다. 나쁜 상황—중복 이벤트, 순서가 뒤바뀐 전달, 오래된 상태에 도달하는 지연된 이벤트, 트레일링 개행 문자 때문에 서명 검증이 깨지는 경우—를 실제로 테스트할 방법이 없다는 것을. 우리는 단지 프로덕션에서 이런 문제가 나타나지 않기를 바랐을 뿐이었습니다.
프로덕션은 언제나 이런 문제를 드러냅니다.
그래서 HookChaos를 만들었습니다—프로덕션이 문제를 일으키기 전에 로컬에서 엔드포인트에 이러한 시나리오를 던지는 CLI입니다.
http://localhost:3000/webhooks
HookChaos
HookChaos는 웹훅 실패 시나리오를 위한 패키지 매니저입니다. 웹훅 소비자가 다음과 같은 상황을 마주했을 때만 나타나는 버그를 재현하기 위해 만든 로컬‑우선 CLI이며, 재현 가능한 웹훅 실패 시뮬레이션을 제공합니다:
- 중복 전송
- 순서가 뒤바뀐 전달
- 상태가 변한 뒤에 도착하는 재시도
- 서명 또는 타임스탬프 검증 실패
- 시퀀스 내 선택적 드롭
HookChaos는 이러한 실패 모드를 재사용 가능한 팩으로 전환하여 필요할 때 실행하고, 로컬에 저장하고, Git‑백엔드 레지스트리에 공개하며, 히스토리에서 재생할 수 있게 합니다.
Why This Exists
대부분의 웹훅 도구는 트래픽 수신을 도와주지만, 실제 버그가 첫 번째 정상 요청 이후에 발생한다면 그것만으로는 충분하지 않습니다:
- 같은 이벤트가 두 번 전달된다.
- 나중에 온 이벤트가 먼저 도착한다.
- 재시도가 이미 상태가 변한 뒤에 도착한다.
- 서명 또는 타임스탬프 검증이 otherwise 유효한 페이로드를 거부한다.
- 하나의 전달이 사라지고 나머지 시퀀스는 계속된다.
Install
# Install HookChaos into ~/.local/bin
cd /path/to/hookchaos
make install
export PATH="$HOME/.local/bin:$PATH"가장 골치 아픈 웹훅 버그는 무엇이었나요? (그게 바로 시나리오 리스트가 늘어나는 방식입니다.)