트랜잭션 전파 - 기본

박찬우·2024년 2월 8일

스프링 DB

목록 보기
47/53

기본

  • 트랜잭션을 각각 사용하는 것이 아니라 트랜잭션이 이미 진행 중인데 여기에 추가로 트랜잭션을 추가하는 경우 기존 것을 이어받아 사용할지 별도로 만들어 사용할지를 결정하는 것을 트랜잭션 전파라고 한다
  • 기본 옵션인 REQUIRED를 기준으로 설명

외부 수행 중 내부 추가 수행


  • 외부 트랜잭션이 수행중이고, 아직 끝나지 않았는데, 내부 트랜잭션이 수행된다.
  • 외부 트랜잭션이라고 이름 붙인 것은 둘 중 상대적으로 밖에 있기 때문에 외부 트랜잭션이라 한다. 처음 시작된 트랜잭션으로 이해하면 된다.
  • 내부 트랜잭션은 외부에 트랜잭션이 수행되고 있는 도중에 호출되기 때문에 마치 내부에 있는 것 처럼 보여서 내부 트랜잭션이라 한다
  • 스프링에서 이 경우 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 트랜잭션을 만들어준다. 내부 트랜잭션이 외 부 트랜잭션에 참여하는 것이다. 이것이 기본 동작이고, 옵션을 통해 다른 동작방식도 선택할 수 있다.

물리 트랜잭션, 논리 트랜잭션

  • 스프링은 이해를 돕기 위해 논리 트랜잭션과 물리 트랜잭션이라는 개념을 나눈다.
  • 논리 트랜잭션들은 하나의 물리 트랜잭션으로 묶인다.
  • 물리 트랜잭션은 우리가 이해하는 실제 데이터베이스에 적용되는 트랜잭션을 뜻한다. 실제 커넥션을 통해서 트랜 잭션을 시작( setAutoCommit(false)) 하고, 실제 커넥션을 통해서 커밋, 롤백하는 단위이다.
  • 논리 트랜잭션은 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위이다.
  • 이러한 논리 트랜잭션 개념은 트랜잭션이 진행되는 중에 내부에 추가로 트랜잭션을 사용하는 경우에 나타난다. 단순히 트랜잭션이 하나인 경우 둘을 구분하지는 않는다. (더 정확히는 REQUIRED 전파 옵션을 사용하는 경우)
  • 원칙
    • 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.
    • 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.
profile
진짜 개발자가 되어보자

0개의 댓글