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 |