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