본문 바로가기
개발/Spring

[Spring] 스프링 트랜잭션 ( Transaction ) - 1

by KIMECK 2020. 7. 3.
반응형

| 트랜잭션 ( 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 [개발자로 홀로 서기]

 

 

반응형

댓글