<aside> 💡 소스코드에 직접 트랜잭션 관련 로직을 넣어두지 않고 비즈니스 로직에서 완전히 분리하는 방식으로 해당 어노테이션이 붙은 메소드를 하나의 트랜잭션으로 묶어주는 역할을 함

</aside>

Spring에서는 AOP를 사용해서 ‘선언적 트랜잭션’ 을 구현하고 있다.

  1. AbstractPlatformTransactionManager 에서 팩토리 메서드 패턴을 사용해서 여러 PlatformTransactionManager 을 확장한다.
  2. TranscationInterceptor 를 통해 트랜잭션 경계를 설정하고 여기에서 주입된 PlatformTranscationManager 를 사용한다.
  3. SpringTranscationAnnotationParser 를 통해 @Transcational 관련 속성을 파싱한다.
  4. AbstractAutoProxyCreator 에 의해 Proxy 로 생성되고 실제 클라이언트가 타깃에 접근할 때는 Proxy 를 거쳐 TransactionInterceptor 를 사용해 트랜잭션을 열고 타깃의 메서드를 호출하고 커밋, 롤백을 수행한다.

선언적 트랜잭션 방식을 사용하는 이유는?

비즈니스 로직과 트랜잭션 처리 로직을 분리하여 비즈니스 로직에 집중하기 위함.

트랜잭션의 격리 수준 (Isolation Level)

readOnly 옵션