4단계
4단계 — 외부 연동의 Timeout·Unknown·Retry·Reconcile 다루기
0회 조회
목차
4단계 — 외부 연동의 Timeout·Unknown·Retry·Reconcile 다루기
외부 API의 200 OK는 우리 업무가 완전히 끝났다는 뜻이 아닐 수 있습니다. 공급자 문법을 adapter 뒤에 가두고, 응답이 없는 경우를 별도 상태로 보존해야 안전합니다.
네 가지를 분리한다
- Timeout: 응답을 기다릴 상한이 지났다는 전송 사실
- Unknown: 외부 효과가 생겼는지 아직 모르는 업무 상태
- Retry: 누가, 어떤 오류에, 몇 번, 어떤 backoff로 다시 시도하는지
- Reconcile: 조회·webhook·대조 작업으로 우리 상태를 외부 사실과 수렴시키는 과정
재시도는 한 소유자만 가져야 합니다. HTTP client와 scheduler가 각각 세 번씩 재시도하면 외부 부하와 중복 효과가 곱해집니다. 오류가 영구적이면 재시도하지 않고, 일시적이면 상한과 jitter를 둡니다.
Python 수집기는 일시 실패 재큐잉과 영구 실패 기록을 분리합니다. Kafka consumer는 재시도와 DLQ 경계를 가지며, FCM·AI 호출은 provider 장애가 업무 DB 성공으로 숨겨지지 않도록 결과를 별도로 기록합니다.
사용자에게는 현재 상태를 준다
“전송 완료” 대신 접수·처리 중·확인 필요·실패를 구분합니다. 확인이 필요한 상태는 자동 재시도 중인지, 사용자가 다시 눌러도 되는지 알려야 합니다.