<aside> 💡 소스코드에 직접 트랜잭션 관련 로직을 넣어두지 않고 비즈니스 로직에서 완전히 분리하는 방식으로 해당 어노테이션이 붙은 메소드를 하나의 트랜잭션으로 묶어주는 역할을 함
</aside>
Spring에서는 AOP를 사용해서 ‘선언적 트랜잭션’ 을 구현하고 있다.
AbstractPlatformTransactionManager 에서 팩토리 메서드 패턴을 사용해서 여러 PlatformTransactionManager 을 확장한다.TranscationInterceptor 를 통해 트랜잭션 경계를 설정하고 여기에서 주입된 PlatformTranscationManager 를 사용한다.SpringTranscationAnnotationParser 를 통해 @Transcational 관련 속성을 파싱한다.AbstractAutoProxyCreator 에 의해 Proxy 로 생성되고 실제 클라이언트가 타깃에 접근할 때는 Proxy 를 거쳐 TransactionInterceptor 를 사용해 트랜잭션을 열고 타깃의 메서드를 호출하고 커밋, 롤백을 수행한다.비즈니스 로직과 트랜잭션 처리 로직을 분리하여 비즈니스 로직에 집중하기 위함.