프록시를 거친 외부 호출인지, 자기 호출인지 먼저 확인한다.
전파 속성은 “기존 트랜잭션에 붙을지”를 정한다
중첩 호출은 기존 트랜잭션 참여, 독립 커밋, 트랜잭션 없음 중 하나를 선택한다. 선택을 잘못하면 원자성이 깨지거나 불필요한 결합이 생긴다.
→
주문 저장과 주문 항목 저장처럼 같은 불변식을 공유한다.
감사 로그처럼 바깥 rollback과 독립성이 필요할 수 있다.
→
단, 바깥의 미커밋 행을 FK로 참조하면 실패할 수 있다.
있으면 참여하고 없으면 새로 만든다.
바깥 트랜잭션을 보류하고 별도 커밋한다.
savepoint 지원이 있을 때 일부만 rollback한다.
긴 조회나 외부 준비를 트랜잭션 없이 수행한다.