Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[Spring] 트랜잭션(Transaction) 본문

카테고리 없음

[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();
    }
}