Spring의 기능 중 하나인 트랜잭션 관리에 대해 알아보자.


◆ 트랜잭션 처리

SQL실행 중 여러 행을 처리할 때 하나라도 에러가 발생할 경우 나머지 SQL문에 대한 처리를 rollback시켜야 하는데 이를 트랜잭션 처리라 하며, SqlSessionTemplate객체는 close, commit, rollback등의 메서드가 없다.

스프링에서는 이러한 트랜잭션 처리를 해주는 트랜잭션객체를 지원해준다.
따라서 에러가 터질 경우 aop를 이용하여 자동적으로 트랜잭션을 처리할 수 있도록 하는 설정이 필요하다.
( 트랜잭션을 등록 해놓고 쓰게 되면 일일이 commit, rollback등의 작업이 필요 없다. )


▶ 설정

트랜잭션 등록을 하기 전에 spring bean configuration File파일에서 Namespaces탭의 aop와 tx체크 설정이 필요하다.

1. <bean>태그를 이용하여 DataSourceTransactionManager 트랜잭션 매니저 객체를 등록

<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <constructor-arg name="dataSource" ref="ds">
    </constructor-arg>
</bean>

생성자의 인자로 DataSource객체가 필요하다.


2. <tx:advice> 태그를 이용하여 트랜잭션이 처리할 메서드를 등록

<tx:advice id="tx" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>
  • transaction-manager에 트랜잭션매니저 객체의 id값을 준다.
  • tx:method name은 SQL문을 처리하는 메서드의 이름을 등록시켜 둔다. ( *은 모든 메서드 )


3. SQL문을 처리하는 객체를 등록

aop를 이용해 트랜잭션이 자동적으로 처리되도록 설계한다.

<aop:config>
    <aop:advisor advice-ref="tx" pointcut="bean(cs)" />
</aop:config>
  • 트랜잭션은 <aop:advisor>태그를 이용하여 등록시킨다.
  • 위 <tx>로 등록시킨 id를 advice-ref와 연결시킨다.
  • 포인트컷에 등록하는 값은 SQL문을 처리하는 메서드의 객체이다.

트랜잭션 처리는 예외가 발생해야 처리되기 때문에, 트랜잭션을 처리하는 메서드에서는 try~catch가 아닌 thorw로 던져서 작성한다.