728x90
🏓 트랜잭션
- 트랜잭션 : 쪼갤 수 없는 업무의 다위
예를 들어, 쇼핑 사이트에서 User가 물건 주문 시 처리하는 일이 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
'Web(웹)_관련 공부 모음' 카테고리의 다른 글
[해결] java.lang.IllegalArgumentException: null (0) | 2023.07.25 |
---|---|
개념 | 트랜잭션 적용과 영속성 컨텍스트 (0) | 2023.07.24 |
개념 | SQL 직접 사용하는 것의 문제, 그 해결책인 JPA (0) | 2023.07.21 |
개념 | 스프링 컨테이너와 스프링 빈 (0) | 2023.07.18 |
개념 | Controller, Service, Repository 구조 분리하기 (0) | 2023.07.18 |