managing transactions

46
Spring In Action 2nd Managing transactions 백백백 [email protected] http:// whiteship.tistory.com www.springframework.co.kr

Upload: ferrol

Post on 05-Jan-2016

40 views

Category:

Documents


0 download

DESCRIPTION

Managing transactions. 백기선 [email protected] http://whiteship.tistory.com. 차례. 트랜잭션이란 ? 트랜잭션 관리자 선택하기 자바 코딩을 통한 트랜잭션 처리 선언적인 트랜잭션 처리 XML 을 사용하는 방법 애노테이션을 사용하는 방법 마무리. 트랜잭션이란 ?. 트랜잭션. 잘 되면 , 반영하기. 여러 작업을 한 덩어리로. 잘 안 되면 , 돌아가기. 트랜잭션의 특징. Atomic: 원자성 Consistent: 일관성 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Managing transactions

Spring In Action 2nd

Managing transactions

백기선[email protected]://whiteship.tistory.com

www.springframework.co.kr

Page 2: Managing transactions

Spring In Action 2nd

차례

1. 트랜잭션이란 ?2. 트랜잭션 관리자 선택하기3. 자바 코딩을 통한 트랜잭션 처리4. 선언적인 트랜잭션 처리

1. XML 을 사용하는 방법2. 애노테이션을 사용하는 방법

5. 마무리

www.springframework.co.kr

Page 3: Managing transactions

Spring In Action 2nd

트랜잭션이란 ?

www.springframework.co.kr

Page 4: Managing transactions

Spring In Action 2nd

트랜잭션

www.springframework.co.kr

여러 작업을한 덩어리로 ..

여러 작업을한 덩어리로 ..

잘 되면 ,반영하기 .잘 되면 ,반영하기 .

잘 안 되면 ,돌아가기 .잘 안 되면 ,돌아가기 .

Page 5: Managing transactions

Spring In Action 2nd

트랜잭션의 특징

• Atomic: 원자성• Consistent: 일관성• Isolated: 독립성• Durable: 영속성

www.springframework.co.kr

Page 6: Managing transactions

Spring In Action 2nd

Atomic: 원자성

• 트랜잭션으로 묶여있는 모든 작업을 처리 하거나 , 모두 처리 하지 않습니다 .

www.springframework.co.kr

Page 7: Managing transactions

Spring In Action 2nd

Consistent: 일관성

• 트랜잭션이 종료되더라도 , (Commit 이든 Roll back 이든 관계 없이 ) 시스템은 정상적으로 가동되는 상태여야 합니다 .

www.springframework.co.kr

Page 8: Managing transactions

Spring In Action 2nd

Isolated: 독립성

• 여러 명의 사용자가 서로에게 피해를 주지 않고 같은 데이터에 접근할 수 있어야 합니다 .

www.springframework.co.kr

Page 9: Managing transactions

Spring In Action 2nd

Durable: 영속성

• 트랜잭션이 완료되면 , 그 결과는 시스템이 충돌하더라도 영구 보존되어야 한다 .

www.springframework.co.kr

Page 10: Managing transactions

Spring In Action 2nd

스프링의 트랜잭션 처리 지원 철학

• EJB 와 마찬가지로 코딩과 선언적인 방법 두 가지를 모두 제공합니다 .

• 하지만 , EJB 에 비해서 스프링은– 스프링은 JTA 이 외에 여러 트랜잭션

관리자를 사용할 수 있도록 허용합니다 .– 선언적인 처리에서 트랜잭션의 속성을 설정할

수 있습니다 .

www.springframework.co.kr

Page 11: Managing transactions

Spring In Action 2nd

코딩 VS 선언

• 코딩– 좀 더 세밀하게 트랜잭션 경계를 설정할 수

있습니다 .– 서비스 계층에 추가적인 코딩이 발생합니다 .

• 선언– 소스코드를 전혀 건드리지 않고 트랜잭션

처리를 할 수 있습니다 .– 메소드 단위로 트랜잭션 처리를 합니다 .

www.springframework.co.kr

Page 12: Managing transactions

Spring In Action 2nd

트랜잭션 관리자 선택하기

www.springframework.co.kr

Page 13: Managing transactions

Spring In Action 2nd

스프링에서 사용할 수 있는트랜잭션 관리자

www.springframework.co.kr

Page 14: Managing transactions

Spring In Action 2nd

주요 트랜잭션 관리자

• JDBC 트랜잭션 관리자• Hibernate 트랜잭션 관리자• JPA Java Persistent API 트랜잭션 관리자• JDO Java Data Objects 트랜잭션 관리자• JTA Java Transaction API 트랜잭션 관리자

www.springframework.co.kr

