본문 바로가기
IT/spring

스프링 트랜잭션 어드바이스 설정하기

by 뉴코딩맨 2023. 6. 23.
스프링 프레임워크에서는 트랜잭션 관리를 위해 어드바이스(Advice)를 사용할 수 있습니다. 어드바이스는 트랜잭션의 시작, 커밋, 롤백 등과 같은 트랜잭션 관련 동작을 정의하는 역할을 합니다. 스프링 트랜잭션 어드바이스를 설정하는 방법에 대해 알아보고, 예시를 통해 설명하겠습니다.
 
 

어드바이스 설정 방법

스프링 트랜잭션 어드바이스를 설정하는 방법은 다음과 같습니다.
 
XML 설정 파일에 트랜잭션 어드바이스를 등록합니다.
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!-- 메소드에 적용할 트랜잭션 속성 설정 -->
    </tx:attributes>
</tx:advice>
필요한 빈에 트랜잭션 어드바이스를 적용합니다. 예를 들어, AOP를 사용하여 특정 메소드에 트랜잭션을 적용하려면 다음과 같이 설정합니다.

 

 
<aop:config>
    <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.example.service.*.*(..))"/>
</aop:config>
위의 예시에서는 transactionAdvice라는 트랜잭션 어드바이스를 등록하고 있습니다. transactionAdvice는 transactionManager를 사용하여 트랜잭션을 관리합니다. 또한, tx:attributes를 통해 메소드에 적용할 트랜잭션 속성을 설정할 수 있습니다.
 
또한, AOP를 사용하여 특정 메소드에 트랜잭션을 적용하는 예시를 보여드렸습니다. aop:advisor를 사용하여 transactionAdvice를 적용하고, pointcut을 통해 트랜잭션을 적용할 메소드의 패턴을 지정할 수 있습니다.
 
 

설명 예시

아래는 스프링 트랜잭션 어드바이스를 설정하는 예시입니다.
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/aop
                           http://www.springframework.org/schema/aop/spring-aop.xsd
                           http://www.springframework.org/schema/tx
                           http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 트랜잭션 어드바이스 설정 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="get*" read-only="true" />
            <tx:method name="find*" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <!-- AOP 설정 -->
    <aop:config>
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.example.service.*.*(..))"/>
    </aop:config>

    <!-- 데이터 소스 및 트랜잭션 관리자 설정 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- 데이터 소스 설정 -->
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 서비스 빈 등록 -->
    <bean id="userService" class="com.example.service.UserService">
        <!-- 서비스 빈 설정 -->
    </bean>

</beans>
위의 예시에서는 transactionAdvice라는 트랜잭션 어드바이스를 설정하고 있습니다. tx:attributes를 통해 save*, update*, delete* 메소드에는 REQUIRED 전파 속성을, get*, find* 메소드에는 읽기 전용 속성을 적용하고 있습니다. 또한, aop:advisor를 사용하여 transactionAdvice를 com.example.service.* 패키지에 있는 모든 메소드에 적용하도록 설정하였습니다.
 
이렇게 스프링 트랜잭션 어드바이스를 설정하면 UserService와 같은 빈에서 트랜잭션을 적용할 수 있게 됩니다. 이를 통해 데이터베이스 작업 등의 안전한 처리와 롤백 기능을 활용할 수 있습니다.
 
이상으로 스프링 트랜잭션 어드바이스를 설정하는 방법에 대해 알아보았습니다. 트랜잭션 어드바이스를 적절히 설정하여 안정적이고 견고한 애플리케이션을 개발하는 데 도움이 되길 바랍니다.
 

댓글