Transactional 전파

김민지·2022년 10월 13일
0

JPA

목록 보기
1/27

Transaction

  • 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위
  • spring에서는 @Transactional 어노테이션을 통해 트랜잭션의 범위를 지정해줄 수 있다.

클래스단, 메서드단의 @Transactional 선언

  • 클래스 단에 @Transactional 선언 -> 해당 클래스의 모든 메서드에 @Transactional이 적용된 효과
  • 메서드단에 @Transcational 선언 -> 메서드 하나를 트랜잭션으로 보고 메서드 중간에 에러가 생기면 롤백하는 등 처리를 해준다

부모메서드, 자식메서드의 @Transactional 선언

  1. 부모메서드에 @Transactional선언, 자식 메서드에 @Transactional 선언x
    -> 자식메서드에서 select해온 값들은 제대로 불러와지지 않고, 부모메서드에서 select해온 값들은 제대로 불러와짐(이해감)
  2. 부모메서드에 @Transactional선언x, 자식 메서드에 @Transactional 선언
    -> 이런경우 제대로 동작하지 않은다고 들었는데 제껀 왜 값을 잘 받아오는건지 모르겠어요
    제가 테스트를 잘못한건가요? 원래 어떻게 되나요?
  3. 부모메서드에 @Transactional선언, 자식 메서드에 @Transactional 선언
    -> 자식 메서드에서 요청한 쿼리도 모두 쌓았다가 부모메서드가끝날때
    보내는게 아니라 자식메서드에서 쿼리가 발생하면 자식메서드가 끝날때 쿼리가 날아가는 것 같아요.
    제가 테스트 한게 맞을까요?

테스트

트랜잭션 전파

  • 전파설정옵션의 기본값에 대해 알아 볼 것이다

    부모 트랜잭션이 존재한다면 부모 트랜잭션으로 합류합니다. 부모 트랜잭션이 없다면 새로운 트랜잭션을 생성합니다.
    중간에 롤백이 발생한다면 모두 하나의 트랜잭션이기 때문에 진행사항이 모두 롤백됩니다

  • 이 사진을 참고하면 2번에 제대로 값이 나오는게 맞는 것 같고, 3번은 자식메서드가 끝날때 쿼리가 날아가는것이 아니라 쌓였다가 부모메서드가 끝날때 쿼리가 나가는 것 같다.

출처
https://deveric.tistory.com/86

profile
안녕하세요!

0개의 댓글