@Transactional
어노테이션 사용을 통해 트랜잭션 설정RuntimException
및 Error
에 대해서만 ROLLBACK 처리 수행자동 프록시 ← 생성기 ← 어드바이저 ← 포인트컷/어드바이스
Spring은 데이터베이스 트랜잭션 관리를 위해 해당 인터페이스 제공
1. <tx:advice> 태그를 이용한 트랜잭션 처리 방식
<tx:advice transaction-manager="transactionManager" id="txAdvice">
<tx:attributes>
<tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED"
rollback-for="web.mvc.exception.MyException" />
<tx:method name="test" isolation="DEFAULT" propagation="REQUIRED"
rollback-for="web.mvc.exception.MyException" />
</tx:attributes>
</tx:advice>
2. @Transactional 어노테이션을 이용한 트랜잭션 설정
<!-- transaction옵션과 pointcut 설정을 자바기반으로 설정 -->
<tx:annotation-driven transaction-manager="transactionManager" />
어노테이션을 이용하여 트랜잭션을 설정했을 시
<tx:advice> 태그를 이용한 속성들을 아래 코드처럼 사용할 수 있다.
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
public int transfer(TransferDTO transferDTO) throws MyException {}
👀 소심한 주절주절
Transaction의 Joinpoint(메서드)는 service가 된다.
공통으로 들어가는 모듈을 미리 생성하여 제공 하면서
개발자는 비즈니스 로직에 조금 더 집중 할 수 있도록 해준다.
Spring Transaction모듈은 AOP의 Advice 방식으(사전,사후)로 이미 만들어져있다.