Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring Transaction Manager_SYS4U

1,006 views

Published on

  • Login to see the comments

Spring Transaction Manager_SYS4U

  1. 1. Spring Transaction Manager 개요작성자 : 김진아 사원작성일 : 2013 년 4 월 30 일Spring 에서 TransactionManager 란?Spring Framework 를 사용하는 가장 중요한 이유 중 하나는 종합적인 트랜잭션 지원입니다.Spring Framework 는 다음과 같은 이점을 제공합니다. JTA, JDBC, Hibernate, JPA 와 JDO 같은 서로 다른 트랜잭션 API 를 포괄하여 일관된프로그래밍 모델을 제공합니다. 선언적 트랜잭션 관리를 제공합니다. JTA 같은 복잡한 트랜잭션 API 보다 더 간단한 트랜잭션 관리 API 를 제공합니다. Spring 은 다양한 데이터 접근 추상화와 잘 통합되어 있습니다.Spring-AOP 를 이용하여 Transaction Manager 사용하기다른 말로는 선언적 트랜잭션 처리라고도 하는데, 복잡하지 않은 경우에는 선언적 트랜잭션을주로 사용합니다. Spring-AOP 를 이용하여 Transaction Manager 를 사용하는 방법은 다음과같습니다.1. Spring 의 Context 파일에 aop 와 tx 에 대한 Namespace 를 정의합니다.2. <tx:advice>와 <aop:config>를 이용하여 Advice 와 Pointcut 을 정의합니다. Exception 이발생했을 때, 특정 Exception 에서만 Rollback 하게 할 수도 있고 Rollback 을 하지 않을
  2. 2. 수도 있습니다.3. 위의 샘플 XML 에서와 같이 트랜잭션 관리를 위해 <tx:advice>의 하위 태그인<tx:method>에는 다음과 같은 상세 속성 정보를 부여할 수 있습니다.속성 이름 설명name 트랜잭션이 적용될 메서드 이름을 명시. “*” 사용 설정이 가능.propagation 트랜잭션의 전파 규칙을 설정isolation 트랜잭션의 격리 레벨을 설정read-only 읽기 전용 여부를 설정no-rollback-for 트랜잭션을 롤백 하지 않을 예외 타입 설정rollback-for 트랜잭션을 롤백 할 예외타입을 설정timeout 트랜잭션의 타입 아웃 시간을 초 단위로 설정
  3. 3. 4. <tx:method> 태그의 propagation 속성에 설정 가능한 값을 다음과 같습니다.속성 값 설명REQUIRED(default)메서드를 수행하는 데 트랜잭션이 필요하다는 것을 의미. 현재진행 중인 트랜잭션이 존재하면, 해당 트랜잭션을 사용하고존재하지 않는다면 새로운 트랜잭션 생성MANDATORY메서드를 수행하는 데 트랜잭션이 필요하다는 것을 의미.REQUIRED 와 달리, 진행 중인 트랜잭션이 존재하지 않을 경우예외를 발생REQUIRES_NEW항상 새로운 트랜잭션을 시작. 기존 트랜잭션이 존재하면 기존트랜잭션을 일시 중지하고 새로운 트랜잭션을 시작. 새로시작된 트랜잭션이 종료된 뒤에 기존 트랜잭션이 계속 됨SUPPORTS메서드가 트랜잭션을 필요로 하지 않지만, 기존 트랜잭션이존재할 경우 트랜잭션을 사용한다는 것을 의미. 진행 중인트랜잭션이 존재하지 않더라도 메서드는 정상적으로 동작NOT_SUPPORTED메서드가 트랜잭션을 필요로 하지 않음을 의미. SUPPORTS 와달리 진행 중인 트랜잭션이 존재할 경우 메서드가 실행되는동안 트랜잭션은 일지 중지되며, 메서드 실행이 종료된 후에트랜잭션을 계속 진행NEVER메서드가 트랜잭션을 필요로 하지 않으며, 만약 진행 중인트랜잭션이 존재하면 예외를 발생NESTED기존 트랜잭션이 존재하면, 기존 트랜잭션에 중첩된트랜잭션에서 메서드를 실행. 기존 트랜잭션이 존재하지 않으면REQUIRED 와 동일하게 동작함. 이 기능은 JDBC 3.0 드라이버를사용할 때에만 적용됨(JTA Provider 가 이 기능을 지원할경우에도 사용 가능)5. <tx:method> 태그의 rollback-for 속성과 no-rollback-for 속성을 통한 롤백 처리는 다음과같습니다.- rollback-for : 예외 발생시 롤백 작업을 수행할 예외타입을 설정- no-rollback-for : 예외가 발생하더라도 롤백 하지 않을 예외 타입을 설정
  4. 4. - 예외 타입이 한 개 이상인 경우 콤마로 구분- 예외 클래스는 완전한 이름을 입력하거나, 패키지 이름을 제외한 클래스 이름만을입력6. <tx:method>태그의 isolation 속성에 설정 가능한 값은 다음과 같습니다.속성 값 설명DEFAULT 기본 설정을 사용READ_UNCOMMITTED 다른 트랜잭션에서 커밋하지 않은 데이터를 읽을 수 있음READ_COMMITTED 다른 트랜잭션에서 의해 커밋 된 데이터를 읽을 수 있음REPEATABLE_READ처음에 읽어 온 데이터와 두 번째 읽어 온 데이터가 동일한값을 갖는다.SERIALIZABLE동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이수행 될 수 없다@Transactional 을 이용하여 트랜잭션 사용하기@Transactional 어노테이션을 이용하는 방식은 단순하게 트랜잭션이 필요한 클래스 또는메소드에 직접 어노테이션을 부여하는 방식으로 설정파일을 이용한 방식보다 훨씬 편리하고,코드를 이해하기에 좋고, 좀 더 복잡하거나 세부적인 처리를 가능하게 해줍니다. 그렇지만트랜잭션 적용 대상을 파악하기 힘듭니다.트랜잭션을 메소드 단위로 적용할 경우에는 유연한 속성 제어는 가능하지만, 코드가지저분해지고 동일한 속성 정보를 가진 경우 메소드마다 중복되는 결과가 나타납니다.Spring 에서는 @Transactional 을 적용할 때 4 단계의 대체 정책을 이용하여 정책에 따라자체적으로 확인해줍니다. 즉, 메소드의 속성을 확인할 때 구현 클래스의 메소드 → 구현클래스→ Interface 의 선언 메소드 → Interface 순으로 차례로 확인하여 Interface 에 선언되어 있을경우 그 하위에 다른 설정이 없으면 Interface 에 선언되어 있는 설정을 모두 반영합니다.@Transactional 사용 방법은 다음과 같습니다.
  5. 5. 1. Spring 의 Context 파일에 tx 에 대한 Namespace 를 정의합니다. (AOP 를 이용하는 방식과동일)2. Data Source 와 Transaction Manager, <tx:annotation-driven> 설정합니다.3. @Transactional 주요 속성은 AOP 에서 정의한 속성과 동일합니다.4. <tx:annotation-driven> 태그의 속성은 다음과 같습니다.속성 값 설명 기본값transaction-manager사용할 Transaction Manager 빈의 이름transactionManagerproxy-target-class클래스에 대해서 프록시를 생성할 지의 여부. true일 경우 CGLIB를 이용해서 프록시를 생성하며,false인 경우 자바 다이나믹 프록시를 이용해서 프록시를 생성falseorder advice 적용 순서 int의 최대값(가장 낮은 순위)5. 클래스에 대한 사용은 다음과 같습니다.6. 메소드에 대한 사용은 다음과 같습니다.
  6. 6. 참고자료- http://0px.kr/332- http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html#tx-propagation- http://beerloveshot.tistory.com/99

×