피드로 돌아가기
"Done" Is Not a State
Dev.toDev.to
Backend

At-least-once delivery의 한계와 Idempotency를 통한 중복 실행 해결

"Done" Is Not a State

Alex @ Vibe Agent Making2026년 6월 29일10advanced

Context

분산 시스템 내 Two Generals Problem으로 인해 네트워크 레벨의 Exactly-once delivery 구현이 수학적으로 불가능한 제약 존재. Trigger.dev 사례와 같이 시스템 복구 로직이 성공적으로 완료된 작업과 무응답 상태의 작업을 구분하지 못해 발생하는 중복 작업 실행 문제 분석.

Technical Solution

  • At-least-once delivery 채택으로 인한 작업 누락 방지 및 중복 실행 가능성 수용
  • Idempotent Operation 설계를 통해 동일 작업의 반복 실행 시에도 상태 일관성 유지
  • Application-level State Machine 도입으로 전송 계층의 중복 메시지를 필터링하는 가짜 Exactly-once 구현
  • DynamoDB와 같은 외부 저장소에 Message ID를 기록하는 Deduplication Layer 구축을 통한 실행 여부 검증
  • 상태 전이 시 타임스탬프와 검증 가능한 아티팩트를 생성하는 명시적 Completion Event 설계

- 분산 큐 사용 시 At-least-once delivery가 기본 설정임을 인지하고 중복 처리 로직 설계 여부 검토 - 비즈니스 로직 내 Idempotency Key(예: 주문 ID, 요청 ID) 도입을 통한 중복 결제 및 데이터 생성 방지 - '성공' 신호의 부재가 곧 '실패'가 아님을 전제로 한 타임아웃 및 재시도 전략 수립 - 인프라의 모니터링 지표(100% 성공)와 실제 비즈니스 데이터(중복 건수)의 일치 여부 교차 검증

원문 읽기