본문 바로가기
프로그래밍/Spring

@Transactional / 트랜잭션

by choi_9182 2020. 3. 16.

트랜잭션 정의

트랜잭션(Transaction)은 데이터베이스(DB)의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위

또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

 

트랜잭션 사용 이유

DB에 insert, update 등 작업을 여러번 하게되는 로직이 있을 경우 중간에 실패하게되면 잘못된 값이나 필요없는 값이 저장될 수 있다. 이 경우 트랜잭션을 사용하여 모든 로직이 정상적으로 완료되지 않는다면 Rollback 하거나 모두 완료되야만 Commit 하여 데이터의 잘못된 저장을 막을 수 있다.

 

스프링에서 사용방법

어노테이션 @Transactional 을 이용할거면 손쉽게 설정 후 사용가능하다.

xml에 아래 내용만 추가해주면 된다.

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

 

주요 속성

isolation

-> Transaction의 isolation Level. 별도로 정의하지 않으면 DB의 Isolation Level을 따름.

ex) @Transactional(isolation=Isolation.DEFAULT)

 

propagation

-> 트랜잭션 전파규칙을 정의, Default=REQURIED

ex) @Transactional(propagation=Propagation.REQUIRED)

 

readOnly

-> 해당 Transaction을 읽기 전용 모드로 처리 (Default = false)

ex) @Transactional(readOnly=true)

 

rollbackFor

-> 정의된 Exception에 대해서는 rollback을 수행

ex) @Transactional(rollbackFor=Exception.class)

 

noRollbackFor

-> 정의된 Exception에 대해서는 rollback을 수행하지 않음

ex) @Transactional(noRollbackFor=Exception.class)

 

timeout

-> 지정된 시간 내에 해당 메소드 수행이 완료되지 않은 경우 rollback 수행. -1일 경우 no timeout (Default = -1)

ex) @transactional(timeout=10)

'프로그래밍 > Spring' 카테고리의 다른 글

Spring AOP 간단 개념정리  (0) 2021.01.26
web.xml 설정 시 ApplicationContext  (0) 2021.01.19
스프링 배치. 그리고 스케줄러, Quartz  (0) 2020.03.26
web.xml 간단 정리  (0) 2019.09.22

댓글