Spring - 15. Transaction, Commit, Rollback

병호·2023년 8월 23일
0

Spring

목록 보기
15/16
post-thumbnail

1. Transaction이란?

더이상 나눌 수 없는 작업의 단위.(ex. insert, update, select)

예를 들어, 계좌 이체의 경우, 출금(update)과 입금(update)이 하나의 Tx로 묶여야 됨.

'모'아니면'도'. 출금과 입금이 모두 성공하지 않으면 실패(둘다 성공 or 하나만 실패해도 취소)

Transaction의 속성 - ACID

원자성(Atomicity) - 나눌 수 없는 하나의 작업으로 다뤄져야 한다.

일관성(Consistency) - Tx 수행 전과 후가 일관된 상태를 유지해야 한다.

고립성(Isolation) - 각 Tx는 독립적으로 수행되어야 한다.

영속성(Durability) - 성공한 Tx의 결과는 유지되어야 한다.

다른 트랜젝션은 원래는 서로 영향을 주면 안되지만 어느 정도 영향을 주는 것을 허용할 때도 있다. 이를 Isolation Level이라고 한다. 작업에 따라 Isolation Level을 적절하게 조절하는 것이 효율적일때도 있다.

커밋(commit)과 롤백(rollback)

커밋(commit) - 작업 내용을 DB에 영구적으로 저장

롤백(rollback) - 최근 변경사항을 취소(마지막 커밋으로 복귀)

롤백을 하면 가장 마지막 커밋상태로 돌아간다.

자동 커밋과 수동 커밋

자동 커밋(Auto commit, 기본) - 명령 실행 후, 자동으로 커밋이 수행(rollback불가)

수동 커밋(SET autocommit = 0;) - 명령 실행 후, 명시적으로 commit 또는 rollback을 입력

Tx의 isolation level

각 Tx을 고립시키는 정도

READ UNCOMMITED - 커밋되지 않은 데이터도 읽기 가능
READ COMMITED - 커밋된 데이터만 읽기 가능
REPEATABLE READ - Tx이 시작된 이후 변경은 무시됨 - default
SERIALIZABLE - 한번에 하나의 Tx만 독립적으로 수행 - 고립도 최상

1. READ UNCOMMITED - 커밋되지 않은 데이터도 읽기 가능

2. READ COMMITED - 커밋된 데이터만 읽기 가능

3. REPEATABLE READ - Tx의 시작 후 다른 Tx의 변경은 무시됨

4. SERIALIZABLE - 한번에 하나의 Tx만 독립적으로 수행

profile
안녕하세요

0개의 댓글