결제 시스템에서 발생하는 중복 결제나 재시도 버그는 백엔드 개발자들이 흔히 겪는 골치 아픈 문제입니다. 예를 들어, 사용자가 결제 버튼을 두 번 눌렀을 때, 데이터베이스에 유니크(unique) 제약을 걸어도 결제 API가 먼저 호출되면 두 번의 결제가 발생할 수 있습니다. 이는 코드 한 줄의 문제가 아니라 요청의 순서와 시점에 따라 발생하는 복합적인 문제로, 일반적인 코드 리뷰에서는 놓치기 쉽습니다.
이러한 문제를 해결하기 위해 앤트로픽(Anthropic)의 AI 코딩 도우미인 클로드 코드(Claude Code)를 활용한 스킬 '버튼매셔(buttonmasher)'가 개발되었습니다. 버튼매셔는 제출 버튼 연타, 타임아웃 후 재시도, 뒤로가기 후 재진입, 여러 탭에서의 동시 요청, 웹훅 재전송 등 다양한 비정상적 실행 시나리오를 가정하여 코드를 분석합니다. 특히 '한 번만 실행돼야 하는 작업이 중복 실행되는 경우'와 '이미 완료된 작업이 다시 실행되는 경우'를 집중적으로 점검합니다. 데모 사례에서는 유니크 제약만으로는 중복 결제를 막을 수 없지만, 결제 API에 멱등성 키(idempotency key)를 적용하면 중복 결제를 효과적으로 방지할 수 있음을 보여줍니다.
실제 테스트에서 버튼매셔는 캘닷컴(cal.com) 예약 생성 경로에서 일반 프롬프트보다 많은 6건의 버그를 발견했습니다. 특히 예약 상태가 'ACCEPTED'일 때만 멱등성 키가 기록되어 'PENDING' 상태에서는 중복 예약이 발생할 수 있는 문제를 찾아냈습니다. 이는 PostgreSQL의 유니크 제약이 여러 널(null) 값을 허용하는 특성 때문에 발생하는 문제입니다. 반면, 일반 프롬프트는 시간대 관련 버그나 보안 우회 문제를 더 잘 찾아내는 등, 각 도구의 강점이 다름을 보여주었습니다. 이처럼 버튼매셔는 실행 순서와 시점에 따른 잠재적 버그를 탐지하는 데 특화되어 있어, 복잡한 비즈니스 로직을 가진 시스템의 안정성을 높이는 데 기여할 수 있습니다.