스프링/5. 스프링 DB-1

27. 트랜잭션 AOP

sdafdq 2023. 10. 1. 19:56

AOP는 관점 지향 프로그래밍 이라고 해서..

https://qwefdg3.tistory.com/89

좀 그러니까 공통사항들? 그런 거 처리하는 건데.

 

지금은 Proxy를 통해서 공통사항들을 처리한다고 한다.

 

딱 트랜잭션을 위해 스프링에서 제공해주는 애노테이션이 있다. 

@Transactional이다.

이거 붙으면 뭐 아래 비즈니스 로직을 트랜잭션의 한 부분

예를 들어

TransactionStatus status = transactionManager.getTransaction(..);

try{

    로직

    commit();

}catch(e){

    rollback();

    throw new RuntimeException(e);

}

 

저 로직부분에 넣어준다는 그런 소리 인 것 같다.

 

 

 

우선 프록시 도입 전 을 보자.

직접 순수 비즈니스 로직만 있어야 할 서비스에서 트랜잭션까지 관리한다. 트랜잭션, 비즈니스 로직 둘다 관심사항인 것이다.

 

 

프록시 도입을 하게 되면,

이렇게 프록시가 먼저 호출되고 그 포록시로부터 서비스의 비즈니스 로직이 호출된다.

앞서 했던

TransactionStatus status = transactionManager.getTransaction(..);

try{

    로직

    commit();

}catch(e){

    rollback();

}

이렇게 감싸는 거랑 거의 비슷하다.

 

 

이렇게 하면, 트랜잭션 프록시가 모든 비즈니스 로직을 가져가기 때문에 서비스에는 순수 비즈니스 로직만 남길 수 있다.

 

 

 

 

스프링 부트를 사용하면 트랜잭션 AOP를 처리하기 위한 스프링 빈들도 모두 자동등록 해 준다.

트랜잭션AOP를 사용하려면

어드바이저 : BeanFactoryTransactionAttributeSourceAdvisor,

포인트 컷 : TransactionAttributeSourcePointcut,

어드바이스 : TransactionInterceptor

 

이것들이 필요한 데, 다 자동으로 등록해 준다.

'스프링 > 5. 스프링 DB-1' 카테고리의 다른 글

29. 스프링 부트 자동 리소스 등록  (0) 2023.10.01
28. 트랜잭션 AOP 적용.  (0) 2023.10.01
26. 트랜잭션 템플릿  (0) 2023.10.01
25. 트랜잭션 매니저  (0) 2023.10.01
24. 트랜잭션 동기화  (0) 2023.09.30