Page 15: Managing transactions

Spring In Action 2nd

주요 트랜잭션 관리자

www.springframework.co.kr

Page 16: Managing transactions

Spring In Action 2nd

JDBC 트랜잭션 관리자

www.springframework.co.kr

<bean id="transactionManager" class="org.springframework.jdbc. datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"/></bean>

Page 17: Managing transactions

Spring In Action 2nd

Hibernate 트랜잭션 관리자

www.springframework.co.kr

<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/>

</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/>

</bean>

Hibernate 버전 2 이하 ..

Hibernate 버전 2 이하 ..

Hibernate 버전 3 이상 ..

Hibernate 버전 3 이상 ..

Page 18: Managing transactions

Spring In Action 2nd

JPA 트랜잭션 관리자

www.springframework.co.kr

<bean id="transactionManager"class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory"

ref="entityManagerFactory" /></bean>

Page 19: Managing transactions

Spring In Action 2nd

JDO 트랜잭션 관리자

www.springframework.co.kr

<bean id="transactionManager"class="org.springframework.orm.jdo.JdoTransactionManager"><property name="persistenceManagerFactory"

ref="persistenceManagerFactory"/></bean>

Page 20: Managing transactions

Spring In Action 2nd

JTA 트랜잭션 관리자

www.springframework.co.kr

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">

<property name="transactionManagerName"value="java:/TransactionManager" />

</bean>

Page 21: Managing transactions

Spring In Action 2nd

자바 코딩을 통한 트랜잭션 처리

www.springframework.co.kr

Page 22: Managing transactions

Spring In Action 2nd

세상에는 두 분류의 사람들이 있습니다 .

• The Control Freaks– 모든 것을 손수 제어하기를 좋아하는 사람들 .– 거저 얻는 것을 싫어하는 사람들 .– 자신의 코드에서 무슨 일이 벌어지는지

즉석에서 확인하고 싶어하는 사람들 .

www.springframework.co.kr

Page 23: Managing transactions

Spring In Action 2nd

코드 보기

• TransactionTemplate 사용하기 .• TransactionManager 를 직접

사용하지 않는 이유 .– 특정 TransactionManager 에 종송적인 코드

생성 방지 .– 템플릿 클래스 사용을 좀 더 편하게 해줌 .

• chapter6/dao/MemberDao.Java

www.springframework.co.kr

Page 24: Managing transactions

Spring In Action 2nd

오늘도 퀴즈

1. 스프링이 트랜잭션 관리를 할 때 제공하는 장점은 ?( 두 개 )

2. 자바 코딩을 사용한 트랜잭션 관리의 장점은 ?

3. 다음에 살펴볼 것은 ?4. 잠깐 쉬고 갈까요 ?

www.springframework.co.kr

Page 25: Managing transactions

Spring In Action 2nd

선언적인 트랜잭션 처리

www.springframework.co.kr

Page 26: Managing transactions

Spring In Action 2nd

세상에는 두 분류의 사람들이 있습니다 .

• The Not Control Freaks– 모든 것을 손수 제어하기를 귀찮은 사람들 .– 거저 얻는 것을 좋아하는 사람들 .– 자신의 코드에서 무슨 일이 벌어지는지

즉석에서 확인하지 않아도 되는 사람들 .

www.springframework.co.kr

Page 27: Managing transactions

Spring In Action 2nd

선언적인 트랜잭션 관리

• 스프링이 나타나기 전까지 EJB 만이 선언적인 트랜잭션 관리를 할 수 있었습니다 .

• 그러나 .. 스프링이 나타났죠 .• 더군다나 더 멋지게 말이죠 .

– 트랜잭션의 속성을 설정할 수 있습니다 .– 스프링 AOP 를 사용합니다 .

www.springframework.co.kr

Page 28: Managing transactions

Spring In Action 2nd

트랜잭션 속성

www.springframework.co.kr

트랜잭션 경계 설정 .트랜잭션 경계 설정 .

얼마나 개인적인 트랜잭션인지 설정 .

얼마나 개인적인 트랜잭션인지 설정 .

롤백 해야 할 Catched Exception 설정 .

롤백 해야 할 Catched Exception 설정 .

Page 29: Managing transactions

Spring In Action 2nd

Propagation Behaviors

• 트랜잭션 처리를 해야 하는 메소드의 트랜잭션 경계 boundary 를 설정합니다 .

• 새로운 트랜잭션을 시작해야 하는지 , 끊어야 하는지 등을 설정합니다 .

• 총 7 가지 중 하나를 선택할 수 있습니다 .– http://whiteship.tistory.com/703– CMT 에서 지원하지 않는 Nested 트랜잭션 관련

설정을 할 수 있습니다 .

