javaboiii의 Spring

Spring - 트랜잭션

javaboiii 2024. 10. 17. 18:17

Spring

트랜잭션의 정의

트랜잭션은 데이터베이스에서 수행되는 작업의 단위로, 하나의 기능이나 작업을 의미함

일반적으로 하나의 트랜잭션은 여러 개의 작업으로 구성될 수 있지만

모든 작업이 성공적으로 완료되어야 트랜잭션이 성공으로 간주됨

만약 하나의 작업이라도 실패하면 전체 트랜잭션은 롤백

 

롤백

하나의 서비스가 제대로 처리되지 않았을 때
서비스의 처음 상태로   되돌아 가는 것

 

롤백은 시스템의 안정성을 보장하고 데이터 무결성을 유지하는 데 필수적임
예를 들어 위의 예시에서 쿠키 구매에 오류가 발생하면 지불된 1000원을 환불하고
쿠키 수를 원래대로 되돌리는 방식으로 롤백

 

트랜잭션 예시

 

1000원 지불: 사용자의 지불 정보 처리

쿠키 10개 구매: 사용자의 쿠키 수 증가

웹툰 1화 미리보기 설정: 사용자의 웹툰 미리보기 상태 업데이트

 

 

이 세 가지 작업은 하나의 트랜잭션으로 묶일 수 있음

만약 지불이 성공했지만 쿠키 구매에서 오류가 발생한다면
사용자는 지불한 1000원을 잃고 쿠키도 받지 못하는 상황이 발생할 수 있음

따라서, 모든 작업이 성공해야 트랜잭션 완료임

 

트랜잭션 설정

<tx:advice transaction-manager="txManager" id="txAdvice">
    <tx:attributes>
        <tx:method name="select*" read-only="true"/>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut expression="execution(* com.koreait.app.biz..*Impl.*(..))" id="txPointcut"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>

 

트랜잭션도 공통관심이기 때문에 AOP를 이용한 트랜잭션 처리가 가능함

 

<tx:advice> - 트랜잭션 advice을 정의함
이 advice는 특정 메서드에 AOP를 통해 트랜잭션을 적용



transaction-manager는 Spring에서 제공하는 클래스임



<tx:attributes> - 트랜잭션 속성을 정의함

<tx:method name="select*" read-only="true"/> - select 기능은 DB에 영향이 없기 때문에 트랜잭션 처리 X

<tx:method name="*"/> - select 기능을 제외한 기능들 전부를 트랜잭션 처리



<aop:config>

    <aop:pointcut expression="execution(* com.koreait.app.biz..*Impl.*(..))" id="txPointcut"/>

    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>

</aop:config>



<aop:config> 는 aop 를 정의하고

<aop:pointcut>에 대한 클래스 내 메서드를

<aop:advisor>로 advice와 포인트컷을 연결함

 

 

*Impl 클래스의 메서드에 대해 AOP의 advice를 이용한 트랜잭션 관리가 적용

select로 시작하는 메서드는 읽기 전용으로 처리되고

나머지 메서드는 일반 트랜잭션으로 처리됨

 

트랜잭션을 통해 데이터베이스 작업의 원자성과 무결성을 보장할 수 있음

 

데이터 원자성 - 원자성은 데이터베이스 트랜잭션이 "모두 수행되거나, 전혀 수행되지 않는다"는 속성을 의미

데이터 무결성 - 무결성은 데이터가 정확하고 일관되며 신뢰할 수 있는 상태를 유지해야 한다는 원칙

'javaboiii의 Spring' 카테고리의 다른 글

Spring - 성능 개선(MyBatis맛)  (0) 2024.11.04
Spring - 성능 개선(Model 맛)  (0) 2024.10.18
Spring - AOP 관점 지향 프로그래밍  (1) 2024.10.15
Spring - 비동기 처리  (0) 2024.10.14
Spring - 성능개선(Controller맛)  (2) 2024.10.10