[Spring] @Transactional 어떤 걸 사용해야 할까?

chiyongs·2022년 6월 23일
3
post-thumbnail

@Transactional

javax or spring

Spring Framework와 함께 백엔드를 구현하면서 트랜잭션 처리를 위해 자주 사용하는 어노테이션인 @Transactional
자세히 보니 두 가지 종류가 있었습니다. 어떤 걸 사용해야 하는지 궁금증이 생겨 알아보았습니다.

  • @org.springframework.transaction.annotation.Transactional
  • @javax.transaction.Transactional

결론

결론부터 말씀드리자면 Spring Framework에서 지원하는 @Transactional 어노테이션을 사용하는 것을 권장드립니다. (@org.springframework.transaction.annotation.Transactional)
두 어노테이션 모두 동일한 기본 기능을 제공합니다. 하지만, Spring에서 지원하는 @Transactional이 더 많은 부가 기능을 가지고 있습니다.
만약 트랜잭션 관련 옵션들을 사용하지 않고, Spring의 버전이 4.0이상이라면 어느 것을 사용하더라도 상관이 없습니다.

Spring @Transactional의 옵션

그렇다면 Spring Framework의 @org.springframework.transaction.annotation.Transactional의 관련 옵션들을 무엇일까요?

공식문서에 따르면,

옵션명 기능설명
isolation Transaction의 Isolation level을 설정한다.
label Transaction label을 설정한다.
noRollbackFor transaction rollback 처리가 되지 않아야 할 예외 클래스를 명시한다.
noRollbackForClassName transaction rollback 처리가 되지 않아야 할 예외 클래스 이름을 명시한다.
propagation Transaction Propagation 타입을 설정한다.
readOnly Transaction을 readOnly로 설정한다.
rollbackFor transaction rollback이 되어야하는 예외 클래스를 명시한다.
rollbackForClassName transaction rollback이 되어야하는 예외 클래스 이름을 명시한다.
timeout Transaction의 Timeout을 설정한다. (단위 : 초,seconds)
timeoutString Transaction의 Timeout을 설정한다. (단위 : 초,seconds)
transactionManager 특정 Transaction의 qualifier value를 설정한다.
value transactionManager의 alias(별칭)을 설정한다.

@Transactional 어노테이션에 대해 공부하면서 작성한 글입니다. 잘못된 내용이나 오타가 있다면 댓글로 알려주시면 감사하겠습니다 :)

0개의 댓글