업무 변경
domain row를 같은 DB transaction에서 수정한다.
DB row와 outbox 의도는 한 commit으로 묶을 수 있지만 email·broker·remote HTTP는 commit 뒤 별도 worker가 idempotently 전달해야 한다.
domain row를 같은 DB transaction에서 수정한다.
message ID와 payload를 같은 commit에 포함한다.
row와 outbox가 함께 남거나 함께 사라진다.
commit된 outbox를 claim하고 재시도한다.
broker·email·HTTP가 message ID로 중복을 막는다.
핵심: DB rollback이 되돌릴 수 없는 외부 효과는 transaction 안에 호출하지 말고 durable intent로 경계를 넘긴다.