[데이터베이스] 트랜잭션
트랜잭션 이란?
데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위.
단순히 작업의 단위라고 하면 이해가 확 와닿지 않을 수 가 있다.
개발자가 트랜잭션을 설계 할 수 있는데 하나의 작업처럼 동시에 수행되어야 하는 경우. 예를들어 송금시 하나의 통장에는 입금 하나의 통장에는 출금이 되는 과정은 반드시 한번에 수행되어야 하는 작업이다. 이러한 것들을 하나의 작업으로 처리하는 것과 같다.
트랜잭션의 특징
ACID
Atomicity(원자성)
- 트랜잭션의 연산은 데이터베이스에 모두 반영이 되던지 아니면 전혀 반영이 되지 않아야 한다.
- 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
Consistency(일관성)
- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환 한다.
- 여기서 일관성이 있어야 한다는 것은 트랜잭션의 작업 처리결과가 일관성이 있어야 한다는 것.
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
일관성이 이해 되지 않아서 좀 찾아 보았는데
트랜잭션이 진행되는 동안에 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음에 트래잭션을 진행 하기 위해 참조한 데이터 베이스로 진행 한다. 이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼수가 있다.
Isolation(독립성,격리성)
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
- 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
Durablility(영속성,지속성)
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
트랜잭션의 Commit, Rollback
Commit
- 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성 있는 상태에 있을때 하나의 트랜잭션이 끝났다라는 것을 알려주기 위해 사용되는 연산.
Rollback
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을때, 이 트랜잭션의 일부가 정상적으로 처리 되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다.
- Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.
Reference
- https://coding-factory.tistory.com/226
- https://mommoo.tistory.com/62
- https://goddaehee.tistory.com/167