• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring Transaction 5
        2022년 09월 28일
        • starryeye
        • 작성자
        • 2022.09.28.:30
        반응형

        트랜잭션이 둘 이상 있을 경우 어떻게 동작 할까?

        (트랜잭션 내부에서 트랜잭션이 또 적용되면?)

         

        트랜잭션 전파(Transaction Propagation)에 대하여 학습해보자..

         

        기본 대원칙

        1. 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.

        2. 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.

         

        기본 대원칙에 대해 자세히 알아보자.

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

        위 그림 처럼, 클라이언트가 어떤 로직1을 호출 하면 트랜잭션이 수행되고

        로직1은 로직2를 호출하여 트랜잭션이 또 한번 수행된다고 생각 해보자.

         

        스프링은 첫번째 두번째 트랜잭션을 논리 트랜잭션, 두개를 묶어 물리 트랜잭션이라 개념을 만들었다.

         

        물리 트랜잭션

        물리 트랜잭션은 실제 데이터베이스에 적용되는 트랜잭션을 뜻한다.

        실제 커넥션을 통해서 트랜잭션을 시작(setAutoCommit(false)) 한다.

        실제 커넥션을 통해 커밋, 롤백하는 단위가 바로 물리 트랜잭션이다.

         

        논리 트랜잭션

        논리 트랜잭션들은 하나의 물리 트랜잭션으로 묶인다.

        논리 트랜잭션은 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위이다.

        따라서...

        논리 트랜잭션은 트랜잭션이 수행되는 도중 내부에서 추가로 트랜잭션을 사용하는 경우에 나타난다.

        (REQUIRED 옵션 사용할 경우)

         

        이러한 개념을 바탕으로 기본 대원칙을 다시 한번 상기 해보자.

        1. 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.

        2. 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.

         

         

        아래 예시 상황에서 내외부 트랜잭션이 커밋 되는 경우와 안되는 경우를 이해 해보자.

         

        외부 트랜잭션 커밋

        내부 트랜잭션 커밋

        -> 물리 트랜잭션 커밋

         

         

        외부 트랜잭션 롤백

        내부 트랜잭션 커밋

        -> 물리 트랜잭션 롤백

         

        외부 트랜잭션 커밋

        내부 트랜잭션 롤백

        -> 물리 트랜잭션 롤백 + 클라이언트로 UnexpectedRollbackException예외 던짐

         

         

         

        트랜잭션 전파 옵션

         

        REQUIRED

        기본 옵션이다. (@Transaction 과 동일하다.)

        기존 트랜잭션이 없으면 새로운 트랜잭션 생성

        기존 트랜잭션이 있으면 기존 트랜잭션에 참여

        ex) @Transaction(propagation = Propagation.REQUIRED)

         

        REQUIRED_NEW

        기존 트랜잭션이 없으면 새로운 트랜잭션 생성

        기존 트랜잭션이 있어도 새로운 트랜잭션 생성

         

        SUPPORT

        기존 트랜잭션이 없으면 트랜잭션 없이 진행

        기존 트랜잭션이 있으면 기존 트랜잭션에 참여

         

        나머지는 필요하면 찾아보자..

        NOT_SUPPORT

        MANDATORY

        NEVER

        NESTED

         

        반응형

        'Spring > DB, Cache 연동' 카테고리의 다른 글

        JPA 핵심 정리 - Table 매핑  (0) 2023.02.22
        JPA 핵심 정리 - 정의  (0) 2023.02.22
        Spring Transaction 4  (0) 2022.09.28
        Spring Transaction 3  (0) 2022.09.22
        Spring Transaction 2  (0) 2022.09.22
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바