2.1.4 트랜잭션 처리
트랜잭션(transaction)은 거래라는 뜻입니다. 그래서 트랜잭션을 설명할 때 은행 거래를 주로 예로 들죠. 가령 홍길동이 김유신에게 10만 원을 송금한다고 해 봅시다. 먼저 홍길동 계좌에서 10만 원을 인출한 다음 김유신 계좌에 10만 원을 입금해야겠죠. 그런데 거래 중간에 원인 모를 장애가 발생해 홍길동 계좌에서는 10만 원이 빠졌는데 김유신 계좌에는 10만 원이 입금되지 않았다면 어떻게 될까요? 사람들이 은행을 불신해 뱅크런 사태가 일어날지도 모릅니다.
장애가 발생하지 않으면 좋겠지만, 현실적으로 장애 발생 가능성은 존재합니다. 따라서 이런 경우에는 거래 자체를 없었던 것으로 처리합니다. 즉, 김유신 계좌에 10만 원이 입금되지 않는다면 홍길동 계좌에서 10만 원이 인출된 것을 없었던 것으로 처리하고, 김유신 계좌에 10만 원이 입금된 것을 확인한 후에 거래가 성사됐다고 처리하는 것입니다.
RDBMS에서도 마찬가지입니다. 한 테이블에 있는 특정 데이터를 삭제한 후 연이어 새로운 데이터를 입력한다고 가정해 보죠. 삭제하고 입력할 때 장애가 발생해 입력 작업만 이루어졌다면 제대로 처리된 것이 아닙니다. 그래서 최종 입력 작업이 완료되기 전에 오류가 발생하면 작업 전 상태로 되돌리고, 입력 작업이 정상적으로 끝난 후에 모든 변경 내용을 최종 적용합니다. RDBMS에서 트랜잭션 처리는 원자성(atomicity), 일관성(consistency), 고립성(isolation), 지속성(durability) 이렇게 네 가지 요소로 구성되는데, 지금까지 설명한 내용을 이론적으로 정리한 것뿐이므로 이런 것이 있다는 정도로만 알고 지나가도 괜찮습니다.