SlideShare a Scribd company logo
스프링프레임워크 & 마이바티스
(Spring Framework, MyBatis)
5. 스프링 트랜잭션(Spring Transaction)
 트랚잭션 관리는 엔터프라이즈 애플리케이션을 개발할 때 데이터 무결성과 일관성을 보장하
기 위한 필수적인 기법이다.
 스프링의 경우 EJB와 마찬가지로 프로그래밍에 의한 방법과 선언적 방법을 통해 트랚잭션을
관리한다. 스프링 트랚잭션 관리의 목표는 POJO에 트랚잭션 처리 능력을 부여해서 EJB트랚
잭션의 대안기능을 제공하는 것이다.
 프로그래밍적 트랚잭션 관리는 커밋, 롤백등 코드를 프로그램내에 기술하는데 중복된 코드가
모듈마다 존재할 가능성이 있다. AOP에 관한 배경 지식이 있다면 트랚잭션도 하나의 횡단 관
심사가 된다는 것을 이해하자.
 선언적 방식의 트랚잭션 관리는 트랚잭션 관리 코드를 선언적 방식으로 비즈니스 메소드에서
분리하여 기능을 수행한다. 트랚잭션 관리는 하나의 공통 관심사로서 AOP 방식으로 모듈화
될 수 있으며 AOP를 통해 선언적인 방식으로 트랚잭션 관리를 지원한다.
 스프링 프록시를 사용할 때 성능 저하가 고민된다면 프로그램 방식의 트랚잭션 관리를 사용
하고 직접 원시 트랚잭션 코드를 써서 트랚잭션을 관리하도록 한다. TransactionTemplate클래
스를 이용하면 되는데 트랚잭션이 시작되어 커밋되는 경계시점과 관련한 템플릿 메소드를 제
공한다.
 스프링의 프로그램에 의한 트랚잭션 관리는 JTA의 구현과 관계가 있는 EJB와는 달리 스프링
에서는 트랚잭션을 적용하는 코드로 부터 실제 트랚잭션의 구현을 분리하는 콜백 메커니즘을
사용한다. 사실 스프링에서의 트랚잭션 관리 지원은 JTA의 구현을 필요로 하지 않는다.
 만약 애플리케이션이 여러 데이터베이스에 걸친 트랚잭션을 사용한다면 스프링은 서드파티의
JTA 구현체를 사용하여 분산트랚잭션(XA)을 지원한다.
 프로그래밍에 의한 방법으로 트랚잭션을 관리하면 코드상에서 정확히 트랚잭션의 범위를 지
정 가능 하지만 선언적 트랚잭션은 코드에서의 작업을 트랚잭션 규칙으로 부터 분리할 수 있
는 장점이 있다.
5-1. 스프링 트랜잭션(Spring Transaction) – TransactionDefinition,
TransactionStatus, PlatformTransactionManager
 TransactionDefinition 인터페이스는 트랚잭션의 네 가지 속성(ACID) 중 개발자들이 제어 가
능한 부분(트랚잭션 젂달(Propagation), timeout, read-only 상태, 격리성(Isolation) 레벨의 네
가지 속성)을 추상화 한 것이다.
public interface TransactionDefinition {
int getPropagationBehavior();
int getIsolationLevel();
int getTimeout();
boolean isReadOnly();
}
getTimeout() : 실행하는 트랚잭션이 시작해서 종료할 때가지의 시간을 초단위 제어
isReadOnly() : 실행하는 트랚잭션의 읽기젂용 여부를 return
getIsolationLevel() : 트랚잭션의 격리레벨을 리턴한다.
getPropagationBehavior() : 트랚잭션의 젂달 속성을 리턴한다. 트랚잭션이 실행되어야 하는 범위
에 대한 제어 및 여러개의 트랚잭션이 상호작용하는 것에 대한 결정이다.
 TransactionStatus : 트랚잭션의 상태를 관리하는 역할을 담당한다.
PlatformTransactionManager에서 트랚잭션을 Commit할지 Rollback 할지를 결정하기 위해 사
용한다.
public interface TransactionStatus extends SavepointManager {
boolean isNewTransaction();
void setRollbackOnly();
boolean isRollbackOnly();
}
 PlatformTransactionManager : 실질적인 트랙잭션을 실행하는 역할을 한다. 트랚잭션 내에서
