1 트랜잭션의 특징
트랜잭션은 데이터베이스의 데이터 무결성이 보장되는 상태에서 DML 작업을 완수하기 위한 기본 작업 단위입니다. 관계형 데이터베이스 시스템은 데이터를 처리할 때 트랜잭션을 통해 정상 종료나 사용자 프로세스 실패나 시스템 실패와 같은 비정상 종료에 대해 데이터의 신뢰성과 일관성을 보장합니다.
은행의 출금과 입금을 예로 들어 보겠습니다. 잔액이 100만원인 A 계좌가 있습니다. A 계좌에서 B 계좌로 10만원을 이체하면, A 계좌에서는 10만원이 빠져나가야 하고 B 계좌에는 10만원이 더해져야 합니다. 하지만 계좌 이체 도중에 장애가 발생하면 어떻게 될까요? 10만원은 어느 계좌에 속하는 것이 맞을까요?
또 다른 예를 살펴보겠습니다. ATM 기기와 인터넷 뱅킹으로 동시에 A 계좌를 조회했을 때 잔액은 똑같이 100만원이었습니다. ATM 기기와 인터넷 뱅킹으로 동시에 60만원씩 B 계좌로 이체를 실행하면 이체는 성공할까요, 둘 다 실패할까요? 이체가 된다면 어느 쪽에서 이체가 실행될까요?
이러한 이슈에 필요한 대응 논리가 트랜잭션입니다. 일반적으로 DML 실행과 실행에 대한 커밋/롤백 단계까지를 트랜잭션이라고 부르지만, 실무에서는 데이터베이스에서 SELECT 문으로 데이터를 조회하고 DML을 실행하여 종료하는 과정까지를 트랜잭션이라고 부릅니다. 또한 트랜잭션의 성공과 실패 여부에 따라 ‘트랜잭션이 성공했다’와 ‘트랜잭션이 철회되었다’라고 표현합니다. 트랜잭션은 정상적인 상황이라면 마지막 단계에서 커밋이나 롤백으로 종료됩니다.1
그림 9-7 트랜잭션 과정
1 DDL과 DCL 명령어나 자동 커밋은 자동으로 커밋하여 트랜잭션을 종결합니다.