반응형
1. Transaction 이란?
- 더이상 나눌 수 없는 작업의 단위
- 계좌이체의 경우, 출금과 입금이 하나의 Tx로 묶여야함
'모'아니면 '도'. 출금과 입금이 모두 성공하지 않으면 실패
2. Transaction의속성 ‒ ACID
- 원자성(Atomicity) – 나눌 수 없는 하나의 작업으로 다뤄져야 한다.
- 일관성(Consistency) – Tx 수행 전과 후가 일관된 상태를 유지해야 한다.
- 고립성(Isolation) – 각 Tx는 독립적으로 수행되어야 한다.
- 영속성(Durability) – 성공한 Tx의 결과는 유지되어야 한다.
3. 커밋(commit)과롤백(rollback)
- 커밋(commit) – 작업 내용을 DB에 영구적으로 저장
- 롤백(rollback) – 최근 변경사항을 취소(마지막 커밋으로 복귀)
4. 자동커밋과 수동커밋
- 자동 커밋 – 명령 실행 후, 자동으로 커밋이 수행(rollback불가)
- 수동 커밋 – 명령 실행 후, 명시적으로 commit 또는 rollback을 입력
5. Tx의 isolation level
- READ UNCOMMITED – 커밋되지 않은 데이터도 읽기 가능
- READ COMMITED – 커밋된 데이터만 읽기 가능
- REPEATABLE READ – Tx이 시작된 이후 변경은 무시됨
- SERIALIZABLE – 한번에 하나의 Tx만 독립적으로 수행
Java 코드로 Transaction Test 실습
코드를 실행하면 deleteAll() 로 db데이터를 모두 지운후에 setAutoCommit(false)가 자동으로 db에 커밋되는것 을 막아준다
그 후 id = asdf 로 insert > update 실행
다시 id = asdf2로 insert > update 실행 후 커밋
id값이 겹치지 않으므로 코드는 정상적으로 작동한다 그 후 catch문을 빠져나가게 되고 테스트는 통과됨
id (key) 값이 겹치지 않아 테스트 통과
두번 째 insert에 id값을 동일하게 맞춘 후 테스트 실행을 하게되면
테스트는 통과 했으나 값이 들어오지 않았다.
당연하다 오토커밋이 false 이므로 첫번째 insert도 반영되지 않고 두번째 insert에서 커밋되지 않고 패스시킨것
이번엔 오토커밋을 true로 주고 같은 코드로 테스트를 실행
첫번째 insert는 오토커밋으로 db에 반영이 되고 두번 째 insert는 id값이 같아 커밋되지 않고 테스트에 실패함
반응형
'Spring' 카테고리의 다른 글
[스프링의 정석] Transactional (0) | 2023.04.24 |
---|---|
[스프링의 정석] AOP의 개념과 용어 (0) | 2023.04.21 |
[스프링의 정석] Spring DI 활용하기 / @annotation (0) | 2023.04.19 |
[스프링의 정석] Spring DI 흉내내기 (0) | 2023.04.18 |
[스프링의 정석] 예외 (0) | 2023.04.17 |