Propagation

전파 속성은 “기존 트랜잭션에 붙을지”를 정한다

중첩 호출은 기존 트랜잭션 참여, 독립 커밋, 트랜잭션 없음 중 하나를 선택한다. 선택을 잘못하면 원자성이 깨지거나 불필요한 결합이 생긴다.

호출 지점에 트랜잭션이 있는가?

프록시를 거친 외부 호출인지, 자기 호출인지 먼저 확인한다.

함께 커밋해야 하면 REQUIRED

주문 저장과 주문 항목 저장처럼 같은 불변식을 공유한다.

실패해도 따로 남겨야 하는가?

감사 로그처럼 바깥 rollback과 독립성이 필요할 수 있다.

독립 커밋이면 REQUIRES_NEW

단, 바깥의 미커밋 행을 FK로 참조하면 실패할 수 있다.

REQUIRED기본 선택

있으면 참여하고 없으면 새로 만든다.

REQUIRES_NEW독립 기록

바깥 트랜잭션을 보류하고 별도 커밋한다.

NESTED부분 되돌림

savepoint 지원이 있을 때 일부만 rollback한다.

NOT_SUPPORTED경계 밖 실행

긴 조회나 외부 준비를 트랜잭션 없이 수행한다.