www.springframework.co.kr

Page 30: Managing transactions

Spring In Action 2nd

Isolation levels

• 공통의 데이터에 동시적인 접근이 발생할 때 해당 트랜잭션의 독립성 정도를 조정합니다 .

• Concurrency Problems– Dirty read– Nonrepeatable read– Phantom reads

• 총 5 가지 레벨을 설정할 수 있습니다 .– http://whiteship.tistory.com/704– 레벨이 높아질 수록 성능은 저하 됩니다 .

www.springframework.co.kr

Page 31: Managing transactions

Spring In Action 2nd

Transaction timeout

• 트랜잭션으로 묶여 있는 작업들이 순조롭게 진행된다면 , 그리 오래 걸리지 않을 것입니다 .

• 따라서 , 비정상적으로 길어지는 경우 문제가 발생한 것으로 생각하고 롤백 시킬 수 있습니다 .

• 새로운 트랜잭션 경계를 가지고 작업하는 메소드에 해당합니다 .– PROPAGATION_REQUIRED– PROPAGATION_REQUIRES_NEW– PROPAGATION_NESTED

www.springframework.co.kr

Page 32: Managing transactions

Spring In Action 2nd

Rollback rules

• 기본적으로 Runtime Exception 이 발생할 경우에만 롤백이 됩니다 .

• 원하는 Exception 이 발생할 때 롤백이 되도록 설정할 수 있습니다 .

www.springframework.co.kr

Page 33: Managing transactions

Spring In Action 2nd

트랜잭션을 설정하는 방법

• XML 을 사용하는 방법– ProxyFactoryBean 을 이용하는 방법– tx 네임스페이스를 사용하는 방법

• 애노테이션을 사용하는 방법

• 둘 다 결국은 내부적으로 Spring AOP를 사용합니다 .

www.springframework.co.kr

Page 34: Managing transactions

Spring In Action 2nd

스프링의 트랜잭션 처리 원리

www.springframework.co.kr

Page 35: Managing transactions

Spring In Action 2nd

XML 을 사용하는 방법ProxyFactoryBean 을 사용하는 방법• org.springframework.transaction.in

terceptor.TransactionProxyFactoryBean

• target• proxyInterfaces• transactionManager• transactionAttributes

www.springframework.co.kr

Page 36: Managing transactions

Spring In Action 2nd

소스 코드 보기

• TransactionProxyFactoryBean 을 사용한 트랜잭션 설정

• chapter6/springContext.xml

www.springframework.co.kr

Page 37: Managing transactions

Spring In Action 2nd

XML 을 사용하는 방법tx 네임스페이스를 사용하는 방법

• tx 네임스페이스 등록하기• <tx:advice>

– <tx:attributes>• <tx:method>

• <aop:config>– <aop:advisor>

www.springframework.co.kr

Page 38: Managing transactions

Spring In Action 2nd

소스 코드 보기

• tx, aop 네임스페이스를 사용한 트랜잭션 설정

• chapter6/springContext.xml

www.springframework.co.kr

Page 39: Managing transactions

Spring In Action 2nd

XML 을 사용한 설정을 마치며…

• 저걸 어떻게 다 외우나…

• Eclipse 가 있자나요 .

www.springframework.co.kr

Page 40: Managing transactions

Spring In Action 2nd

번외Eclipse 의 소중함

• 코드 템플릿 등록하기 .

www.springframework.co.kr

Page 41: Managing transactions

Spring In Action 2nd

애노테이션으로 트랜잭션 설정하기

• 딱 한 줄만 XML 에 추가해 주시면 됩니다 .– <tx:annotation-driven />– 또는– <tx:annotation-driven transaction-

manager="txManager" />

• @Transactional 하나만 외우시면 됩니다 .

www.springframework.co.kr

Page 42: Managing transactions

Spring In Action 2nd

소스 코드 보기

• @Transactional 애노테이션을 사용하여 트랜잭션 설정하기 .

• chapter6/dao/MemberServiceImplWithTransactionAnnotaion.java

www.springframework.co.kr

Page 43: Managing transactions

Spring In Action 2nd

마무리

www.springframework.co.kr

Page 44: Managing transactions

Spring In Action 2nd

궁금한 것 ~저는 질문을 좋아합니다 .

www.springframework.co.kr

Page 45: Managing transactions

Spring In Action 2nd

발표 후 소감 & 시청 후 소감이젠 저도 이야기 하겠습니다 .

www.springframework.co.kr

Page 46: Managing transactions

Spring In Action 2nd

감사합니다 .

이제 6 번 남았습니다 .

다음 발표는 이대엽님의 Spring Security 입니다 .

www.springframework.co.kr