프로그래밍/spring

트랜잭션 AOP와 데이터소스, 트랜잭션 매니저 자동 등록

승민아 2024. 5. 12. 09:26

@Transactional을 붙이면 스프링이 AOP를 사용해서 트랜잭션을 편리하게 도와준다.

스프링 AOP를 통해 프록시를 도입할 수 있다.

 

프록시를 붙이면 다음과 같이 동작한다.

출처 : 인프런 김영한

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

 

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

트랜잭션 AOP는 @Transactional이 붙어있다면 트랜잭션 프록시를 적용해준다.

 

그러나 트랜잭션 AOP는 스프링 빈에 등록된 트랜잭션 매니저를 찾아서 사용한다.

이제껏 나는 DataSource나 트랜잭션 매니저를 빈으로 등록한적이 없는데 어떻게 빈을 찾아쓴걸까?

 

원래라면 다음과 같이 빈을 직접 등록을 해줘야하지만

@Bean
 DataSource dataSource() {
     return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
 }
 @Bean
 PlatformTransactionManager transactionManager() {
     return new DataSourceTransactionManager(dataSource());
 }

 

스프링 부트는 application.properties를 통해

DataSource를 빈 이름 dataSource로 자동 등록해준다.

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=

 

그리고 적절한 트랜잭션 매니저(PlatformTransactionMangeer)를 스프링 빈에 등록해준다

빈 이름은 transactionManger로 등록된다.