Spring

[Spring / Transaction] 트랜잭션 실제 적용되고 있는지 확인하는 방법

2023. 5. 17. 15:35
목차
  1. 트랜잭션 적용 확인
  2. TransactionSynchronizationManager
  3. 예제 코드
  4. Log 확인
  5. TransactionSynchronizationManager 활용 테스트

스프링 프레임워크를 이용하여 트랜잭션을 적용할 때는 @Transactional 애노테이션을 통해 선언적 트랜잭션 방식을 사용한다. 그런데 이 기능은 매우 편리하게 트랜잭션 관련 코드를 대체해 주지만, 실제로 트랜잭션 관련 코드가 눈에 보이지 않고 AOP를 기반으로 동작하기 때문에 실제 트랜잭션이 적용되고 있는지 확인하기 어렵다.

이때, 트랜잭션이 TransactionSynchronizationManager 라는 클래스를 활용하여 확인할 수 있다.

 

트랜잭션 적용 확인


TransactionSynchronizationManager

import org.springframework.transaction.support.TransactionSynchronizationManager;

위의 패키지의 TransactionSynchronizationManager가 제공하는 메서드를 통해 확인할 수 있다.

 

TransactionSynchronizationManager.isActualTransactionActive()

위의 메서드는 boolean 값을 반환한다.

해당 코드가 트랜잭션 진행 중에 실행되면 true를, 아니라면 false를 반환한다.

 


예제 코드

SpringBootTest를 이용해 보자.

 

BasicService는 두 개의 메서드를 갖고 있다.

하나는 트랜잭션을 적용하고, 다른 하나는 트랜잭션을 적용하지 않았다.

 

Test Bean으로 BasicService를 주입해 주고 테스트를 해보자.

 

이제 BasicService를 주입받고 transactional 메서드와 nonTransactional메서드를 실행해 보자.

각 메서드의 log를 확인해 보면 트랜잭션 적용 유무를 알 수 있다.

@Slf4j
@SpringBootTest
public class TxTest {

    @Autowired
    BasicService basicService;

    @Test
    void txTest(){
        basicService.transactional();
	log.info("==================");
        basicService.nontransactional();
    }
    
    //Test Bean 등록
   	@TestConfiguration
    static class TxApplyTestConfig{
        @Bean
        BasicService basicService(){
            return new BasicService();
        }
    }
    
    //Test용 서비스 클래스 작성
    @Slf4j
    static class BasicService{
    
        @Transactional
        public void transactional(){
            log.info("call transactional");
            boolean txActive = TransactionSynchronizationManager.isActualTransactionActive();
            log.info("tx active?={}", txActive);
        }

        public void nonTransactional(){
            log.info("call nonTransactional");
            boolean txActive = TransactionSynchronizationManager.isActualTransactionActive();
            log.info("tx active?={}", txActive);
        }
        
    }

}

 

Log 확인

Getting transaction for [hello.springtx.apply.TxBasicTest$BasicService.transactional]
call transactional
tx active?=true
Completing transaction for [hello.springtx.apply.TxBasicTest$BasicService.transactional]
==================
call nonTransactional
tx active?=false

먼저 실행한 transactional 메서드는 Getting transaction으로 트랜잭션을 시작했다는 로그

tx active?=true로 트랜잭션이 진행 중이라는 로그

Completing transaction으로 트랜잭션이 완료되었다는 로그

를 볼 수 있다.

=========================

그러나 아래쪽에 nonTransactional 메서드는 트랜잭션 관련 로그도 없고 tx active?=false 인것을 볼 수 있다.

 

TransactionSynchronizationManager 활용 테스트

트랜잭션 상태 동작 여부 로그를 이용한 트랜잭션 전파단계 테스트

📁 [Spring] - [Spring] @Transactional 전파수준 정리 - Propagation 예제코드로 테스트해보기

 

[Spring] @Transactional 전파수준 정리 - Propagation 예제코드로 테스트해보기

@Transactional 전파 수준이란?Spring에서는 @Transactional을 통해 트랜잭션을 선언적으로 쉽게 관리한다.대부분의 경우 기본 전파 수준인 REQUIRED만으로도 충분하지만, 하나의 서비스 메서드에서 또 다른

innovation123.tistory.com

반응형

'Spring' 카테고리의 다른 글

[Spring] DB 연동 (MariaDB), MyBatis 사용  (0) 2023.08.14
[Spring MVC] @RequestBody와 @RequestHeader로 JSON 주고받기  (0) 2023.08.13
[Java / Spring] Lombok 롬복  (0) 2023.05.04
[Spring] 세션, 쿠키, @SessionAttribute 로그인 확인  (0) 2023.04.21
[Spring Boot] PRG 패턴 ( Post - Redirect - Get )  (1) 2023.04.21
  1. 트랜잭션 적용 확인
  2. TransactionSynchronizationManager
  3. 예제 코드
  4. Log 확인
  5. TransactionSynchronizationManager 활용 테스트
'Spring' 카테고리의 다른 글
  • [Spring] DB 연동 (MariaDB), MyBatis 사용
  • [Spring MVC] @RequestBody와 @RequestHeader로 JSON 주고받기
  • [Java / Spring] Lombok 롬복
  • [Spring] 세션, 쿠키, @SessionAttribute 로그인 확인
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (233)
    • Java (25)
    • Spring (27)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (47)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (5)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • MySQL
  • Database
  • SQL
  • Redis
  • web
  • 백엔드스쿨
  • JPA
  • Nuxt3
  • 클린코드
  • 백엔드기술면접
  • vue3
  • 기술면접
  • 트랜잭션
  • HTTP
  • Linux
  • 제로베이스
  • 백엔드
  • TechInterview
  • Redisson
  • SpringBoot
  • Spring
  • cleancode
  • springsecurity
  • 백엔드공부
  • mybatis
  • 백준
  • 리눅스
  • 자료구조
  • Java
  • 개발자

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[Spring / Transaction] 트랜잭션 실제 적용되고 있는지 확인하는 방법
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.