개념 | 트랜잭션 (Transaction)의 개념, commit과 rollback

728x90

🏓 트랜잭션

  • 트랜잭션 : 쪼갤 수 없는 업무의 다위

예를 들어, 쇼핑 사이트에서 User가 물건 주문 시 처리하는 일이 3가지라고 하자.

  1. 새 주문 정보 저장
  2. 포인트 저장
  3. 구매 기록 저장

그런데, 이 세 가지 작업들 중 하나의 처리라도 누락된다면 문제가 생길 것이다.

  • ex. 주문 기록은 존재하는데 포인트가 안쌓이는 등.

이처럼 여러 SQL을 사용하여 처리를 할 때, 모두 다 성공하면 → 한 번에 성공시키고,

하나라도 누락되면 → 모두 실패시키는 것을 ‘트랜잭션’ 이라고 한다.

트랜잭션으로 묶어서, 모든 SQL을 성공시키거나, 하나라도 실패하면 모두 반영시키지 말자.


🟦 트랜잭션 사용 명령어

  • 1) 트랜잭션 시작하기
start transaction;
  • 2) 2명의 User를 연속해서 저장해보자.

이때, 아직까지 DB에는 반영이 안된다.

insert into user (name, age) values ('A', 10);
insert into user (name, age) values ('B', 20);
  • 3) 위의 sql 문들을 트랜잭션으로 묶어서 반영시킨다.
commit; //묶어서 날린다.
  • 4) 이후 또 insert 시켜보자.
insert into user(name, age) values('C', 40);
insert into user(name, age) values('D', 50);
  • 5) 이번엔 롤백시킨다.
rollback;// 직전까지 insert한 애들이 조회가 안된다.

이처럼, commit 하거나 rollback 하기 전까지의 데이터들을 트랜잭션으로 묶어서, 모두 다 성공시키거나, 모두 다 실패시킨다.

  • completePayment 전체를 트랜잭션으로 감싼 뒤, 3가지 save가 정상 처리될 경우 해당 sql문 조합을 commit
  • 하나라도 실패하면 모조리 rollback 시킨다.
  • 그렇게 되면, 3가지 모두 존재하거나 존재하지 않는 경우만 있을 것이다.
728x90