SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
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 을 하지 않을
수도 있습니다.
3. 위의 샘플 XML 에서와 같이 트랜잭션 관리를 위해 <tx:advice>의 하위 태그인
<tx:method>에는 다음과 같은 상세 속성 정보를 부여할 수 있습니다.
속성 이름 설명
name 트랜잭션이 적용될 메서드 이름을 명시. “*” 사용 설정이 가능.
propagation 트랜잭션의 전파 규칙을 설정
isolation 트랜잭션의 격리 레벨을 설정
read-only 읽기 전용 여부를 설정
no-rollback-for 트랜잭션을 롤백 하지 않을 예외 타입 설정
rollback-for 트랜잭션을 롤백 할 예외타입을 설정
timeout 트랜잭션의 타입 아웃 시간을 초 단위로 설정
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 : 예외가 발생하더라도 롤백 하지 않을 예외 타입을 설정
- 예외 타입이 한 개 이상인 경우 콤마로 구분
- 예외 클래스는 완전한 이름을 입력하거나, 패키지 이름을 제외한 클래스 이름만을
입력
6. <tx:method>태그의 isolation 속성에 설정 가능한 값은 다음과 같습니다.
속성 값 설명
DEFAULT 기본 설정을 사용
READ_UNCOMMITTED 다른 트랜잭션에서 커밋하지 않은 데이터를 읽을 수 있음
READ_COMMITTED 다른 트랜잭션에서 의해 커밋 된 데이터를 읽을 수 있음
REPEATABLE_READ
처음에 읽어 온 데이터와 두 번째 읽어 온 데이터가 동일한
값을 갖는다.
SERIALIZABLE
동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이
수행 될 수 없다
@Transactional 을 이용하여 트랜잭션 사용하기
@Transactional 어노테이션을 이용하는 방식은 단순하게 트랜잭션이 필요한 클래스 또는
메소드에 직접 어노테이션을 부여하는 방식으로 설정파일을 이용한 방식보다 훨씬 편리하고,
코드를 이해하기에 좋고, 좀 더 복잡하거나 세부적인 처리를 가능하게 해줍니다. 그렇지만
트랜잭션 적용 대상을 파악하기 힘듭니다.
트랜잭션을 메소드 단위로 적용할 경우에는 유연한 속성 제어는 가능하지만, 코드가
지저분해지고 동일한 속성 정보를 가진 경우 메소드마다 중복되는 결과가 나타납니다.
Spring 에서는 @Transactional 을 적용할 때 4 단계의 대체 정책을 이용하여 정책에 따라
자체적으로 확인해줍니다. 즉, 메소드의 속성을 확인할 때 구현 클래스의 메소드 → 구현클래스
→ Interface 의 선언 메소드 → Interface 순으로 차례로 확인하여 Interface 에 선언되어 있을
경우 그 하위에 다른 설정이 없으면 Interface 에 선언되어 있는 설정을 모두 반영합니다.
@Transactional 사용 방법은 다음과 같습니다.
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 빈
의 이름
transactionManager
proxy-target-class
클래스에 대해서 프록시를 생성
할 지의 여부. true일 경우 CGLIB
를 이용해서 프록시를 생성하며,
false인 경우 자바 다이나믹 프록
시를 이용해서 프록시를 생성
false
order advice 적용 순서 int의 최대값(가장 낮은 순위)
5. 클래스에 대한 사용은 다음과 같습니다.
6. 메소드에 대한 사용은 다음과 같습니다.
참고자료
- http://0px.kr/332
- http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html#tx-
propagation
- http://beerloveshot.tistory.com/99

Más contenido relacionado

Destacado

Observer Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4UObserver Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4U
sys4u
 
iOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4UiOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4U
sys4u
 
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
sys4u
 
iOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4UiOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4U
sys4u
 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
sys4u
 
From Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&CFrom Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&C
sys4u
 
iOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4UiOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4U
sys4u
 
30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U
sys4u
 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4U
sys4u
 
iOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4UiOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4U
sys4u
 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
sys4u
 
Aspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&CAspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&C
sys4u
 
NAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&CNAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&C
sys4u
 
JavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4uJavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4u
sys4u
 
2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C
sys4u
 
Java reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&CJava reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&C
sys4u
 
About Color_SYS4U
About Color_SYS4UAbout Color_SYS4U
About Color_SYS4U
sys4u
 

Destacado (17)

Observer Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4UObserver Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4U
 
iOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4UiOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4U
 
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
 
iOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4UiOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4U
 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
 
From Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&CFrom Java code to Java heap_SYS4U I&C
From Java code to Java heap_SYS4U I&C
 
iOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4UiOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4U
 
30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U
 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4U
 
iOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4UiOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4U
 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
 
Aspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&CAspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&C
 
NAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&CNAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&C
 
JavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4uJavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4u
 
2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C
 
Java reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&CJava reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&C
 
