DB transaction은 참여한 resource까지만 원자적이다

DB row와 outbox 의도는 한 commit으로 묶을 수 있지만 email·broker·remote HTTP는 commit 뒤 별도 worker가 idempotently 전달해야 한다.

SERVICE TX

업무 변경

domain row를 같은 DB transaction에서 수정한다.

OUTBOX

전송 의도 저장

message ID와 payload를 같은 commit에 포함한다.

COMMIT

Local atomic boundary

row와 outbox가 함께 남거나 함께 사라진다.

WORKER

미전송 조회

commit된 outbox를 claim하고 재시도한다.

REMOTE

Idempotent 전달

broker·email·HTTP가 message ID로 중복을 막는다.

핵심: DB rollback이 되돌릴 수 없는 외부 효과는 transaction 안에 호출하지 말고 durable intent로 경계를 넘긴다.