afterCommit callback은 durable message를 대신하지 않는다

commit 뒤 process crash와 callback 실패를 견뎌야 하는 효과는 DB transaction에 outbox intent를 포함하고 별도 worker가 재시도해야 한다.

commit 뒤 효과가 반드시 전달되어야 하는가?
BEST EFFORT

afterCommit callback

짧은 local cache 무효화처럼 유실을 허용할 때만 사용한다.

DURABLE

Outbox row

업무 변경과 전송 의도를 같은 DB commit에 넣는다.

REMOTE I/O

Worker 분리

broker·email·HTTP 호출을 transaction thread 밖에서 수행한다.

RETRY

Idempotent consumer

message ID로 중복 전달과 process 재시작을 견딘다.

TX

Business + Outbox

두 row가 함께 commit된다.

WORKER

Claim + Send

미전송 의도를 반복 조회하고 전달한다.

ACK

Delivered 표시

성공 기록 뒤 같은 message의 중복을 무해하게 만든다.

핵심: afterCommit은 호출 시점만 보장할 뿐 실행 완료를 저장하지 않으므로 전달 보장은 durable state에서 시작해야 한다.