스프링 DB 2편(데이터 접근 활용 기술)

Ch10. 스프링 트랜잭션 전파(기본) - 스프링 트랜잭션 전파(커밋, 롤백)

webmaster 2022. 7. 7. 14:20
728x90

트랜잭션이 둘 이상 있을 때 어떻게 동작하는지 자세히 알아보고, 스프링이 제공하는 트랜잭션 전파 (propagation)라는 개념도 알아보자.

트랜잭션 전파를 이해하는 과정을 통해서 스프링 트랜잭션의 동작 원리도 더 깊이 있게 이해할 수 있을 것이다

@Slf4j
@SpringBootTest
public class BasicTxTest {

    @Autowired
    PlatformTransactionManager txManager;

    @TestConfiguration
    static class Config{
        @Bean
        public PlatformTransactionManager transactionManager(DataSource dataSource){
            return new DataSourceTransactionManager(dataSource);
        }
    }

    @Test
    public void commit(){
        log.info("트랜잭션 시작");
        TransactionStatus status = txManager.getTransaction(new DefaultTransactionAttribute());

        log.info("트랜잭션 커밋 시작");
        txManager.commit(status);
        log.info("트랜잭션 커밋 완료");
    }

    @Test
    public void rollback(){
        log.info("트랜잭션 시작");
        TransactionStatus status = txManager.getTransaction(new DefaultTransactionAttribute());

        log.info("트랜잭션 롤백 시작");
        txManager.rollback(status);
        log.info("트랜잭션 롤백 완료");
    }
}
  • @TestConfiguration : 해당 테스트에서 필요한 스프링 설정을 추가로 할 수 있다.
  • DataSourceTransactionManager를 스프링 빈으로 등록했다. 이후 트랜잭션 매니저인 PlatformTransactionManager를 주입받으면 방금 등록한 DataSourceTransactionManager 가 주입된다

commit()

@Test
public void commit(){
    log.info("트랜잭션 시작");
    TransactionStatus status = txManager.getTransaction(new DefaultTransactionAttribute());

    log.info("트랜잭션 커밋 시작");
    txManager.commit(status);
    log.info("트랜잭션 커밋 완료");
}
  • txManager.getTransaction(new DefaultTransactionAttribute()) : 트랜잭션 매니저를 통해 트랜잭션을 시작(획득)한다
  • txManager.commit(status) : 트랜잭션을 커밋한다.

rollback()

@Test
public void rollback(){
    log.info("트랜잭션 시작");
    TransactionStatus status = txManager.getTransaction(new DefaultTransactionAttribute());

    log.info("트랜잭션 롤백 시작");
    txManager.rollback(status);
    log.info("트랜잭션 롤백 완료");
}
  • txManager.getTransaction(new DefaultTransactionAttribute()) : 트랜잭션 매니저를 통해 트랜잭션을 시작(획득)한다.
  • txManager.rollback(status) 트랜잭션을 롤백한다.
728x90