
@Transactional 어노테이션을 사용하려면 스프링에서 트랜잭션 관리를 위한 PlatformTransactionManager를 구성해야 합니다. @Transactional 어노테이션은 트랜잭션을 시작하고 커밋 또는 롤백하는 데 사용되는 트랜잭션 관리자가 필요합니다.
일반적으로 Spring에서는 데이터베이스 트랜잭션을 다루기 위해 DataSourceTransactionManager 또는 JpaTransactionManager와 같은 구현체를 사용합니다. 따라서 프로젝트에 Hibernate와 JPA 같은 ORM (Object-Relational Mapping) 기술이 있다면, 해당 기술에 맞는 트랜잭션 관리자를 구성해야 합니다.
만약 DataSource를 직접 다루는 경우에는 DataSourceTransactionManager를 사용할 수도 있습니다.
/**
* PlatformTransactionManager : 인터페이스
* DataSourceTransactionManager : 구현체
*/
@Bean
public PlatformTransactionManager transactionManager(){
DataSourceTransactionManager tm = new DataSourceTransactionManager(dataSource());
return tm;
}
스프링 부트 환경에서는 일반적으로 DataSource 빈을 설정하면 PlatformTransactionManager가 자동으로 등록됩니다. 스프링 부트는 DataSourceTransactionManager를 기본적으로 사용하여 트랜잭션 관리를 제공합니다.
스프링 부트의 자동 설정은 @EnableTransactionManagement 애너테이션을 사용하여 트랜잭션 관리를 활성화하고, DataSource 빈을 감지하여 자동으로 PlatformTransactionManager를 등록합니다.
따라서 스프링 부트 애플리케이션에서는 일반적으로 별도의 PlatformTransactionManager 빈을 명시적으로 등록할 필요가 없습니다. 그러나 특정한 상황이나 사용자 정의 설정이 필요한 경우에는 수동으로 빈을 등록할 수 있습니다.
간단한 스프링 부트 애플리케이션의 경우, 아래와 같이 @SpringBootApplication 어노테이션을 사용하여 스프링 부트 애플리케이션을 설정하면 됩니다. 이 경우 DataSource 빈이 자동으로 등록되고, 그에 따라 PlatformTransactionManager도 등록됩니다.
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
이 설정에서는 @EnableTransactionManagement 어노테이션을 명시적으로 사용하지 않아도 됩니다. 스프링 부트가 기본적으로 트랜잭션 관리를 활성화합니다.