Database
트랜잭션
성찬우
2022. 9. 24. 22:54
트랜잭션이란?


트랜잭션은 단순히 거래를 의미한다.
데이터베이스에서 트랜잭션은 업무 처리의 최소 단위를 안전하게 처리하도록 보장하는 것이다.
위의 예시와 같이 입금을 예시로 들었을 때
A가 B에게 1000원을 입금한다 가정 했을 때,
A의 잔고는 줄었지만 B의 잔고는 늘지 않았을 경우 문제가 발생하여 롤백하게 된다.
반대로 정상적으로 출금과 입금이 진행되었을 때는 커밋이라한다.
트랜잭션의 조건 (A-C-I-D)
| 원자성 [ Atomicity ] | 트랜잭션으로 실행한 작업은 모두 성공(commit)하거나 모두 실패(rollback)해야한다. All or Nothing |
| 일관성 [ Consistency ] | 트랜잭션이 완료된 결과값이 일관적인 DB 상태를 유지하는 것을 의미한다. 즉, 작업 처리 결과가 항상 일관성 있어야 한다는 것인데 트랜잭션이 진행되는 동안 DB가 변경 되더라도 업데이트된 DB로 진행되는 것이 아니라 처음 참조한 DB로 진행된다. |
| 격리성,고립성 [ Isolation ] | A트랜잭션이 수행시에 B트랜잭션의 작업에 끼어들지 못함을 의미한다. (서로 간섭 불가) 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료 될 때 까지 다른 트랜잭션에서 참조하지 못한다. 이를 유지하기 위해서는 여러 트랜잭션이 동시에 접근하는 데이터에 대한 제어가 필요하다. |
| 지속성 [ Durability ] | 트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 한다. |
붉은색으로 처리해둔 제어에 대해서 확인해 보아야 하는데
트랜잭션 간에 격리성을 완벽히 보장하기 위해서는 트랜잭션을 순서대로 실행 해야한다.
순서대로 실행한다는 것은 성능 이슈가 발생할 수 밖에 없다. 그렇기 때문에
ANSI표준은 트랜잭션의 격리 수준을 4단계로 나누었다.
격리 수준을 4단계
| READ UNCOMMITED 커밋되지 않은 읽기 |
FAST |
| READ COMMITTED 커밋된 읽기★ |
| |
| REPEATABLE READ 반복 가능한 읽기★ |
| |
| SERIALIZABLE 직렬화 가능 |
SLOW |