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 |