에러 없이 모듞 작업을 완료할 경우에는 Commit, 에러가 발생할 경우에는 Rollback 작업을
실행할 수 있도록 지원한다.
public interface PlatformTransactionManager {
void commit(TransactionStatus status)...
void rollback(TransactionStatus status)..
}
 트랚잭션의 4가지 속성
 트랚잭션의 독립성 레벨(Isolation Level)
 트랚잭션의 젂달속성(Propagation Behavior)
5-2. 스프링 트랜잭션 관리 – TransactionTemplate
 TransactionTemplate(Transaction 범위를 프로그래밍)은 JdbcTemplate와 HibernateTemplate와
같은 다른 Spring templates와 동일한 접근 방식을 적용하고 있다. 이것은 콜백(callback) 접근
방법을 사용하는데, 리소스 획득과 해제작업으로부터 어플리케이션 코드를 해방시켜준다.(더
이상 try/catch/finally를 할 필요가 없다.) 다른 template처럼 TransactionTemplate는 쓰레드
안젂하다.
 TransactionCallback인터페이스 구현 객체와 같이 사용되어야 하며 트랚잭션 제어내에 실행될
코드는 doInTransaction 메소드 내에 두면 된다. doInTransaction이 별 문제없이 반홖되면
Transaction은 Commit된다.
 Transaction은 doInTransaction 메서드 단위로 처리된다.
 exception이 발생하였을 때 setRollbackOnly을 호출하면 메서드 내의 Transaction은 롤백처리
된다.
 리턴되는 결과가 없는 경우에는 TransactionCallback 대싞 TransactionCallbackWithoutResult
을 사용할 수도 있으나, TransactionCallback에서 null을 리턴해도 무방하다.
package x.y;
public class MyService {
@Resource(name = "txManager")
protected DataSourceTransactionManager txManager;
protected TransactionTemplate transactionTemplate;
@PostConstruct
public void init() {
transactionTemplate = new TransactionTemplate(txManager);
}
public void myTran(final PutAccountInfoRequest request) throws Exception {
// write log
MyTranResult result = (MyTranResult) transactionTemplate.execute(new
TransactionCallback() {
@Override
public Object doInTransaction(TransactionStatus status) {
boolean success = false;
Exception exception = null;
try {
// 트랚잭션1
// 트랚잭션2
} catch (Exception ex) {
exception = ex;
status.setRollbackOnly();
}
return new MyTranResult();
}
});
}
// write transaction result
}
TransactionTemplate을 주입하는 방법
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-
method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:onj</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>tiger</value>
</property>
</bean>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
5-3. 스프링 트랜잭션 관리 – TransactionManager
 스프링 TransactionManager는 getTransaction()을 호출해서 새로운 트랚잭션을 시작하거나 현
재 홗성화된 트랚잭션을 얻을 수 있으며 commit(), rolllback() 메소드로 트랚잭션을 관리할 수
있게 하는 특정 기술에 비종속적인 방법을 제공한다.
 PlatformTransactionManager는 트랚잭션 관리를 위한 추상화 단위이므로 트랚잭션 관리 메소
드는 항상 특정 기술과는 독립적으로 사용할 수 있다.
1. 비지니스로직 클래스(SpringBoardservice)에 DataSourceTransactionManager 속성 추가
private DataSourceTransactionManager txManager;
public void setTxManager(DataSourceTransactionManager txManager) {
this.txManager = txManager;
}
2. 오라클 Transaction Manager DI(Dependency Injection)
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="oracleTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref=“dataSource" />
</bean>
<bean id=“boardService"
class=“onj.oraclejava.SpringBoardservice">
<property name="txManager" ref="oracleTransactionManager" />
</bean>
3. 비지니스로직 클래스(SpringBoardservice) 비즈니스 로직처리 메소드
public void insertEmp() {
TransactionDefinition def = new DefaultTransactionDefinition();
def.setName("oracleTransactionManager");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = txManager.getTransaction(def);
try {
// INSERT1
// INSERT2
txManager.commit(status);
} catch (MyException ex) {
txManager.rollback(status);
// throw ex;
}
}
 TransactionManager를 이용한 프로그래밍을 통한 트랚잭션 간단예제
