FULL STACK/SPRING &EGOV

스프링에서의 트랜잭션

publepuble 2018. 12. 10. 16:04

정보처리기사 공부할때 필수로 암기했던 트랜잭션을 스프링에서 직접 처리하고 나서 다시 이해했다.


트랜잭션이란 


하나의 논리적인 작업 단위를 구성하는 연산들의 집합,

데이터베이스 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻한다.

SQL로 DB는 상태가 변화한다. (INSERT, SELECT, UPDATE, DELETE)


예를들어서 어떠한 DB에  SQL문으로 INSERT를 끝낸뒤에 UPDATE를 연속적으로 해줘야 된다고 생각해보자.

그런데 이때 UPDATE를 사용했을시에 오류가 발생하면 INSERT는 실행이 되고 UPDATE는 실행이 되지않게된다.

이렇게 되면 다시 UPDATE만 따로 처리해줘야하는 일이 발생한다.

이런상황을 방지하기 위해서 트랜잭션 처리를 한다.


SPRING에서의 트랜잭션 설정은 크게 어노테이션을 이용한 설정과 XML파일을 이용한 설정 2가지가 있다.


선언적 트랜잭션 


context_transaction.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


<!-- 트랜잭션 매니저 -->

<beans:bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" />

<!-- 선언적 트랜잭션(aop) 설정 -->

<tx:advice id="transactionAdvicer" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="save*" rollback-for="Exception"/>

<tx:method name="modify*" rollback-for="Exception"/>

<tx:method name="delete*" rollback-for="Exception"/>

<tx:method name="*" propagation="NOT_SUPPORTED" read-only="true"/>

</tx:attributes>

</tx:advice>

<aop:config>

<aop:advisor advice-ref="transactionAdvicer" pointcut="execution(* org.jaseng.service..*Service.*(..))"/>

</aop:config>

</beans:beans>



service에서 시작하는거니 service에서 트랜잭션처리를 해줘야함..



어노테이션을 이용한 설정


@Transactional

위 어노테이션을 트랜잭션 쓰고싶은 메서드위에 달아주면된다.






반응형