네트워크는 언젠가 반드시 끊기고, 끊기면 재시도합니다. 그런데 결제에서 재시도는 이중 결제가 될 수 있습니다. 멱등성 키, 중복 제거 윈도우, 유니크 제약, 재시도+타임아웃 문제, at-least-once에 dedup을 더하는 설계, 결제 상태 기계, 그리고 Stripe 스타일 멱등성 구현까지 — 돈을 한 번만 청구하는 법을 정리합니다.
에러 핸들링은 기능을 다 만든 뒤 붙이는 장식이 아니라 설계 그 자체다. 실패의 종류를 분류하고, 예외와 에러 값 중 무엇을 쓸지 정하고, 경계에서 검증하고 코어를 신뢰하며, 모든 원격 호출에 타임아웃을 걸고, 재시도에 지터를 넣고, 멱등성으로 안전하게 재시도하고, 서킷 브레이커로 장애를 격리하고, 우아하게 성능을 낮추는 — 코드 레벨에서 잘 실패하는 소프트웨어를 설계하는 법.