트랜젝션(Transaction)이란?
정의
데이터베이스의 상태를 변화시키기 해서 수행하는 논리적인 작업의 단위를 뜻하며, 작업의 단위은 더 이상 나눌 수 없어야 한다.
예시
[계좌이체 = 출금 + 입금]
'계좌이체'라는 작업이 성공하기 위해서는 출금과 입금이 모두 수행 & 성공해야 한다.
따라서 출금과 입금은 각각의 작업으로 처리되지 않고 하나의 작업 단위로 묶여서 처리된다. 만약 계좌이체 작업 수행 중 출금에는 성공했으나 입금에 실패했다면, 이는 곧 계좌이체 작업 전체의 실패를 의미하므로 진행 중인 작업은 출금하기 이전 상태로 Rollback돼야 한다.
Transaction의 속성
ACID
- Atomicity (원자성)
: 나눌 수 없는 하나의 작업으로 다뤄져야 한다. - Consistency (일관성)
: Transaction 수행 전과 후가 일관된 상태를 유지해야 한다. - Isolation (고립성)
: 각 Transaction은 독립적으로 수행되어야 한다. → Isolation level로 조정 가능 - Durability (영속성)
: 성공한 Transaction의 결과는 유지되어야 한다.
트랜젝션 격리 수준 (Transaction Isolation Level)이란?
정의
각 Transaction을 고립시키는 정도로, 총 네 가지의 Level이 있다.
MySQL은 REPEATABLE READ
를, Oracle은 READ COMMITTED
를 기본값으로 사용한다.
종류
- READ UNCOMMITED
커밋되지 않은 데이터도 읽기 가능. - READ COMMITED
커밋된 데이터만 읽기 가능. - REPEATABLE READ
Transaction이 시작된 이후의 변경은 무시됨. - SERIALIZABLE
한 번에 하나의 Transaction만 독립적으로 수행.
격리 수준 중 고립도가 가장 높다.
* Commit(커밋) : 작업 내용을 DB에 영구적으로 저장하는 것.
참고
- <스프링의 정석 : 남궁성과 끝까지 간다> 강의
- https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html
MySQL :: MySQL 8.0 Reference Manual :: 15.7.2.1 Transaction Isolation Levels
15.7.2.1 Transaction Isolation Levels Transaction isolation is one of the foundations of database processing. Isolation is the I in the acronym ACID; the isolation level is the setting that fine-tunes the balance between performance and reliability, consi
dev.mysql.com