트랜잭션이란 DB의 상태를 변경하기 위해 수행하는 작업 단위를 뜻한다.
DB의 상태를 변경시킨다는 것은 DML(SELECT, UPDATE, INSERT, DELETE)와 같은 쿼리를 날려 연산하는 것을 말한다.
만약 트랜잭션이 없다면?
A와B가 있다고 가정해보자
A와 B는 각각 계좌에 천원씩 가지고 있다.
A가 B에게 500원을 보냈다.
그런데 어떠한 오류 때문에 A의 계좌에서 500원은 사라졌는데 B의 계좌에 500원이 증가하지 않은 것이다.
그러면 사고다
여기서 DB가 제공하는 트랜잭션 기능을 사용한다면 위와 같은 상황이 발생했을 경우, rollback을 사용하면 다시 원상태로 A와 B의 계좌에는 천원씩 존재하게 된다.
그리고 다시 한번더 과정을 거쳐 성공했다면, commit을 통해서 DB에 정상적으로 반영할 수 있을 것이다.
트랜잭션은 ACID라고 하는 것을 보장해야한다.
원자성(Atomicity)
트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 실패한다.
일관성(Consistency)
모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다.
격리성(Isolation)
동시에 실행되는 트랜잭션들은 서로에게 영향이 미치지 않도록 격리해야한다.
격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준 (Isolation level)을 선택할 수 있다.
트랜잭션 격리 수준
READ UNCOMMITED(커밋되지 않은 읽기)
READ COMMITTED(커밋된 읽기) - 일반적으로 많이 사용
REPEATABLE READ(반복 가능한 읽기)
SERIALIZABLE(직렬화 가능)
지속성(Durablity)
트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다.
출처