티스토리 뷰

트랜잭션 개요

트랜잭션은 하나의 업무에 여러개의 작은 업무들이 같이 묶여 있는것을 의미한다. 이같은 작업의 특징은 모두 실행되고 완료되거나 중간에 하나라도 실행이 되지 않으면 모두 실행되지 말아야 한다는 조건을 가지고 있다. 그렇지 않을경우 트랜잭션의 기본원칙에 위배된다.
 

ACID

트랜잭션의 4원칙으로
원자성(Atomicity), 일관성(Consistency), 격리(Isolation), 영속성(Durability) 라고 한다.

 

@Transaction

트랜잭션 어노테이션에는 몇가지 속성이 있는데 경우에 따라서는 속성들을 조정해서 사용해야 한다.
 

전파(Propagation) 속성

-PROPAGATION_MANDATAORY 작업은 반드시 특정한 트랜잭션이 존재한 상태에서만 가능
-PROPAGATION_NESTED : 기존에 트랜잭션이 있는 경우, 포함되어서 실행
-PROPAGATION_NEVER : 트랜잭션 상황에 실행되면 예외 발생
-PROPAGATION_NOT_SUPPORTED : 트랜잭션이 있는 경우에는 트랜잭션이 끝날 때까지 보류된 후 실행
-PROPAGATION_REQUIRED : 트랜잭션이 있으면 그 상황에서 실행, 없으면 새로운 트랜잭션 실행(기본설정)
-PROPAGATION_REQUIRED_NEW : 대상은 자신만의 고유한 트랜잭션으로 실행
-PROPAGATION_SUPPORTS : 트랜잭션을 필요로 하지 않으나, 트랜잭션 상황에 있다면 포함되어서 실행
 

격리(ISolation) 레벨

-DEFAULT : DB 설정, 기본 격리 수준(기본설정)
-SERIALZABLE : 가장 높은 격리, 성능 저하의 우려가 있음
-READ_UNCOMMITED : 커밋되지 않은 데이터에 대한 읽기를 허용
-READ_COMMITED : 커밋된 데이터에 대해 읽기 허용
-REPEATEABLE_READ : 동일 필드에 대해 다중 접근 시 모두 동일한 결과를 보장
 

Read-only 속성

- true인 경우 insert, update, delete 실행 시 예외 발생, 기본 설정은 false
 

Rollback-for-예외

-특정 예외가 발생 시 강제로 Rollback
 

No-rollback-for-예외

-특정 예외의 발생시 Rollback 처리되지 않음
 
위의 속성들은 모두 @Transactional을 설정할 때 속성으로 지정할 수 있다.
 
 

트랜잭션 적용

스프링에서 트랜잭션을 처리하는 방식은 기본적으로 XML을 사용해서 선언하는 방식과 어노테이션을 활용하는 방식으로 나뉘어 진다. XML을 사용하는 경우는 별도의 transaction-context.xml 파일을 이용해 XML로 작성해서 처리하는 경우가 많고, 어노테이션을 활용하는 경우에는 DAO나 Mapper 등을 이용하는 xxxService클래스에 어노테이션 처리를 통해서 해결한다.
 

트랜잭션매니저

트랜잭션을 처리하기 위해서는 기본적으로 트랜잭션을 처리하는 트랜잭선 매니저를 설정해 줘야 한다.

pom.xml에서

root-context.xml 에서...

<bean id="transactionManager"
 class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="dataSource"></property>
</bean>


<tx:annotation-driven />

(namespace에서 tx도 체크해주도록 하자)

 

하나의 DataSource를 사용하는 경우에는 스프링에서 제공하는 DataSourceTransactionManager를 이용하는데 이때 필요한 DataSource를 주입받는다.
코드 마지막 tx 는 @Transactional 어노테이션을 이용한 트랜잭션의 관리가 가능해진다.

 

 

트랜잭션의 적용은 간단하다 @Transactional 어노테이션을 붙여주면 완료되며 좌측에 Around 형태로 아이콘이 나타나는 것을 확인할 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함