cksdn4002.log
로그인
cksdn4002.log
로그인
트랜잭션 전파 - 기본
박찬우
·
2024년 2월 8일
팔로우
0
스프링 DB
목록 보기
47/53
기본
트랜잭션을 각각 사용하는 것이 아니라 트랜잭션이 이미 진행 중인데 여기에 추가로 트랜잭션을 추가하는 경우 기존 것을 이어받아 사용할지 별도로 만들어 사용할지를 결정하는 것을 트랜잭션 전파라고 한다
기본 옵션인
REQUIRED
를 기준으로 설명
외부 수행 중 내부 추가 수행
외부 트랜잭션이 수행중이고, 아직 끝나지 않았는데, 내부 트랜잭션이 수행된다.
외부 트랜잭션이라고 이름 붙인 것은 둘 중 상대적으로 밖에 있기 때문에 외부 트랜잭션이라 한다. 처음 시작된 트랜잭션으로 이해하면 된다.
내부 트랜잭션은 외부에 트랜잭션이 수행되고 있는 도중에 호출되기 때문에 마치 내부에 있는 것 처럼 보여서 내부 트랜잭션이라 한다
스프링에서 이 경우 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 트랜잭션을 만들어준다. 내부 트랜잭션이 외 부 트랜잭션에 참여하는 것이다. 이것이 기본 동작이고, 옵션을 통해 다른 동작방식도 선택할 수 있다.
물리 트랜잭션, 논리 트랜잭션
스프링은 이해를 돕기 위해 논리 트랜잭션과 물리 트랜잭션이라는 개념을 나눈다.
논리 트랜잭션들은 하나의 물리 트랜잭션으로 묶인다.
물리 트랜잭션은 우리가 이해하는 실제 데이터베이스에 적용되는 트랜잭션을 뜻한다. 실제 커넥션을 통해서 트랜 잭션을 시작(
setAutoCommit(false))
하고, 실제 커넥션을 통해서 커밋, 롤백하는 단위이다.
논리 트랜잭션은 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위이다.
이러한 논리 트랜잭션 개념은 트랜잭션이 진행되는 중에 내부에 추가로 트랜잭션을 사용하는 경우에 나타난다. 단순히 트랜잭션이 하나인 경우 둘을 구분하지는 않는다. (더 정확히는
REQUIRED
전파 옵션을 사용하는 경우)
원칙
모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.
하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.
박찬우
진짜 개발자가 되어보자
팔로우
이전 포스트
트랜잭션 전파 - 트랜잭션 두 번 사용
다음 포스트
트랜잭션 전파 - 전파 예제
0개의 댓글
댓글 작성