이제야 본격적으로 트랜잭션 전파를 활용하기 시작했다.
리마인드 시켜보자면, 트랜잭션을 논리 트랜잭션과 물리 트랜잭션이라는 관점으로 나누면 상당히 관리하기가 편하다.
논리 트랜잭션은 말 그대로 어떤 논리적인 트랜잭션, 어.. 논리적이지, 실제로는 적용을 아직 안 했을 수도 있다는 그런 뜻이다. 논리적으로는 적용을 한 것이다.
물리 트랜잭션은 실제 물리적으로 트랜잭션을 적용 하는 것 이다.
그리고, 이 물리 트랜잭션은 가장 외부의 트랜잭션이나, REQUIRE_NEW 해서 새롭게 트랜잭션을 생성한 트랜잭션이나,
여튼 첫번째 트랜잭션만이 이 물리 트랜잭션을 다룰 수 있다.
이 물리 트랜잭션이 commit 혹은 rollback을 해야 비로소 진정 트랜잭션이 끝나는 것이다.
다른 것은 그냥 논리적으로 commit을 했다거나 rollback을 했다거나 하는 것이다.
참고로 첫번째 트랜잭션은 논리트랜잭션이면서 또한 물리 트랜잭션 인 것이다.
논리 트랜잭션은 개개의 트랜잭션,
물리 트랜잭션은 트랜잭션 범위의 주인? 같은 커넥션을 사용하면 그 커넥션을 말하는..
그럼 이제,
MemberRepository와 LogRepository의 @Transactional 주석을 풀었다.
이게 기본값으 REQUIRED이고, 이거는 기존에 트랜잭션이 있으면 그 트랜잭션을 이어받는 것 이기 때문에,
기본값으로 다 참여가 된다.
즉, 저 셋중 하나라도 rollback된다면 다 rollback,
그러므로 모두다 commit이 되어야 비로소 물리 트랜잭션이 commit 된다.
저렇게 처음 시작된 외부 트랜잭션에서만 물리 트랜잭션을 관리한다.
나머지 내부 트랜잭션은 그저 논리적으로만 commit이나 rollback이다.
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
59. 트랜잭션 전파 활용 6 (0) | 2023.10.17 |
---|---|
58. 트랜잭션 전파 활용 5 (0) | 2023.10.17 |
56. 트랜잭션 전파 활용 3 (0) | 2023.10.17 |
55. 트랜잭션 전파 활용 2 (0) | 2023.10.17 |
54. 트랜잭션 전파 활용 1 (0) | 2023.10.17 |