| 트랜잭션 ( Transaction ) 이란
데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 말한다.
즉 , 하나의 업무로 함께 진행되어야 하는 일 > " 하나의 업무처리의 단위 "
| 트랜잭션의 특징
ACID(Atomicity, Consistency, Isolation, Durability)
데이터베이스 트랜젝션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어
- 원자성(Atomicity)
: 트랜잭션에 속한 작업들이 모두 수행되었는지 아니면 모두 실행이 안되었는지를 보장하는 능력이다.
즉, 중간 단계까지 실행되고 실패하는 일은 없도록 하는 것이다.
- 일관성(Consistency)
: 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다.
- 고립성(Isolation)
: 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다.
- 지속성(Durability)
: 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.
| Spring 트랜잭션 사용
Spring 에서의 트랜잭션 사용으로는 크게 두가지가 있다. 선언적 방법과 어노테이션을 이용한 방법이다.
1. 선언적 방법
-- applicationContext.xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx" expression="execution(* *..service.*Impl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx"/>
</aop:config>
method name 에는 method의 이름이 들어가며 * 표시는 모든 method를 transaction 처리
여러개의 method 를 설정할 수 있다. rollback-for 는 value 값에(Exception 일 경우) 있는 것만 transaction 처리
* rollback-for : 특정 예외가 발생 시 강제로 Rollback 처리
aop 설정을 하여 *.service 라는 패키지내에 파일명이 Impl 로 끝나는 파일에 aop 시점을 두어 transaction 처리
위 세가지만 설정하면 선언적 트랙젝션이 완성된다.
2. 어노테이션 처리 ( @Transactional )
@Transactional
public boolean insertUser(User user){
...
}
출처:
https://blog.outsider.ne.kr/869
https://sarangyik.tistory.com/entry/Spring-30-Transaction-설정-방법 [이갱 개인 공부자료]
https://goddaehee.tistory.com/167
https://sjh836.tistory.com/11 [빨간색코딩]
https://mommoo.tistory.com/62 [개발자로 홀로 서기]
'개발 > Spring' 카테고리의 다른 글
[Spring] 컴포넌트 ( Component ) 란 ? (0) | 2020.07.06 |
---|---|
[Spring] Quartz 란 ( Quartz Scheduler ) (0) | 2020.07.06 |
[Spring] 스프링 트랜잭션 ( Transaction ) - 2 (0) | 2020.07.03 |
[Spring] 전자정부 프레임워크 Exception , LeaveaTrace, AOP (0) | 2020.07.03 |
[Spring] AOP, Interceptor, Filter (0) | 2020.07.03 |
댓글