부분 rollback은 업무가 부분 성공을 허용할 때만 쓴다

Savepoint를 기술 편의로 추가하지 않고 사용자에게 부분 결과를 어떻게 보일지와 재시도 단위를 먼저 결정한다.

업무 계약이 부분 성공을 명시적으로 허용하는가?
NO

전체 Rollback

한 항목 실패가 전체 command 실패라면 savepoint를 쓰지 않는다.

YES

Savepoint 후보

row별 성공·실패를 결과에 노출하고 각 구간을 되돌린다.

EXTERNAL

Transaction 밖 분리

되돌릴 수 없는 외부 효과는 outbox·worker로 이동한다.

RETRY

Stable key

부분 반영 뒤 재실행해도 중복되지 않는 식별자를 둔다.

핵심: 부분 rollback은 데이터베이스 기능이 아니라 부분 성공을 허용하는 제품 계약의 구현이다.