@Transactional을 중첩해서 사용할 경우에, 자식 트랜잭션은 부모 트랜잭션과 동일하다.
@Transactional
public void parentMethod() {
childOneMethod();
childTwoMethod();
}
@Transactional
public void childOneMethod() {
...
}
@Transactional
public void childTwoMethod() {
...
}
트러블 슈팅 중, Transaction이 여러개 중첩 된 것이 문제일 것이라는 가설 하에 리서치를 진행하였다. 하지만 리서치 결과, childOneMethod와 childTwoMethod는 모두 parentMethod의 Transaction을 이어받기 때문에, 기본 설정에 따르면 동일한 트랜잭션으로 묶여져 있다는 것을 확인하였다.
@Transactional의 propagation(전파) 기본 설정은 REQUIRED여서 부모 트랜잭션 내부에 자식 트랜잭션이 실행되는 경우, 부모 트랜잭션에 자식 트랜잭션이 합류한다. 부모 트랜잭션이 없는 경우에만 새로운 트랜잭션이 생성된다.
Reference: https://deveric.tistory.com/86