쌓고 쌓다
트랜잭션 AOP와 데이터소스, 트랜잭션 매니저 자동 등록 본문
@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로 등록된다.
'프로그래밍 > spring' 카테고리의 다른 글
SpringSecurity 적용 후 403 에러 발생! CSRF 그게 뭘까? (0) | 2024.06.18 |
---|---|
체크 예외와 언체크(런타임) 예외 차이 / Throwable? (0) | 2024.05.17 |
스프링의 트랜잭션 추상화 PlatformTransactionManager (1) | 2024.05.05 |
커넥션 풀과 데이터 소스 (0) | 2024.05.05 |
최신순 정렬 테스트시 발생한 시간순 정렬 문제 (1) | 2024.03.31 |
Comments