카테고리 없음
[Spring] 트랜잭션(Transaction)
jnnjnn
2024. 5. 1. 21:27
Transaction
한꺼번에 수행되어야 할 일련의 연산모음을 의미합니다
A가 B에게 계좌이체를 한다면 A의 인출과 B의 입금이 모두 성공하거나, 모두 실패해야 합니다
- START TRANSACTION : 트랜잭션을 시작합니다
- COMMIT : 트랜잭션 내의 모든 작업을 반영합니다
- ROLLBACK : 트랜잭션 내의 모든 작업을 반영하지 않습니다
UPDATE bank
SET money = money - 500
WHERE name = '강인';
UPDATE bank
SET money = money + 500
WHERE name = '흥민';
# Transaction(업무) 시작
START TRANSACTION;
# 모두 성공(반영)
COMMIT;
# Transaction(업무) 시작
START TRANSACTION;
# 모두 실패(반영 x, 트랜잭션 시작 전으로 돌림)
ROLLBACK;
START TRANSACTION 실행 후 ROLLBACK을 하면 그동안의 작업 결과가 저장되지 않습니다
@Transactional
스프링에서는 @Transactional 어노테이션을 붙이면 트랜잭션 성공 여부에 따라 Commit 또는 Rollback을 해줍니다
RuntimeException만 해당되기 때문에 rollbackFor = Exception.class 설정을 해줍니다
@Transactional(rollbackFor = Exception.class)
@Transactional 어노테이션은 메소드와 클래스에 모두 적용할 수 있습니다
@Service
@RequiredArgsConstructor
// service 내 모든 메소드에 적용됨
@Transactional(rollbackFor = Exception.class)
public class Service02 {
private final Mapper06 mapper;
public void transferMoney1() {
// 강인의 돈 500원 빼기
mapper.minusMoney();
// 흥민의 돈 500원 더하기
mapper.plusMoney();
}
}