트랜잭션이란, 데이터베이스에서 하나의 기능을 수행하기 위해 필요한 최소한의 논리적 작업 단위를 의미한다.
즉, 한꺼번에 수행되어야 할 SQL 문들의 집합이라고 이해하면 쉽다.
이는 회복 작업과 병행 제어 처리를 위한 기본 단위로 사용된다. (관련 내용은 뒤에서 혹은 다음에...)
트랜잭셔의 예로 계좌 송금이 있다.
A의 계좌에서 B의 계좌로 만원을 송금하게 되면, A의 계좌에서는 만원이 빠져나가고 B의 계좌에는 만원이 추가되어야 할 것이다.
따라서 update 쿼리 두 개가 함께 처리되어야 한다.
만약 A의 계좌에서 만원이 빠져나가는 update 쿼리만 수행되고 중간에 네트워크 오류나 전원 문제로 수행이 중단된다면 큰 문제가 발생할 것이다.
트랜잭션은 ACID라 불리는 4가지 특성을 가지고 있다.
원자성 Atomicity -> All or Nothing
트랜잭션에 속한 모든 연산들이 모두 실행 완료되거나 하나도 실행되지 않아야 한다는 특성이다.
이는 연산들이 부분적으로 실행되는 것을 허용하지 않는다.
만약 트랜잭션 수행 도중 장애가 발생하는 경우, 장애 발생 전까지 실행된 연산 결과물을 모두 취소하고 데이터베이스를 트랜잭션 작업 전 상태로 되돌려야 한다.
일관성 Consistency
트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관된 상태를 유지해야 한다.
모순된 데이터가 존재하면 안된다는 의미이다.
A가 만원, B가 0원을 가지고 있었고, 5,000원을 송금하는 트랜잭션 수행 후에는, A와 B 모두 5,000원을 가지고 있어야 한다.
이와 다른 데이터는 존재하면 안된다. (A 혹은 B만 5,000원을 가지고 있다는 등...)
격리성 Isolation
수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없다.
만약 여러 트랜잭션이 동시에 수행되더라도, 순서대로 하나씩 수행된 결과와 동일한 결과를 제공해야 한다.
지속성 Durability
트랜잭션이 성공적으로 완료된 후, 데이터베이스에 반영한 수행 결과는 영구적이어야 함을 의미한다.
언급한 4가지 특성들을 각각 보장하기 위한 DBMS의 기능이 존재하는데, 이는 다음과 같다.
원자성과 지속성을 보장하기 위한 DBMS의 기능으로는 회복 기능이, 일관성과 격리성을 보장하기 위한 기능으로는 병행 제어 기능이 존재한다.
commit 연산
트랜잭션이 성공적으로 수행되었음을 선언 (작업 완료)
commit 연산이 실행되면 트랜잭션의 수행 결과가 데이터베이스에 반영되고 일관된 상태를 지속적으로 유지하게 된다.
rollback 연산
트랜잭션을 수행하는 데 실패했음을 선언 (작업 취소)
rollback 연산이 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 데이터베이스가 트랜잭션 수행 전의 일관된 상태로 되돌아간다.

부분완료 상태(partially committed)는 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태를 의미한다.
완료 상태(committed)는 트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태로, 트랜잭션이 수행한 최종 결과를 데이터베이스에 반영하고 데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션이 종료된다.
철회 상태(aborted)는 트랜잭션의 실행 실패로 rollback 연산을 실행한 상태로, 지금까지 실행한 트랜잭션의 연산을 모두 취소하고 트랜잭션이 수행되기 전의 데이터베이스 상태로 되돌리면서 트랜잭션이 종료된다.
장애와 회복에 대해서는 다음 포스팅에서 다루도록 하겠다.