IV. Spring Transaction 개념 2. Spring Transaction 핵심 인터페이스

Download Report

Transcript IV. Spring Transaction 개념 2. Spring Transaction 핵심 인터페이스

EBAS 솔루션본부 교육자료 – Spring 프레임워크
Spring Framework
JDBC, Transaction
2007. 5
CONTENTS
I.
교육 개요
1.
2.
II.
교육 목표 및 내용
교육 기대 수준
Spring JDBC 개념
1.
2.
Spring JDBC 란?
Spring JDBC를 이용할때 개발자가
구현해야 할 부분
III. Spring JDBC 사용방법
1.
2.
3.
4.
JdbcTemplate 기반 하에서 구현
SQLObjects를 이용하여 구현
쿼리 관리
PrimaryKey 생성 기능
IV. Spring Transaction 개념
1.
2.
Spring Transacatin ?
Spring Transaction 핵심 인터페이
스
V.
Spring Transaction 사용방법
1.
2.
프로그램적으로 트랜잭션 처리
선언적으로 트랜잭션 처리
I. 교육 개요
1. 교육목표 및 내용
구분
주요 내용
비고
Spring 프레임워크의 JDBC 및 Transaction 지원에 대한 설명 및 실습
1. 교육목표 및 내용
2. 교육 기대수준
1.
2.
3.
4.
5.
Spring JDBC 추상 레이어에 대한 필요성 제시
Spring JDBC 추상 레이어의 처리 메커니즘 설명
각 쿼리의 종류에 따른 Spring JDBC 이용 방법에 대한 설명 및 실습
J2EE 환경에서의 기본적인 Transaction 처리 메커니즘 설명
Spring 프레임워크의 Transaction 처리 방법 설명 및 실습
기본 1시간
II. Spring JDBC의 개념
Spring JDBC?
JDBC를 한 단계 더 추상화시켜 새로운 JDBC API를 제공
SQL 쿼리의 가독성
개발속도 향상
잘못구현으로 인해 발생했던 문제점을 해결
Spring AOP를 통해 Infrastructure에 해당하는 Exception, Logging과 관련한
중복 코드를 제거했지만 퍼시스턴스 계층에서도 많은 중복 코드가 발생
1. Spring JDBC란?
II. Spring JDBC의 개념
작업
2. Spring JDBC를 이용할 때 개발자가 구현해야 할 부분
Spring JDBC
(DAO 템플릿)
개발자
(DAO 콜백)
Connection 관리
O
X
SQL
X
O
Statement 관리
O
X
ResultSet 관리
O
X
Row 데이터 추출
X
O
파라미터 선언
X
O
파라미터 Setting
O
X
트랜젝션 관리
O
X
III. Spring JDBC 사용방법
JNDI로 부터 DataSource 사용
org.springframework.jndi.JndiObjectFactoryBean
DataSource 커넥션 풀 사용
org.apache.commons.dbcp.BasicDataSource
테스트시에 DataSource 사용
Org.springframework.jdbc.datasource.DriverManagerDataSource
1. DataSource 사용 방법
III. Spring JDBC 사용방법
Data 쓰기
getJdbcTemplate().update 메소드 실행
getJdbcTemplate().batchUpdate 메소드 실행
Data 읽기
getJdbcTemplate().query 메소드 실행
Stored Procedure 호출
getjdbcTemplate().execute 메소드 실행
2. JdbcTemplate 기반 하에서 구현
III. Spring JDBC 사용방법
데이터베이스 작업을 객체로 모델링하는 방법을 제공
SQLUpdate 객체 만들기
org.springframework.jdbc.object.SqlUpdate 상속 받기
MappingSqlQuery를 사용한 데이버베이스 질의
org.springframework.jdbc.object.MappingSqlQuery 상속 받기
3. SqlObjects를 이용하여 구현
III. Spring JDBC 사용방법
4. Primary Key 생성 기능
빈 설정 방법
<bean id="boardFileIncrementer"
class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer">
<property name="dataSource" ref="dataSource" />
<property name="incrementerName" value="BOARDFILESEQUENCE" />
<property name="columnName" value="VALUE" />
</bean>
<bean id="boardIncrementer"
class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer">
<property name="dataSource" ref="dataSource" />
<property name="incrementerName" value="BOARDSEQUENCE" />
</bean>
III. Spring ORM 지원 기능
1. Hibernate
빈 설정 방법
<bean id=“sessionFactory" class=“org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name=“mappingResource”>
<list>
<value>foo.hbm.xml</value>
<value>bar.hbm.xml</value>
</list>
</property>
<property name=“mappingDirectoryLocations’>
<list>
<value>classpath:/cyberdigm/custom/maps</value>
</list>
</property>
</bean>
III. Spring ORM 지원 기능
JDO
썬 마이크로시스템즈의 표준 퍼시스턴스 규약
빈 설정 방법
<bean id=“persistenceManagerFactory"
class=“org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name=“jdoProperties”>
<props>
<prop key=“javax.jdo.option.PersistenceManagerFactoryClass”>
${persistenceManagerFactoryClass}
</prop>
</props>
</property>
</bean>
2. JDO
III. Spring ORM 지원 기능
3. iBATIS
iBATIS
빈 설정 방법
<bean id=“sqlMapClient" class=“org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name=“configLocation”>
<value>sql-map-config.xml</value>
</property>
</bean>
III. Spring ORM 지원 기능
OJB
빈 설정 방법
4. OJB
IV. Spring Transaction 개념
1. Spring Transaction ?
EJB의 성장 원동력
EJB 밴더들의 신뢰할 만한 트랜잭션 지원이 엔터프라이즈 환경에서도 자바가 급성장하게된 원동력.
트랜잭션은 처리는 업무의 데이터 무결성과 직결되기 때문.
JDBC기반의 트랜잭션 처리의 문제점
트랜잭션 정책 변경 후 반영하는 데 많은 시간이 소요.
EJB 컨테이너의 트랜잭션 처리는 EJB에 국한되어 있어서 EJB를 사용하지 않을 경우에는
이 기능을 사용하기 어려움
비지니스 계층과 퍼시스턴스 계층 어느 곳에서 트랜잭션을 처리해야 할까?
트랜잭션은 업무를 처리하기 위한 단위.
하나의 유즈 케이스에 해당하는 업무를 처리하는 단위는 비즈니스 계층에서 담당하고 있기에
트랜잭션 처리를 비즈니스 계층의 메소드 단위별로 처리하는 것이 좋음.
IV. Spring Transaction 개념
1. Spring Transaction ?
비즈니스 계층에서 트랜잭션 처리의 문제
비즈니스 계층에서 트랜잭션을 처리할 경우 트랜잭션 처리를 위한 구현부분이 추가
비즈니스 계층의 복잡도를 증가시키는 결과를 초래
문제 해결
EJB - 선언적 트랜잭션 사용 (EJB 설정 파일에서 트랜잭션을 어떻게 처리해야 할지를 설정)
Spring 프레임워크 - EJB컨테이너와 같이 트랜잭션을 선언적으로 처리할 수 있도록 지원 (AOP)
Spring Framework에서 지원하고 있는 트랜잭션 처리
POJO 빈을 기반으로 하고 있기 때문에 EJB 컨테이너를 사용하지 않는 곳에서도
EJB와 같은 방법으로 트랜잭션을 처리하는 것이 가능.
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
트랜잭션의 4가지 속성(ACID)
Atomicity(원자성)
모든 작업 완료 or 모든 작업 완료되지 않음 (Commit or Rollback)
트랜잭션 내의 작업 중 오류가 발생하면 트랜잭션 내의 모든 작업 롤백
Consistency(일관성)
트랜잭션 중에 오류 없이 유효한 데이터만 데이터 베이스에 저장
Isolation(격리성)
트랜잭션 중에 변경된 내용이 트랜잭션이 완료되기 전까지 다른 트랜잭션에 영향을
미쳐서는 안됨
Durability(지속성)
트랜잭션이 완료된 경우 시스템 고장이나 네트워크 에러 등으로
데이터가 유실되지 않고 정상적으로 기록
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition (org.springframework.transaction.TransactionDefinition)
개발자가 트랜잭션 제어가능 범위
getPropagationBehavior()
트랜잭션이 실행되어야 하는 범위에 대한 제어와
여러 개의 트랜잭션이 어떻게 상호작용하는지 결정
getIsolationLevel()
실행하는 트랜잭션의 격리레벨 지정
현재 트랜잭션 내에서 변경된 데이터가 다른 트랜잭션에 반영될지에 대한 레벨을 결정
getTimeout()
실행하는 트랜잭션이 시작해서 종료할 때까지의 시간을 초 단위로 제어
isReadonly()
실행하는 트랜잭션이 read-only 상태인지 아닌지를 결정
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
전달 행위(Propagation Level)
전달 행위
상세 설명
TransactionDefinition
.PROPAGATION_REQUIRED
이미 하나의 트랜잭션이 존재하면 그 트랜잭션을 지원하고, 트
랜잭션이 없다면 새로운 트랜잭션을 시작한다.
TransactionDefinition
.PROPAGATION_SUPPORTS
이미 트랜잭션이 존재하면 그 트랜잭션을 지원하고, 트랜잭션
이 없다면 비-트랜잭션 형태로 수행한다.
TransactionDefinition
.PROPAGATION_MANDATORY
이미 트랜잭션이 존재하면 그 트랜잭션을 지원하고, 활성화된
트랜잭션이 없다면 예외를 던진다.
TransactionDefinition
.PROPAGATION_REQUIRED_NEW
언제나 새로운 트랜잭션을 시작한다. 이미 활성화된 트랜잭션
이 있다면 일시 정지한다.
TransactionDefinition
.PROPAGATION_NOT_SUPPORTED
활성화된 트랜잭션을 가진 수행을 지원하지 않는다. 언제나 비
-트랜잭션으로 수행하고 존재하는 트랜잭션일시 정지한다.
TransactionDefinition
.PROPAGATION_NEVER
활성화된 트랜잭션이 존재하더라도 비-트랜잭션으로 수행한
다. 활성화된 트랜잭션이 존재하면 예외를 던진다.
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_REQUIRED
이미 트랜젝션이 실행되고 있는 있을 경우 그 트랜젝션이 전달 되서 사용
트랜젝션 보호 아래에 수행으로 데이터를 바꾸는 작업(update, delete)중에 유용하게 사용
Transaction
REQUIRED
Service Method 1
Tx1
Tx1
DAO Method 1
Tx1
Tx1
Transaction
REQUIRED
Service Method 2
Tx1
Tx1
DAO Method 2
Tx1
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_SUPPORTS CASE 1
호출하는 클라이언트의 트랜젝션 속성을 그대로 이어 받는다.
Transaction
REQUIRED
Service Method 1
Tx1
Tx1
DAO Method 1
Tx1
Tx1
Transaction
SUPPORTS
Service Method 2
Tx1
Tx1
DAO Method 2
Tx1
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_SUPPORTS CASE 2
Service Method 1
DAO Method 1
Service Method 2
DAO Method 2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_MANDATORY CASE 1
메소드가 꼭 트랜젝션 SCOPE 내에서 실행
Transaction
REQUIRED
Service Method 1
Tx1
Tx1
DAO Method 1
Tx1
Tx1
Transaction
REQUIRED
Service Method 2
Tx1
Tx1
DAO Method 2
Tx1
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_MANDATORY CASE 2
Service Method 1
DAO Method 1
IllegalTransactionStateException
Service Method 2
DAO Method 2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_REQUIRES_NEW
메소드 실행시 언제나 새로운 트랜젝션내에서 수행
Transaction
REQUIRED
Service Method 1
Tx1
Tx1
DAO Method 1
Tx1
Tx1
Transaction
REQUIRES_NEW
Service Method 2
Tx2
Tx2
DAO Method 2
Tx2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_NOT_SUPPORTED CASE 1
메소드 실행 시 트랜젝션 반영이 되지 않음.
Transaction
REQUIRED
Service Method 1
Tx1
Tx1
DAO Method 1
Tx1
Tx1
Transaction
NOT_SUPPORTED
Service Method 2
DAO Method 2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_NOT_SUPPORTED CASE 2
Service Method 1
Transaction
DAO Method 1
NOT_SUPPORTED
Service Method 2
DAO Method 2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_NEVER CASE 1
메소드는 기존 트랜젝션 SCOPE에서 실행될 수 없다.
Transaction
REQUIRED
Service Method 1
Tx1
Tx1
DAO Method 1
Tx1
IllegalTransactionStateException
Transaction
NEVER
Service Method 2
DAO Method 2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
PROPAGATION_NEVER CASE 2
Service Method 1
Transaction
DAO Method 1
NEVER
Service Method 2
DAO Method 2
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
격리 레벨(Isolation Level)
격리 레벨
상세 설명
TransactionDefinition
.ISOLATION_DEFAULT
개별적인 PlatformTransactionManager를 위한 디폴트 격리 레
벨.
TransactionDefinition
.ISOLATION_READ_UNCOMMITED
격리 레벨 중 가장 낮은 격리 레벨.
이 격리 레벨은 다른 Commit 되지 않은 트랜잭션에 의해
변경된 데이터를 볼 수 있기 때문에
거의 트랜잭션의 기능을 수행하지 않는다.
TransactionDefinition
.ISOLATION_READ_COMMITED
대개의 데이터베이스에서의 디폴트로 지원하는 격리 레벨.
이 격리 레벨은 다른 트랜잭션에 의해 Commit 되지 않은 데
이터는 다른 트랜잭션에서 볼 수 없도록 한다.
그러나 개발자들은 다른 트랜잭션에 의해 입력되거나 수정된
데이터를 조회할 수 있다.
TransactionDefinition
.ISOLATION_REPEATABLE_READ
다른 트랜잭션이 새로운 데이터를 입력했다면 새롭게 입력된
데이터를 조회할 수 있다는 것을 의미
TransactionDefinition
.ISOLATION_SERIALIZABLE
가장 많은 비용이 들지만 신뢰할 만한 격리 레벨을 제공, 하나
의 트랜잭션이 완료된 후에 다른 트랜잭션이 실행하는 것처럼
지원
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
격리 레벨(Isolation Level) ANSI 표준 (Preventable Phenomena) 과도기 예방
Dirty Read – Tx1 에서 commit 하지 않은 상태에서 Tx2 가 변경된 값을 반영
Norepeatable Read – Tx1 에서 commit(Update, Delete) 하고 Tx2 가 변경된 값을 반영
Phantom Read – Tx1 에서 commit(Insert) 하고 Tx2 가 삽입된 값을 반영
Level
Dirty Read
Norepeatable
Read
Phantom Read
Permitted
Permitted
Permitted
READ COMMITTED
Not
Permitted
Permitted
REPEATABLE READ
Not
Not
Permitted
SERIALIZABLE
Not
Not
Not
READ UNCOMMITTED
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionDefinition
JDBC 별 사용 가능 Level
Oracle은 Read Commited, Serialized, Read-Only를 지원
MS-SQL은 ANSI 표준을 모두 지원
Level
Oracle JDBC
MS-SQL JDBC
READ UNCOMMITTED
X
O
READ COMMITTED
O
O
REPEATABLE READ
X
O
SERIALIZABLE
O
O
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
TransactionStatus (org.springframework.transaction.TransactionStatus)
트랜잭션의 상태를 관리하는 역할을 담당하는 인터페이스
PlatformTransactionManager에서 트랜잭션을 Commit할지 Rollback할지를 결정하기 위해 사용
IV. Spring Transaction 개념
2. Spring Transaction 핵심 인터페이스
PlatformTransactionManager (org.springframework.transaction.PlatformTransactionManager)
실질적인 트랜잭션을 실행하는 역할
PlatformTransactionManager 인터페이스를 구현하는 다양한 구현체
JTA : org.springframework.transaction.jta.JtaTransactionManager
JMS : org.springframework.jms.connection.JmsTransactinoManager
DataSource : org.springframework.jdbc.datasource.DataSourceTransactionManager
Hibernate : org.springframework.orm.hibernate3.HibernateTransactionManager
이외에도 다양한 ORM 프레임워크들을 지원하기 위한 TransactionManager를 지원
TransactionManager 클래스를 참고하여 자체개발하여 사용하는 것이 가능
V. Spring Transaction 사용방법
트랜잭션
실질적인 트랜잭션을 실행하는 역할
1. 프로그램적으로 트랜잭션 처리
V. Spring Transaction 사용방법
트랜잭션 Template
실질적인 트랜잭션을 실행하는 역할
1. 프로그램적으로 트랜잭션 처리
V. Spring Transaction 사용방법
선언적으로 트랜잭션 처리
실질적인 트랜잭션을 실행하는 역할
2. 선언적으로 트랜잭션 처리
Q&A