java/Spring

트랜잭션 프록시

킨글 2024. 4. 23. 21:52

프록시를 사용하면 트랜잭션을 처리하는 객체와 비즈니스 로직을 처리하는 서비스 객체를 명확하게 분리할 수 있다.

 

트랜잭션 프록시 코드는 아래와 같이 되어 있다. 

 

 

@Transaction이 적용되어 있는 서비스를 호출하게 되면 EnhancerBySpringCGLIB 이런식으로 클래스 이름이 변경되게 되는데, @Transactional 을 선언하게 되면 스프링에서 약간의 조작을 통해 해당 Service를 상속 받게 된다.

나머지는 스프링 트랜잭션 AOP가 자동으로 처리해준다. 

CGLIB 라이브러리를 통해서 프록시를 만들어낸 것이다. 

 

AOP인지 테스트는 AopUtils.isAopProxy()를 통해서 진행할 수 있다.