본문 바로가기

학습 기록 (Learning Logs)/CS Study

transaction

 

 


공통 질문

 

 


 

출처:

https://www.youtube.com/watch?v=sLJ8ypeHGlM


transaction?

- 단일한 논리적인 작업 단위(a single logical unit of work)

- 논리적인 이유로 여러 sql문을 단일 작업으로 묶어서, 나눠질 수 없도록 만듦

- transaction 내부에서 일부만 성공, 일부는 실패하는 경우는 발생하지 않는다

 

 

 j가 h에게 20만원 이체 하기

이렇게 분리하게 되면 왼쪽거가 실패하면, 또는 오른쪽만 실패하면 데이터의 정합성이 깨진다

 

따라서 두개가 성공해야 한다는 단일 작업으로 묶어준다

 


transaction 사용 패턴

 

 

1. 트랜잭션 적용: start transaction

 

 

2. 트랜잭션 중에 롤백

j는 80만원이 있었다
롤백한다
j는 80만원으로 돌아옴


Auto commit

 

 

 

auto commit 비활성화

아직 커밋 안함

 

커밋안한 상태로 롤백하면?

 

 

start transaction을 하면 auto commit은 비활성화 된다

 


java에서 transaction

1. db 연결

2. auto commit = false -> 트랜잭션 시작

3. 커밋

4. 롤백

5. auto commit = true -> 트랜잭션 종료

 

 

@Transaction을 적용하면 위 5개를 알아서 해줌

 


ACID

 

1. Atomicity

모두 성공, 모두 실패

 

2. Consistency: 일관성

규칙을 지키는가?

 

잔액은 0보다 커야하므로 -20만원은 실패 해야 한다: 일관성을 해친다

규칙을 깨면 rollback을 한다

 

3. Isolation 분리

 

isolaction을 너무 지키면, 동시성이 낮아진다

장단점이 있기 때문에, isolation level을 잘 튜닝해야한다

 

4. Durability 영존성

db에 반영한다

 

영구적이란? 전원이 나가도 다시 읽을 수 있다

'학습 기록 (Learning Logs) > CS Study' 카테고리의 다른 글

lock  (0) 2025.02.06
database  (0) 2025.02.06
isolation level  (0) 2025.02.03
SQLite  (0) 2025.02.03
Tree  (0) 2025.02.03