Programing/Spring

Spring @Transactional 이 정상동작 하지 않는 이유

리커니 2021. 10. 14. 17:12
반응형

Spring @Transactional 이 정상동작 하지 않는 이유

 

interface 메소드에 @Transactional 어노테이션을 사용하여 처리할 경우 아래의 Link를 참고하세요.

 

https://aljjabaegi.tistory.com/473

 

Spring Transaction 설정 방법. 에러발생? 롤백해.

Spring Transaction 설정 방법. 에러발생? 롤백해. Transaction 처리는 쉽게 말해 DB의 상태를 바꾸는 작업단위입니다. 예를 들어 Delete 후에 Insert 를 해야 하는 로직이 있다면, 이 Delete, Insert는 하나..

aljjabaegi.tistory.com

 

class 메소드에 @Transactional 을 줄 경우 정상동작 하지 않습니다.

 

이유는 트랜젝션이 내부적으로 AOP Dynamic Proxy 방식으로 동작하는데, 이는 기본적으로 인터페이스만 프록시 객체로 생성하기 때문입니다.

정확한 이해를 위해서는 Transactional 의 동작원리 와 Proxy Pattern을 검색해보세요.

 

위의 문제를 해결하기 위해서는 클래스도 프록시 객체로 생성하는 옵션을 추가해주면 됩니다.

위 링크에서 생성한 comtext-transaction.xml 파일에 아래 코드를 추가합니다.

 

<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />

 

옵션을 추가하게 되면 클래스도 프록시 객체를 생성하여 클래스 내부 메소드에 @Transactional 옵션을 주면 정상동작 하게 됩니다.

 

DataSourceTransactionManager를 bean에 등록한 id 와 transaction-manager 값을 같게 설정함에 주의하세요

 

반응형