20231226 TIL

JaeYeong·2023년 12월 26일

Transaction 개념 이해하기

START TRANSACTION ~ COMMIT

START TRANSACTION 

INSERT INTO test.stock  VALUES (1,"참기름",7000); // 1

INSERT INTO test.stock  VALUES (2,"생수",3000); // 2

COMMIT;  

트랜젝션 모드가 켜지면 1번,2번 코드는 실행이 된다.
하지만 COMMIT으로 넘어오기 전에는 DB에 변경사항이 저장되지 않고
COMMIT을 실행하고 나서야 DB에 변경사항이 반영된다.

START TRANSACTION ~ ROLLBACK

START TRANSACTION 

INSERT INTO test.stock  VALUES (1,"참기름",7000); // 1

INSERT INTO test.stock  VALUES (2,"생수",3000); // 2

ROLLBACK;  

트랜젝션 모드가 켜지면 1번,2번 코드는 실행이 된다.
하지만 COMMIT으로 넘어오기 전에는 DB에 변경사항이 저장되지 않고
ROLLBACK을 실행하면 최종적으로 변경사항이 반영되지 않는다.

그렇다면 왜 트랜잭션을 사용하는 것일까?

서비스를 구매하는 상황을 생각해볼 수 있다. 만약 10000원짜리 물건을 내가 구매하는데, 2000원을 페이백해준다는 조건으로 내가 물건을 구매한다고 가정해보면

account -= 10000
account += 2000

결론적으로 계좌에서 8000원이 빠져나가는 것이다. 그런데 중간에 문제가 발생해서 account+=2000이 실행되지 않는다고 하면, 계좌에서 10000원이 빠져나가는 것이 되는 것이다. 이와 같은 상황을 트랜잭션을 이용하면 막을 수 있는데,

START TRANSACTION 

account -= 10000
account += 2000

만약 안의 코드에 문제가 없으면 COMMIT , 문제가 있으면 ROLLBACK 

같은 방식으로 구현하면 코드가 한줄만 잘못 작동해도 DB에 변경사항을 잘못 저장하는 일이 없어지게 된다.

0개의 댓글