트랜잭션
트랜잭션
트랜잭션은 하나의 작업을 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것으로, 데이터베이스에서 논리적인 작업의 단위가 된다. 트랜잭션은 데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다. 일반적으로 데이터베이스를 변경하는 INSERT, DELETE, UPDATE 문의 실행을 트랜잭션으로 관리한다.
- 계좌이체 트랜잭션은 2개의 UPDATE 문으로 구성된다.
- 성호의 계좌에서 5,000원을 감소시키는 UPDATE 문
- 은경의 계좌에서 5,000원을 증가시키는 UPDATE 문
- 순서는 중요하지 않으나 둘 다 정상적으로 실행되어야 한다.
- 만약, 첫 번째 UPDATE 문이 실행 된 후 시스템에 장애가 발생하여 두 번째 UPDATE 문이 실행되지 않으면, 이체는 했으나 받지 못하는 상황이 발생한다. 이런 상황이 발생하지 않도록 하려면 다음과 같이 해야 한다.
- 시스템이 정상적으로 작동하게 되었을 때, 두 번째 UPDATE 문을 실행하게 한다.
- 또는, 첫 번째 UPDATE 문의 실행을 취소하여 데이터베이스를 트랙잭션 작업 전 상태로 되돌린다.
트랜잭션의 특성
트랜잭션이 성공적으로 처리되어 데이터베이스의 무결성과 일관성이 보장되려면 다음 4가지 특성을 만족해야 하며, 이들을 ACID 특성이라고 한다.
- 원자성 (Atomicity)
- 원자성은 트랙잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 함을 의미한다.
- 만약, 트랜잭션을 수행하는 도중 장애가 발생하여 작업을 완료하지 못한다면, 지금까지 처리한 연산을 모두 취소하고 이전 상태로 되돌려 원자성을 보장해야 한다.
- 일관성 (Consistency)
- 일관성은 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관된 상태를 유지해야 함을 의미한다.
- 트랜잭션이 수행되는 과정에서는 데이터베이스가 일시적으로 일관된 상태가 아닐 수 있지만, 트랜잭션의 수행이 성공적으로 수행된 이후에는 데이터베이스가 일관된 상태를 유지해야 한다.
- 격리성 (Isolation)
- 격리성은 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 의미한다.
- 일반적으로 DBMS에서는 여러 트랜잭션이 동시에 수행되지만 각 트랜잭션이 독립적으로 수행될 수 있도록 다른 트랜잭션의 중간 연산 결과에 서로 접근하지 못하게 한다.
- 지속성 (Durability)
- 지속성은 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미한다.
- 즉, 시스템에 장애가 발생하더라도 트랜잭션 작업 결과는 없어지지 않고 데이터베이스에 그대로 남아 있어야 한다는 의미다.
- 지속성을 보장하려면 시스템에 장애가 발생했을 때 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요하다.
트랜잭션의 연산
트랜잭션의 수행과 관련하여 주로 사용되는 연산에는 작업 완료를 의미하는 commit 연산
과 작업 취소를 의미하는 rollback 연산
이 있다.
- commit : 트랜잭션이 성공적으로 수행되었음을 선언 (작업 완료)
- commit 연산이 실행된 후에야 트랜잭션의 수행 결과가 데이터베이스에 반영되어 데이터베이스가 일관된 상태를 지속적으로 유지하게 된다.
- rollback: 트랜잭션을 수행하는 데 실패했음을 선언 (작업 취소)
- rollback 연산이 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 트랜잭션이 수행되기 전의 상태로 돌아간다.
트랜잭션의 상태
트랜잭션은 다음 다섯 가지 상태 중 하나에 속하게 된다.
- 활동
- 트랜잭션이 수행 중인 상태를 활동 상태라고 한다.
- 부분 완료
- 마지막 연산이 실행된 직후의 상태를 의미하며, 이는 트랜잭션의 모든 연산을 처리한 상태이다.
- 완료
- 트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태를 완료 상태라고 한다.
- 실패
- 하드웨어, 소프트웨어 또는 트랜잭션 내부의 오류 등 여러가지 이유로 인해 장애가 발생하여 트랜잭션의 수행이 중단된 상태를 실패 상태라고 한다.
- 철회
- 트랜잭션을 수행하는 데 실패하여 rollback 연산을 실행한 상태를 철회 상태라고 한다.
면접에 나올 수 있는 질문
- 트랜잭션이란?
- 트랜잭션의 4가지 특성과 설명
참고
기여자
Junho Moon
📦