트랜잭션이란?
트랜잭션(Transaction) 이란, 데이터베이스의 상태를 '변경'시키기 위해 수행하는 작업 단위이다
데이터베이스의 상태를 변경시킨다는 이야기는 SELECT, UPDATE, INSERT, DELETE 와 같은 행동을 뜻한다.
이런 트랜잭션은 상황에 따라 여러 개가 만들어질 수 있다.
그 하나의 트랜잭션은 Commit (저장) 되거나 Rollback (철회)될 수 있다.그 이유는 무엇일까?
예를 들어 우리가 문제를 풀면 포인트로 변경된다고 가정해보자.
A, B, C, D 가 문제를 풀어 각각 100 Point 씩 얻었고 이를 DB에 저장하려 한다.
A 저장 완료, B 저장 완료, C 저장 완료, D 저장 실패
이런 상황이 오게 된다면 잘못된 처리이므로 다시 저장을 수행해야 하는데, A, B, C는 그 전에 이미 저장이 완료되었기 때문에 다시 저장을 시작하면 200점이 저장된다.
이런 문제점들을 위해서 트랜잭션은 Commit 과 Rollback 을 이용한다
트랜잭션의 특징
트랜잭션에는 4가지의 특징이 존재한다.
- 원자성
- 일관성
- 독립성
- 지속성
원자성
원자성은 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않거나를 뜻한다.
All or Nothing을 생각하면 된다.
일관성
일관성은 트랜잭션 작업 처리의 결과가 항상 일관되어야 한다를 뜻한다.
즉, 데이터 타입이 반환 후와 전이 항상 동일해야 한다.
독립성
독립성은 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미한다.
즉, 각각의 트랜잭션은 독립적이라 서로 간섭이 불가능하다.
지속성
지속성은 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 함을 뜻한다.
보통 commit 이 된다면 지속성은 만족할 수 있다.
트랜잭션의 Commit과 Rollback
Commit
하나의 트랜잭션이 성공적으로 끝나서 데이터베이스가 '일관성있는 상태'에 있음을 의미한다.
Rollback
트랜잭션의 '원자성이 깨질 때'(전혀 반영되지 않을때), 즉 '하나의 트랜잭션 처리'가 비정상적으로 '종료 '되었을 때의 상태를 뜻한다.
Rollback 이 이뤄진다면 트랜잭션을 다시 실행하거나 부분적으로 '변경된 결과를 취소'할 수 있다.
트랜잭션의 상태
트랜잭션은 논리적으로 5가지의 상태에 있을 수 있다.
- Active
- 트랜잭션이 현재 실행 중인 상태
- Failed
- 트랜잭이 실행되다 오류가 발생해서 중단된 상태
- Aborted
- 브랜잭션이 비정상 종료되어 Rollback 이 수행된 상태
- Partially Committed
- 트랜잭션의 연산이 마지막까지 실행되고 Commit이 되기 직전 상태
- Committed
- 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태