피드로 돌아가기
Dev.toBackend
원문 읽기
HMAC 검증과 Idempotency 기반의 자동화된 Crypto Checkout 설계
How to Build a Telegram Crypto Checkout in Go (And Avoid Going Insane with Manual Checks)
AI 요약
Context
수동으로 Tronscan 및 Solscan을 확인하던 운영 프로세스의 병목 현상을 해결하기 위한 자동화 시스템 구축 필요성 대두. 클라이언트의 결제 주장(I Paid 버튼)에 의존하지 않는 서버 사이드 검증 체계의 부재로 인한 보안 취약점과 운영 리소스 낭비 발생.
Technical Solution
- Recv 프로세서를 통한 Non-custodial 구조 채택으로 펀드 직접 수령 및 Webhook 기반 상태 전이 구현
- State Machine(created → awaiting_payment → paid → fulfilled) 도입을 통한 Crypto 결제의 비결정적 상태 관리
- 고유 소수점 접미사(Unique Suffix) 생성을 통해 Memo 필드가 없는 네트워크 내 개별 결제자 식별 및 매칭
- HMAC-SHA256 서명 검증 시 JSON 파싱 전 Raw Bytes를 직접 대조하여 화이트스페이스 변경으로 인한 서명 파괴 방지
- Inbox Table 기반의 이벤트 중복 제거와 DB 트랜잭션-작업 큐 분리를 통한 At-Least-Once Delivery 문제 해결
- Idempotency-Key를 API 요청에 포함하여 네트워크 재시도 시 중복 인보이스 생성 방지
실천 포인트
- Webhook 수신 시 JSON Unmarshal 전 Raw Body로 HMAC 서명을 먼저 검증했는가 - 결제 상태를 단순 Boolean이 아닌 State Machine으로 정의하여 엣지 케이스(Underpayment, Late Payment)를 처리했는가 - 외부 API 호출과 DB 트랜잭션을 분리하고, Fulfillment 로직을 Durable Queue로 비동기 처리했는가 - 동일 주문에 대해 Idempotency-Key를 사용하여 멱등성을 보장했는가