트랜잭션이란?
두 개 이상의 쿼리를 한 작업으로 실행해야 할 때 사용하는 것
트랜잭션은 여러 쿼리를 논리적으로 하나의 작업으로 묶어준다.
트랜잭션 범위를 매우 쉽게 지정가능한 어노테이션이다.
Transactional 어노테이션이 제대로 동작하려면 다음의 두 가지 내용을 스프링 설정에 추가해야 한다.
@Configuration
@EnableTransactionManagement
public class AppCtx {
....
@Bean
public PlatformTransactionManager transactionManager() {
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(dataSource());
return tm;
}
}
스프링은 @Transactional 어노테이션을 이용해서 트랜잭션을 처리하기 위해 내부적으로 AOP를 사용한다. 결국 트랜잭션 처리가 프록시를 통해서 이루어진다는 것이다.
@Transactional은 프록시 형태로 동작하기에 외부에서 접근이 가능한 메서드만 설정할 수 있다. 따라서 public의 형태여야 한다.