라이선스 지급 중 장애로 발생한 오환불
부하를 건 상태에서 지급 서비스의 DB 접근을 60초 막자, 재시도 횟수를 모두 소진한 이벤트가 지급 실패로 판단되어 정상 결제 8건이 자동 환불됐습니다. 환불은 되돌릴 수 없고, 정산에서 보면 정상 처리로 보여 대사에도 걸리지 않습니다.
환불을 거는 근거가 “재시도를 다 썼다” 하나였습니다. 재시도 소진은 지급할 수 없다는 뜻이 아니라 지급됐는지 답을 못 받았다는 뜻이고, 여덟 건은 모두 60초 뒤면 지급될 결제였습니다.
자동 환불 조건을 실제 지급 실패와 분리했습니다. 환불 직전에 저장소 장애인지와 이미 지급됐는지를 확인하고, 판단이 서지 않는 이벤트는 환불 대신 보류함으로 넘겨 원인을 고친 뒤 사람이 재투입하도록 바꿨습니다.
같은 장애를 같은 조건으로 다시 주입해 확인했고, 회차마다 장애 없는 회차를 한 번 더 돌려 비교했습니다.
- 예외 종류로 저장소 장애를 판별하는 기준
- 보류함 적재와 알람 경로
- 검토 후 버린 대안 3건과 버린 이유
각 항목의 기록은 정리 중입니다. 코드와 재현 테스트는 GitHub 저장소에서 볼 수 있습니다.