트랜잭션

CHM·2022년 6월 24일
0

Spring

목록 보기
24/26

선언적 트랜잭션

  • 스프링은 선언적 트랜잭션 방식을 사용한다
    • 어노테이션을 이용한 방식
    • AOP를 이용한 방식
    • 프로그램에 의한 방식
  • 트랜잭션은 주로 Service 메서드를 대상으로 한다.

어노테이션에 의한 트랜잭션

  1. @root-context.xml에 Transaction Manager를 설정

    <!-- Transaction Manager -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager"/>
  2. 트랜잭션이 필요한 클래스나 메서드에 @Transactional 어노테이션 추가

  • 이 방식은 누락되거나 하는 문제가 발생할 수도 있음
  • 따라서 AOP를 이용한 트랜잭션 방식이 나옴

AOP를 이용한 트랜잭션

  • @Transactional 어노테이션을 일일이 붙여줄 필요없이 한번에 처리 가능
  1. Transaction Manager 설정

    <!-- Transaction Manager -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager"/>
  2. 트랜잭션 어드바이스 설정

  • 스프링에서 기본적으로 사용하는 내장 어드바이스 설정
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
      <tx:attributes>
        <tx:method name="get*" read-only="true"/>
        <tx:method name="delete*"/>
      </tx:attributes>
    </tx:advice>
  1. AOP 설정
  • 트랜잭션을 적용할 메서드 설정
  • 밑 코드는 service패키지 하위 모든 클래스의 모든 메서드에 트랜잭션을 설정하겠다는 뜻
    <aop:config>
      <aop:pointcut id="transactionPointcut" expression="execution(*kr.co.acomp.hello.service.*.*(..))"/>
      <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
    </aop:config>

0개의 댓글