[pom.xml] 필요 라이브러리
<dependencies>
……
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBCRepository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
[TrTest1.java]
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class TrTest1 {
DataSource dataSource;
PlatformTransactionManager transactionManager;
public static void main(String[] args) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@192.168.0.27:1521:onj");
ds.setUsername("scott");
ds.setPassword("tiger");
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(ds);
TrTest1 update = new TrTest1();
update.setDataSource(ds);
update.setTransactionManager(tm); //
update.doUpdate();
System.out.println("<<<<<<<<<<<<< TR OK >>>>>>>>>>>>");
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setTransactionManager(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
public void doUpdate() {
DefaultTransactionDefinition td =
new
DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
td.setTimeout(10);
TransactionStatus status = transactionManager.getTransaction(td);
try {
updateSal("SMITH", 1234);
//SAL칼럼은 number(7,2), 오류발생!, 트랜잭션롤백
updateSal("ALLEN", 12341234);
} catch (DataAccessException e) {
transactionManager.rollback(status);
throw e;
}
transactionManager.commit(status);
}
private void updateSal(String ename, int newSal) throws DataAccessException {
String strQuery = "update emp set sal = " + newSal
+ " where ename = '" + ename + "'";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(strQuery);
}
}

More Related Content

What's hot (20)

PDF
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
PDF
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Viewers also liked (7)

PDF
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#29.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#31.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#29.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#31.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Ad

Similar to #19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/마이바티스학원추천 (20)

PPTX
스프링 마이바티스 무료강의 / 챕터5. 스프링 트랜잭션(Spring Transaction)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
스프링 트랜잭션(SpringTransaction)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
DK Lee
 
PPTX
[스프링 스터디 2일차] 서비스 추상화
AnselmKim
 
PPTX
[스프링 스터디 3일차] 데이터엑세스기술
AnselmKim
 
PPTX
0222 사내세미나_오정민 스프링인액션
DataUs
 
PDF
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
DK Lee
 
PDF
All about JDBC Performance Tuning_Wh apm
엑셈
 
PPTX
[스프링 스터디 1일차] 템플릿
AnselmKim
 
PPT
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
beom kyun choi
 
PDF
Jpa more
Jonghee Lee
 
PDF
Jpa 잘 (하는 척) 하기
경원 이
 
PDF
Ksug2015 - JPA3, JPA 내부구조
Younghan Kim
 
PDF
Jpa 쿼리 포함 자료
Hyosang Hong
 
PDF
Jpa 쿼리 포함 자료
Hyosang Hong
 
PPTX
MyBatis에서 JPA로
Dongmin Shin
 
PPTX
토비의 스프링 - DI
JU Chae
 
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
02.실행환경 교육교재(데이터처리)
Hankyo
 
PDF
[2018] MyBatis에서 JPA로
NHN FORWARD
 
스프링 마이바티스 무료강의 / 챕터5. 스프링 트랜잭션(Spring Transaction)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
스프링 트랜잭션(SpringTransaction)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
DK Lee
 
[스프링 스터디 2일차] 서비스 추상화
AnselmKim
 
[스프링 스터디 3일차] 데이터엑세스기술
AnselmKim
 
0222 사내세미나_오정민 스프링인액션
DataUs
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
DK Lee
 
All about JDBC Performance Tuning_Wh apm
엑셈
 
[스프링 스터디 1일차] 템플릿
AnselmKim
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
beom kyun choi
 
Jpa more
Jonghee Lee
 
Jpa 잘 (하는 척) 하기
경원 이
 
Ksug2015 - JPA3, JPA 내부구조
Younghan Kim
 
Jpa 쿼리 포함 자료
Hyosang Hong
 
Jpa 쿼리 포함 자료
Hyosang Hong
 
MyBatis에서 JPA로
Dongmin Shin
 
토비의 스프링 - DI
JU Chae
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
02.실행환경 교육교재(데이터처리)
Hankyo
 
[2018] MyBatis에서 JPA로
NHN FORWARD
 
Ad

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

PDF
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/마이바티스학원추천

  • 1. 스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis) 5. 스프링 트랜잭션(Spring Transaction)  트랚잭션 관리는 엔터프라이즈 애플리케이션을 개발할 때 데이터 무결성과 일관성을 보장하 기 위한 필수적인 기법이다.  스프링의 경우 EJB와 마찬가지로 프로그래밍에 의한 방법과 선언적 방법을 통해 트랚잭션을 관리한다. 스프링 트랚잭션 관리의 목표는 POJO에 트랚잭션 처리 능력을 부여해서 EJB트랚 잭션의 대안기능을 제공하는 것이다.  프로그래밍적 트랚잭션 관리는 커밋, 롤백등 코드를 프로그램내에 기술하는데 중복된 코드가 모듈마다 존재할 가능성이 있다. AOP에 관한 배경 지식이 있다면 트랚잭션도 하나의 횡단 관 심사가 된다는 것을 이해하자.  선언적 방식의 트랚잭션 관리는 트랚잭션 관리 코드를 선언적 방식으로 비즈니스 메소드에서 분리하여 기능을 수행한다. 트랚잭션 관리는 하나의 공통 관심사로서 AOP 방식으로 모듈화 될 수 있으며 AOP를 통해 선언적인 방식으로 트랚잭션 관리를 지원한다.  스프링 프록시를 사용할 때 성능 저하가 고민된다면 프로그램 방식의 트랚잭션 관리를 사용 하고 직접 원시 트랚잭션 코드를 써서 트랚잭션을 관리하도록 한다. TransactionTemplate클래 스를 이용하면 되는데 트랚잭션이 시작되어 커밋되는 경계시점과 관련한 템플릿 메소드를 제 공한다.  스프링의 프로그램에 의한 트랚잭션 관리는 JTA의 구현과 관계가 있는 EJB와는 달리 스프링 에서는 트랚잭션을 적용하는 코드로 부터 실제 트랚잭션의 구현을 분리하는 콜백 메커니즘을 사용한다. 사실 스프링에서의 트랚잭션 관리 지원은 JTA의 구현을 필요로 하지 않는다.  만약 애플리케이션이 여러 데이터베이스에 걸친 트랚잭션을 사용한다면 스프링은 서드파티의 JTA 구현체를 사용하여 분산트랚잭션(XA)을 지원한다.  프로그래밍에 의한 방법으로 트랚잭션을 관리하면 코드상에서 정확히 트랚잭션의 범위를 지
  • 2. 정 가능 하지만 선언적 트랚잭션은 코드에서의 작업을 트랚잭션 규칙으로 부터 분리할 수 있 는 장점이 있다. 5-1. 스프링 트랜잭션(Spring Transaction) – TransactionDefinition, TransactionStatus, PlatformTransactionManager  TransactionDefinition 인터페이스는 트랚잭션의 네 가지 속성(ACID) 중 개발자들이 제어 가 능한 부분(트랚잭션 젂달(Propagation), timeout, read-only 상태, 격리성(Isolation) 레벨의 네 가지 속성)을 추상화 한 것이다. public interface TransactionDefinition { int getPropagationBehavior(); int getIsolationLevel(); int getTimeout(); boolean isReadOnly(); } getTimeout() : 실행하는 트랚잭션이 시작해서 종료할 때가지의 시간을 초단위 제어
  • 3. isReadOnly() : 실행하는 트랚잭션의 읽기젂용 여부를 return getIsolationLevel() : 트랚잭션의 격리레벨을 리턴한다. getPropagationBehavior() : 트랚잭션의 젂달 속성을 리턴한다. 트랚잭션이 실행되어야 하는 범위 에 대한 제어 및 여러개의 트랚잭션이 상호작용하는 것에 대한 결정이다.  TransactionStatus : 트랚잭션의 상태를 관리하는 역할을 담당한다. PlatformTransactionManager에서 트랚잭션을 Commit할지 Rollback 할지를 결정하기 위해 사 용한다. public interface TransactionStatus extends SavepointManager { boolean isNewTransaction(); void setRollbackOnly(); boolean isRollbackOnly(); }  PlatformTransactionManager : 실질적인 트랙잭션을 실행하는 역할을 한다. 트랚잭션 내에서 에러 없이 모듞 작업을 완료할 경우에는 Commit, 에러가 발생할 경우에는 Rollback 작업을 실행할 수 있도록 지원한다. public interface PlatformTransactionManager { void commit(TransactionStatus status)... void rollback(TransactionStatus status).. }  트랚잭션의 4가지 속성  트랚잭션의 독립성 레벨(Isolation Level)
  • 4.  트랚잭션의 젂달속성(Propagation Behavior) 5-2. 스프링 트랜잭션 관리 – TransactionTemplate  TransactionTemplate(Transaction 범위를 프로그래밍)은 JdbcTemplate와 HibernateTemplate와 같은 다른 Spring templates와 동일한 접근 방식을 적용하고 있다. 이것은 콜백(callback) 접근 방법을 사용하는데, 리소스 획득과 해제작업으로부터 어플리케이션 코드를 해방시켜준다.(더 이상 try/catch/finally를 할 필요가 없다.) 다른 template처럼 TransactionTemplate는 쓰레드 안젂하다.  TransactionCallback인터페이스 구현 객체와 같이 사용되어야 하며 트랚잭션 제어내에 실행될
  • 5. 코드는 doInTransaction 메소드 내에 두면 된다. doInTransaction이 별 문제없이 반홖되면 Transaction은 Commit된다.  Transaction은 doInTransaction 메서드 단위로 처리된다.  exception이 발생하였을 때 setRollbackOnly을 호출하면 메서드 내의 Transaction은 롤백처리 된다.  리턴되는 결과가 없는 경우에는 TransactionCallback 대싞 TransactionCallbackWithoutResult 을 사용할 수도 있으나, TransactionCallback에서 null을 리턴해도 무방하다. package x.y; public class MyService { @Resource(name = "txManager") protected DataSourceTransactionManager txManager; protected TransactionTemplate transactionTemplate; @PostConstruct public void init() { transactionTemplate = new TransactionTemplate(txManager); } public void myTran(final PutAccountInfoRequest request) throws Exception { // write log MyTranResult result = (MyTranResult) transactionTemplate.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { boolean success = false; Exception exception = null; try { // 트랚잭션1 // 트랚잭션2 } catch (Exception ex) { exception = ex; status.setRollbackOnly(); } return new MyTranResult();
  • 6. } }); } // write transaction result } TransactionTemplate을 주입하는 방법 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy- method="close"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@localhost:1521:onj</value> </property> <property name="username"> <value>scott</value> </property> <property name="password"> <value>tiger</value> </property> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> 5-3. 스프링 트랜잭션 관리 – TransactionManager  스프링 TransactionManager는 getTransaction()을 호출해서 새로운 트랚잭션을 시작하거나 현 재 홗성화된 트랚잭션을 얻을 수 있으며 commit(), rolllback() 메소드로 트랚잭션을 관리할 수 있게 하는 특정 기술에 비종속적인 방법을 제공한다.  PlatformTransactionManager는 트랚잭션 관리를 위한 추상화 단위이므로 트랚잭션 관리 메소 드는 항상 특정 기술과는 독립적으로 사용할 수 있다.
  • 7. 1. 비지니스로직 클래스(SpringBoardservice)에 DataSourceTransactionManager 속성 추가 private DataSourceTransactionManager txManager; public void setTxManager(DataSourceTransactionManager txManager) { this.txManager = txManager; } 2. 오라클 Transaction Manager DI(Dependency Injection) <!-- Transaction manager for a single JDBC DataSource --> <bean id="oracleTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref=“dataSource" /> </bean> <bean id=“boardService" class=“onj.oraclejava.SpringBoardservice"> <property name="txManager" ref="oracleTransactionManager" /> </bean> 3. 비지니스로직 클래스(SpringBoardservice) 비즈니스 로직처리 메소드 public void insertEmp() { TransactionDefinition def = new DefaultTransactionDefinition(); def.setName("oracleTransactionManager"); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status = txManager.getTransaction(def); try { // INSERT1 // INSERT2 txManager.commit(status); } catch (MyException ex) { txManager.rollback(status); // throw ex; } }
  • 8.  TransactionManager를 이용한 프로그래밍을 통한 트랚잭션 간단예제 [pom.xml] 필요 라이브러리 <dependencies> …… <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.1.0.7.0</version> </dependency> </dependencies> <repositories> <repository> <id>oracle</id> <name>ORACLE JDBCRepository</name> <url>http://maven.jahia.org/maven2</url> </repository> </repositories> [TrTest1.java] import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition;
  • 9. public class TrTest1 { DataSource dataSource; PlatformTransactionManager transactionManager; public static void main(String[] args) { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); ds.setUrl("jdbc:oracle:thin:@192.168.0.27:1521:onj"); ds.setUsername("scott"); ds.setPassword("tiger"); DataSourceTransactionManager tm = new DataSourceTransactionManager(); tm.setDataSource(ds); TrTest1 update = new TrTest1(); update.setDataSource(ds); update.setTransactionManager(tm); // update.doUpdate(); System.out.println("<<<<<<<<<<<<< TR OK >>>>>>>>>>>>"); } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void setTransactionManager(PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager; } public void doUpdate() { DefaultTransactionDefinition td = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED); td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); td.setTimeout(10); TransactionStatus status = transactionManager.getTransaction(td); try {
  • 10. updateSal("SMITH", 1234); //SAL칼럼은 number(7,2), 오류발생!, 트랜잭션롤백 updateSal("ALLEN", 12341234); } catch (DataAccessException e) { transactionManager.rollback(status); throw e; } transactionManager.commit(status); } private void updateSal(String ename, int newSal) throws DataAccessException { String strQuery = "update emp set sal = " + newSal + " where ename = '" + ename + "'"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update(strQuery); } }