About Color_SYS4U
About Color_SYS4UAbout Color_SYS4U
About Color_SYS4U
 

Más de sys4u

Html5_SYS4U
Html5_SYS4UHtml5_SYS4U
Html5_SYS4U
sys4u
 
Web Accessibility_SYS4U
Web Accessibility_SYS4UWeb Accessibility_SYS4U
Web Accessibility_SYS4U
sys4u
 
iOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4UiOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4U
sys4u
 
iOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4UiOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4U
sys4u
 
UX Layout Design_SYS4U
UX Layout Design_SYS4UUX Layout Design_SYS4U
UX Layout Design_SYS4U
sys4u
 
Advanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4UAdvanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4U
sys4u
 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4U
sys4u
 
iOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4UiOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4U
sys4u
 
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&CUIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
sys4u
 
Promotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&CPromotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&C
sys4u
 

Más de sys4u (10)

Html5_SYS4U
Html5_SYS4UHtml5_SYS4U
Html5_SYS4U
 
Web Accessibility_SYS4U
Web Accessibility_SYS4UWeb Accessibility_SYS4U
Web Accessibility_SYS4U
 
iOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4UiOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4U
 
iOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4UiOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4U
 
UX Layout Design_SYS4U
UX Layout Design_SYS4UUX Layout Design_SYS4U
UX Layout Design_SYS4U
 
Advanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4UAdvanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4U
 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4U
 
iOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4UiOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4U
 
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&CUIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
 
Promotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&CPromotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&C
 

Spring Transaction Manager_SYS4U

  • 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. 수도 있습니다. 3. 위의 샘플 XML 에서와 같이 트랜잭션 관리를 위해 <tx:advice>의 하위 태그인 <tx:method>에는 다음과 같은 상세 속성 정보를 부여할 수 있습니다. 속성 이름 설명 name 트랜잭션이 적용될 메서드 이름을 명시. “*” 사용 설정이 가능. propagation 트랜잭션의 전파 규칙을 설정 isolation 트랜잭션의 격리 레벨을 설정 read-only 읽기 전용 여부를 설정 no-rollback-for 트랜잭션을 롤백 하지 않을 예외 타입 설정 rollback-for 트랜잭션을 롤백 할 예외타입을 설정 timeout 트랜잭션의 타입 아웃 시간을 초 단위로 설정
  • 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. - 예외 타입이 한 개 이상인 경우 콤마로 구분 - 예외 클래스는 완전한 이름을 입력하거나, 패키지 이름을 제외한 클래스 이름만을 입력 6. <tx:method>태그의 isolation 속성에 설정 가능한 값은 다음과 같습니다. 속성 값 설명 DEFAULT 기본 설정을 사용 READ_UNCOMMITTED 다른 트랜잭션에서 커밋하지 않은 데이터를 읽을 수 있음 READ_COMMITTED 다른 트랜잭션에서 의해 커밋 된 데이터를 읽을 수 있음 REPEATABLE_READ 처음에 읽어 온 데이터와 두 번째 읽어 온 데이터가 동일한 값을 갖는다. SERIALIZABLE 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행 될 수 없다 @Transactional 을 이용하여 트랜잭션 사용하기 @Transactional 어노테이션을 이용하는 방식은 단순하게 트랜잭션이 필요한 클래스 또는 메소드에 직접 어노테이션을 부여하는 방식으로 설정파일을 이용한 방식보다 훨씬 편리하고, 코드를 이해하기에 좋고, 좀 더 복잡하거나 세부적인 처리를 가능하게 해줍니다. 그렇지만 트랜잭션 적용 대상을 파악하기 힘듭니다. 트랜잭션을 메소드 단위로 적용할 경우에는 유연한 속성 제어는 가능하지만, 코드가 지저분해지고 동일한 속성 정보를 가진 경우 메소드마다 중복되는 결과가 나타납니다. Spring 에서는 @Transactional 을 적용할 때 4 단계의 대체 정책을 이용하여 정책에 따라 자체적으로 확인해줍니다. 즉, 메소드의 속성을 확인할 때 구현 클래스의 메소드 → 구현클래스 → Interface 의 선언 메소드 → Interface 순으로 차례로 확인하여 Interface 에 선언되어 있을 경우 그 하위에 다른 설정이 없으면 Interface 에 선언되어 있는 설정을 모두 반영합니다. @Transactional 사용 방법은 다음과 같습니다.
  • 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 빈 의 이름 transactionManager proxy-target-class 클래스에 대해서 프록시를 생성 할 지의 여부. true일 경우 CGLIB 를 이용해서 프록시를 생성하며, false인 경우 자바 다이나믹 프록 시를 이용해서 프록시를 생성 false order advice 적용 순서 int의 최대값(가장 낮은 순위) 5. 클래스에 대한 사용은 다음과 같습니다. 6. 메소드에 대한 사용은 다음과 같습니다.