-
10 Transaction, Commit, RollbackSpring/02 Spring DI와 AOP 2023. 7. 5. 23:19반응형
Transaction, Commit, Rollback
1) Transaction이란?
- 더 이상 나눌 수 없는 작업의 단위
(Tx 간단히 쓰임, insert,update,select,등 명령 하나하나가 트잰젝션)
- 계좌 이체의 경우, 출금과 입금이 하나의 Tx로 묶여야 됨 (출금+입금 = Tx)
- ‘모’ 아니면 ‘도’. 출금과 입금이 모두 성공하지 않으면 실패.
(둘다 성공, 하나만 실패해도 모두 취소)
2) Transation의 속성 - ACID
원자성(Atomicity) - 나눌 수 없는 하나의 작업으로 다뤄져야 한다. ex) 출금+입금 = Tx
일관성(Consistency) - Tx 수행 전과 후가 일관된 상태를 유지해야 한다.
ex) 전: A가 500원, B는 300원을 가지고 있고, 후: A가 300원을 B에게 이체 했을 때
A(200)와B(600)의 총금액은 800원이다 전후가 일관된 상태가 유지되어야 한다
고립성(Isolation) - 각 Tx는 독입적으로 수행되어야 한다.
ex) Tx1작업과 Tx2 작업시,
Tx2의 작업이 Tx1에 영향을 미쳐서 작업 결과가 달라지면 안된다
※isolation level : 어느 정도 개입을 허용 한다
영속성(Durability) - 성공한 Tx의 결과는 유지되어야 한다.
ex) 계좌이체가 되었으면 그 결과가 계속 유지되어야 한다
3) 커밋(commit)과 롤백(rollback)
커밋(commit) - 작업 내용을 DB에 영구적으로 저장
롤백(rollback) - 최근 변경사항을 취소(마지막 커밋으로 복귀)
4) 자동 커밋과 수동 커밋
자동 커밋 - 명령 실행 후, 자동으로 커밋이 수행(rollback불가)
수동 커밋 - 명령 실행 후, 명시적으로 commit 또는 rollback을 입력
5) Tx의 isolation level
READ UNCOMMITTED - 커밋되지 않은 데이터도 읽기 가능 (dirty read)
>> ④커밋되지 않았지만 결과값을 가져온다
READ COMMITTED - 커밋된 데이터만 읽기 가능 (phatom read)
>> ④에서는 a:2 b:200 값을 읽어오지 못한다
>> ⑥번은 커밋이되어야 읽기가 가능해진다
REPEATABLE READ - Tx이 시작된 이후 변경은 무시됨 (default)
SERIALIZABLE - 한번에 하나의 Tx만 독립적으로 수행 (고립 최고 레벨, 직렬화)
>> ②의 작업이 commit(완료)될 때까지 ④의 작업은 대기해야 한다
>> commit이 수행되면 ④의 작업이 실행된다
>> 만약에 ②번 작업이 INSERT 였다면?
③의 SELECT 작업도 ②번의 작업이 commit될 때까지 대기해야한다
6) 실습
- Read Uncommitted
인텔리제이 - MySQL 에디터(설정)
- Repeatable Read
- Serializable
6-1) 자바 실습
DBConnectionTest2Test.java(오토커밋 false 경우)
MySQL 에디터
>> 아이디의 값이 같아서 rollback( ) 되었다(트랜젝션으로 하나로 묶은 경우)
DBConnectionTest2Test.java(오토커밋 true 경우)
MySQL 에디터
>> ①의 값이 저장되고 ②번의 값은 Id의 값 입력이 Private key로 되어 있어
“asdf” 값이 중복되어 실패하였다
반응형'Spring > 02 Spring DI와 AOP' 카테고리의 다른 글
12 서비스 계층의 분리와 @Transactional(1) (0) 2023.07.08 11 AOP의 개념과 용어 (0) 2023.07.07 09 DAO의 작성과 적용(2-2) (0) 2023.07.04 09 DAO의 작성과 적용(2-1) (0) 2023.07.03 08 DAO의 작성과 적용(1) (0) 2023.07.02