Managing transactions

Post on 05-Jan-2016

40 views 0 download

description

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

Transcript of Managing transactions

Spring In Action 2nd

Managing transactions

백기선whiteship2000@gmail.comhttp://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 트랜잭션 관리자

www.springframework.co.kr

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

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

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 이상 ..

Spring In Action 2nd

JPA 트랜잭션 관리자

www.springframework.co.kr

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

ref="entityManagerFactory" /></bean>

Spring In Action 2nd

JDO 트랜잭션 관리자

www.springframework.co.kr

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

ref="persistenceManagerFactory"/></bean>

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>

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

트랜잭션 속성

www.springframework.co.kr

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

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

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

롤백 해야 할 Catched Exception 설정 .

롤백 해야 할 Catched Exception 설정 .

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.in

terceptor.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 transaction-

manager="txManager" />

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

www.springframework.co.kr

Spring In Action 2nd

소스 코드 보기

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

• chapter6/dao/MemberServiceImplWithTransactionAnnotaion.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