[Spring] 트랜잭션

jsieon97·2023년 3월 2일

[Spring] BackEnd

목록 보기
9/11

트랜잭션이란?

  • 쪼갤수 없는 업무의 최소 단위
// 결제 시스템
public class OrderService {

    public void complatePayment() {
        orderRepository.save(new Order(...)); // 주문정보
        pointRepository.save(new Point(...)); // 포인트정보
        billingHistory.save(new BillingHistory(...)); // 주문기록정보
    }
    
}

위 코드에서 코드 실행중 포인트정보까지 실행되고 오류가 발생한다면?
주문정보와 포인트정보는 기록되었으나 주문기록에는 뜨지않는 현상이 발생한다.

어떻게 해결할 수 있을까?

모든 SQL을 성공하면 성공시키고, 하나라도 실패하면 모두 실패

트랜잭션 시작하기

// SQL문
start transaction; // 트랜잭션 시작
commit; // 정상종료(SQL반영)
rollback; // 실패처리(SQL미반영)
start transaction;
INSERT INTO user (name, age) VALUES ('A', 10);
SELECT * FROM user;

위 코드를 순서대로 실행하면 데이터가 INSERT되었는데도 불구하고 SELECT문에 아무것도 출력되지 않는다. 이는 commit 처리를 하지않았기 때문

commit;

위 명령어를 실행한다면 INSERT가 제대로 실행되고 트랜잭션이 종료되고

rollback;

위 명령어를 실행한다면 INSERT가 실패처리되고 트랜잭션이 종료된다

트랜잭션 처리를 통하여 여러 테이블에 저장할 때 묶어서 저장시킬 수 있다.

profile
개발자로써 성장하는 방법

0개의 댓글