트랜잭션과 관련된 용어
트랜잭션
- 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
커밋
- 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어.
- 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장됨.
롤백
- 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일 (Ctrl Z)
트랜잭션 전파
- 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 하는데 이를 넘겨서 수행하지 않고 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭셩에 묶이도록 하는 것.
트랜잭션의 특성
ACID
- Atomicity
- 원자성: 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
- Consistency
- 일관성: 허용된 방식으로만 데이터를 변경해야 하는 것을 의미
- Isolation
- 격리성: 트랜잭션 수행 시 서로 끼어들지 못하도록 하는 것을 의미
- Durability
- 지속성: 성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다는 의미.
격리성
DB를 다루다 보면 격리성에 대한 이야기를 하게 되고 질문도 많이 나온다.
격리성에는 정도가 있다. 격리성이 높을수록 동시성이 낮아지고 성능도 낮아진다.
격리수준
- SERIALIZABLE
- 커밋 완료된 데이터에 대해서만 조회할 수 있다.
- 트랜잭션을 순차적으로 진행시킨다.
- 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다.
- REPEATABLE_READ
- 커밋 완료된 데이터에 대해서만 조회할 수 있다.
- 반복해서 행을 조회하더라도 똑같은 결과를 보장한다.
- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주미나 새로운 행을 추가하는 것은 막지 않는다.
- 따라서 팬텀 리드는 일어날 수 있는 격리수준이다.
- MySql 8.0의 기본값이다.
- READ_COMMITED
- 커밋 완료된 데이터에 대해서만 조회할 수 있다.
- 커밋이 되지 않은 정보는 읽지 못한다.
- 가장 많이 사용되는 수준으로 PostgreSQL, SQL Server, 오라클의 기본값이다.
- READ_UNCOMMITED
- 가장 낮은 격리 수준이기 떄문에 가장 빠르다.
- 다른 트랜잭션이 커밋하지 않은 정보를 읽을 수 있다.
- 팬텀리드, 논리피터블 리드, 더티 리드가 모두 발생할 수 있다.
격리수준에 따른 현상
팬텀리드 (Phantom Reads)
- 한 트랜잭션 내에서 동일한 쿼리를 2번 이상 날렸을 때 조회 결과가 다른 현상.
반복 가능하지 않은 조회 (Nonrepeatable Reads)
- 한 트랜잭션 내의 같은 행에 두 번 이상 조회를 했을 때, 그 두 조회의 값이 다른 현상.
더티 리드 (Dirty Reads)
- 하나의 트랜잭션이 다른 트랜잭션의 아직 커밋되지 않은 데이터를 읽는 현상.
출처
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 - 큰돌