Spring In Action 2nd

Download Report

Transcript Spring In Action 2nd

Spring In Action 2nd
Managing transactions
백기선
[email protected]
http://whiteship.tistory.com
www.springframework.co.kr
Spring In Action 2nd
차례
1.
2.
3.
4.
트랜잭션이란?
트랜잭션 관리자 선택하기
자바 코딩을 통한 트랜잭션 처리
선언적인 트랜잭션 처리
1. XML을 사용하는 방법
2. 애노테이션을 사용하는 방법
5. 마무리
www.springframework.co.kr
Spring In Action 2nd
트랜잭션이란?
www.springframework.co.kr
Spring In Action 2nd
트랜잭션
잘 되면,
반영하기.
여러 작업을
한 덩어리로..
잘 안 되면,
돌아가기.
www.springframework.co.kr
Spring In Action 2nd
트랜잭션의 특징
•
•
•
•
Atomic: 원자성
Consistent: 일관성
Isolated: 독립성
Durable: 영속성
www.springframework.co.kr
Spring In Action 2nd
Atomic: 원자성
• 트랜잭션으로 묶여있는 모든 작업을
처리 하거나, 모두 처리 하지 않습니다.
www.springframework.co.kr
Spring In Action 2nd
Consistent: 일관성
• 트랜잭션이 종료되더라도, (Commit
이든 Roll back 이든 관계 없이)
시스템은 정상적으로 가동되는
상태여야 합니다.
www.springframework.co.kr
Spring In Action 2nd
Isolated: 독립성
• 여러 명의 사용자가 서로에게 피해를
주지 않고 같은 데이터에 접근할 수
있어야 합니다.
www.springframework.co.kr
Spring In Action 2nd
Durable: 영속성
• 트랜잭션이 완료되면, 그 결과는
시스템이 충돌하더라도 영구
보존되어야 한다.
www.springframework.co.kr
Spring In Action 2nd
스프링의 트랜잭션 처리 지원 철학
• EJB와 마찬가지로 코딩과 선언적인
방법 두 가지를 모두 제공합니다.
• 하지만, EJB에 비해서 스프링은
– 스프링은 JTA 이 외에 여러 트랜잭션 관리자를
사용할 수 있도록 허용합니다.
– 선언적인 처리에서 트랜잭션의 속성을 설정할
수 있습니다.
www.springframework.co.kr
Spring In Action 2nd
코딩 VS 선언
• 코딩
– 좀 더 세밀하게 트랜잭션 경계를 설정할 수
있습니다.
– 서비스 계층에 추가적인 코딩이 발생합니다.
• 선언
– 소스코드를 전혀 건드리지 않고 트랜잭션
처리를 할 수 있습니다.
– 메소드 단위로 트랜잭션 처리를 합니다.
www.springframework.co.kr
Spring In Action 2nd
트랜잭션 관리자 선택하기
www.springframework.co.kr
Spring In Action 2nd
스프링에서 사용할 수 있는
트랜잭션 관리자
www.springframework.co.kr
Spring In Action 2nd
주요 트랜잭션 관리자
•
•
•
•
•
JDBC 트랜잭션 관리자
Hibernate 트랜잭션 관리자
JPA Java Persistent API 트랜잭션 관리자
JDO Java Data Objects 트랜잭션 관리자
JTA Java Transaction API 트랜잭션 관리자
www.springframework.co.kr
Spring In Action 2nd
주요 트랜잭션 관리자
www.springframework.co.kr
Spring In Action 2nd
JDBC 트랜잭션 관리자
<bean id="transactionManager" class="org.springframework.jdbc.
datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
www.springframework.co.kr
Spring In Action 2nd
Hibernate 트랜잭션 관리자
Hibernate
<bean id="transactionManager" class="org.springframework. 버전 2 이하..
orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionManager" class="org.springframework. Hibernate
버전 3 이상..
orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
www.springframework.co.kr
Spring In Action 2nd
JPA 트랜잭션 관리자
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
www.springframework.co.kr
Spring In Action 2nd
JDO 트랜잭션 관리자
<bean id="transactionManager"
class="org.springframework.orm.jdo.JdoTransactionManager">
<property name="persistenceManagerFactory"
ref="persistenceManagerFactory"/>
</bean>
www.springframework.co.kr
Spring In Action 2nd
JTA 트랜잭션 관리자
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName"
value="java:/TransactionManager" />
</bean>
www.springframework.co.kr
Spring In Action 2nd
자바 코딩을 통한 트랜잭션 처리
www.springframework.co.kr
Spring In Action 2nd
세상에는
두 분류의 사람들이 있습니다.
• The Control Freaks
– 모든 것을 손수 제어하기를 좋아하는 사람들.
– 거저 얻는 것을 싫어하는 사람들.
– 자신의 코드에서 무슨 일이 벌어지는지
즉석에서 확인하고 싶어하는 사람들.
www.springframework.co.kr
Spring In Action 2nd
코드 보기
• TransactionTemplate 사용하기.
• TransactionManager를 직접 사용하지
않는 이유.
– 특정 TransactionManager에 종송적인 코드
생성 방지.
– 템플릿 클래스 사용을 좀 더 편하게 해줌.
• chapter6/dao/MemberDao.Java
www.springframework.co.kr
Spring In Action 2nd
오늘도 퀴즈
1. 스프링이 트랜잭션 관리를 할 때
제공하는 장점은?(두 개)
2. 자바 코딩을 사용한 트랜잭션 관리의
장점은?
3. 다음에 살펴볼 것은?
4. 잠깐 쉬고 갈까요?
www.springframework.co.kr
Spring In Action 2nd
선언적인 트랜잭션 처리
www.springframework.co.kr
Spring In Action 2nd
세상에는
두 분류의 사람들이 있습니다.
• The Not Control Freaks
– 모든 것을 손수 제어하기를 귀찮은 사람들.
– 거저 얻는 것을 좋아하는 사람들.
– 자신의 코드에서 무슨 일이 벌어지는지
즉석에서 확인하지 않아도 되는 사람들.
www.springframework.co.kr
Spring In Action 2nd
선언적인 트랜잭션 관리
• 스프링이 나타나기 전까지 EJB만이
선언적인 트랜잭션 관리를 할 수
있었습니다.
• 그러나.. 스프링이 나타났죠.
• 더군다나 더 멋지게 말이죠.
– 트랜잭션의 속성을 설정할 수 있습니다.
– 스프링 AOP를 사용합니다.
www.springframework.co.kr
Spring In Action 2nd
트랜잭션 속성
트랜잭션
경계 설정.
얼마나 개인적인
트랜잭션인지 설정.
롤백 해야 할
Catched Exception
설정.
www.springframework.co.kr
Spring In Action 2nd
Propagation Behaviors
• 트랜잭션 처리를 해야 하는 메소드의
트랜잭션 경계boundary를 설정합니다.
• 새로운 트랜잭션을 시작해야 하는지,
끊어야 하는지 등을 설정합니다.
• 총 7가지 중 하나를 선택할 수 있습니다.
– http://whiteship.tistory.com/703
– CMT에서 지원하지 않는 Nested 트랜잭션 관련
설정을 할 수 있습니다.
www.springframework.co.kr
Spring In Action 2nd
Isolation levels
• 공통의 데이터에 동시적인 접근이 발생할
때 해당 트랜잭션의 독립성 정도를
조정합니다.
• Concurrency Problems
– Dirty read
– Nonrepeatable read
– Phantom reads
• 총 5가지 레벨을 설정할 수 있습니다.
– http://whiteship.tistory.com/704
– 레벨이 높아질 수록 성능은 저하 됩니다.
www.springframework.co.kr
Spring In Action 2nd
Transaction timeout
• 트랜잭션으로 묶여 있는 작업들이 순조롭게
진행된다면, 그리 오래 걸리지 않을 것입니다.
• 따라서, 비정상적으로 길어지는 경우 문제가
발생한 것으로 생각하고 롤백 시킬 수
있습니다.
• 새로운 트랜잭션 경계를 가지고 작업하는
메소드에 해당합니다.
– PROPAGATION_REQUIRED
– PROPAGATION_REQUIRES_NEW
– PROPAGATION_NESTED
www.springframework.co.kr
Spring In Action 2nd
Rollback rules
• 기본적으로 Runtime Exception이
발생할 경우에만 롤백이 됩니다.
• 원하는 Exception이 발생할 때 롤백이
되도록 설정할 수 있습니다.
www.springframework.co.kr
Spring In Action 2nd
트랜잭션을 설정하는 방법
• XML을 사용하는 방법
– ProxyFactoryBean을 이용하는 방법
– tx 네임스페이스를 사용하는 방법
• 애노테이션을 사용하는 방법
• 둘 다 결국은 내부적으로 Spring AOP를
사용합니다.
www.springframework.co.kr
Spring In Action 2nd
스프링의 트랜잭션 처리 원리
www.springframework.co.kr
Spring In Action 2nd
XML을 사용하는 방법
ProxyFactoryBean을 사용하는 방법
• org.springframework.transaction.interc
eptor.TransactionProxyFactoryBean
• target
• proxyInterfaces
• transactionManager
• transactionAttributes
www.springframework.co.kr
Spring In Action 2nd
소스 코드 보기
• TransactionProxyFactoryBean을 사용한
트랜잭션 설정
• chapter6/springContext.xml
www.springframework.co.kr
Spring In Action 2nd
XML을 사용하는 방법
tx 네임스페이스를 사용하는 방법
• tx 네임스페이스 등록하기
• <tx:advice>
– <tx:attributes>
• <tx:method>
• <aop:config>
– <aop:advisor>
www.springframework.co.kr
Spring In Action 2nd
소스 코드 보기
• tx, aop 네임스페이스를 사용한
트랜잭션 설정
• chapter6/springContext.xml
www.springframework.co.kr
Spring In Action 2nd
XML을 사용한 설정을 마치며…
• 저걸 어떻게 다 외우나…
• Eclipse가 있자나요.
www.springframework.co.kr
Spring In Action 2nd
번외
Eclipse의 소중함
• 코드 템플릿 등록하기.
www.springframework.co.kr
Spring In Action 2nd
애노테이션으로 트랜잭션 설정하기
• 딱 한 줄만 XML에 추가해 주시면
됩니다.
– <tx:annotation-driven />
– 또는
– <tx:annotation-driven transactionmanager="txManager" />
• @Transactional 하나만 외우시면
됩니다.
www.springframework.co.kr
Spring In Action 2nd
소스 코드 보기
• @Transactional 애노테이션을 사용하여
트랜잭션 설정하기.
• chapter6/dao/MemberServiceImplWith
TransactionAnnotaion.java
www.springframework.co.kr
Spring In Action 2nd
마무리
www.springframework.co.kr
Spring In Action 2nd
궁금한 것~
저는 질문을 좋아합니다.
www.springframework.co.kr
Spring In Action 2nd
발표 후 소감 & 시청 후 소감
이젠 저도 이야기 하겠습니다.
www.springframework.co.kr
Spring In Action 2nd
감사합니다.
이제 6번 남았습니다.
다음 발표는 이대엽님의
Spring Security 입니다.
www.springframework.co.kr