스프링에서는 트랜잭션을 어떻게 처리하는가? (4)

정원식·2023년 12월 16일
0

스프링 트랜잭션

목록 보기
4/5

22년 12월 작성한 글입니다.

개요

  • 우리는 보통 @Transactional 어노테이션을 통해 트랜잭션을 처리합니다.
  • 해당 어노테이션은 어떻게 적용이 되는지
  • 그리고 스프링에서는 트랜잭션을 어떻게 처리하는지 알아봅니다. (5.3.18 기준)
  • 이번 챕터에서는 TransactionTemplate 에 대해 알아봅니다.

TransactionTemplate

  • TransactionTemplateJdbcTemplate, RestTemplate, KafkaTemplate 과 같이 트랜잭션 기능을 제공하는 템플릿 클래스 입니다.
  • @Transactional 를 사용하지 않는 경우 TransactionTemplate 를 사용하여 트랜잭션을 적용할 수 있습니다.
  • TransactionTemplatePlatformTransactionManager 를 사용하여 트랜잭션을 처리합니다.

TransactionTemplate#execute

  • execute 메서드의 내부 구현을 확인시, PlatformTransactionManager 를 통해 트랜잭션의 획득, 커밋 그리고 롤백을 수행합니다.
public <T> T execute(TransactionCallback<T> action) throws TransactionException {
    ...
    // 트랜잭션 획득
    TransactionStatus status = this.transactionManager.getTransaction(this);

    T result;
    try {
        // 로직 수행
        result = action.doInTransaction(status);
    }
    catch (RuntimeException | Error ex) {
        // 롤백
        rollbackOnException(status, ex);
        throw ex;
    }

    ...
    // 커밋
    this.transactionManager.commit(status);
    return result;
}

결론

  • @Transactional 를 사용하지 않는 경우, TransactionTemplate 을 통해 트랜잭션을 처리할수 있습니다.

Reference

spring-tx

profile
매일매일 성장하고 싶은 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보