"하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합" "한 단위를 이루는 일련의 연관된 데이터베이스 연산(조작)"

트랜잭션은 왜 중요할까? 만약 트랜잭션을 하나씩 순차적으로, 한 트랜잭션 끝나고 다음 트랜잭션, ... 과 같이 수행한다면, 프로그램의 속도가 매우 느려질 것이다. DBMS는 CPU보다 I/O 작업을 더 빈번하게 수행하기 때문이다. 따라서 트랜잭션을 순차적으로, 직렬로 수행할수록 CPU가 노는 시간(idle time)이 길어지는 것이고 이는 비효율적이다.

그러니 여러 트랜잭션들을 동시에 수행해야 하는데, 이 때 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은, 순차적으로 수행했을 때 데이터베이스에 미치는 영향과 차이점이 없어야만 한다. 즉 데이터베이스에 저장된 데이터의 무결성은 매우 중요한데, 이를 위한 가장 좋은 방법이 데이터베이스 트랜잭션을 사용하는 것이다. DBMS는 다수의 사용자가 데이터베이스를 동시에 접근하도록 허용하면서도, 데이터베이스의 일관성을 유지한다는 특징을 갖는다.

트랜잭션 관리(Transaction Management) 모듈은 병행 제어 모듈과 복구 모듈로 이루어져 있다.

트랜잭션의 중요성을 이야기할 때 자주 등장하는 것이 은행 계좌의 입출금과 관련된 예시다. A 계좌에서 B 계좌로 송금을 한다고 생각해보자. 송금은 크게 2단계로 나뉜다. A 계좌에서 금액을 출금(차감)한 다음, 해당 금액을 B 계좌에 입금하는 절차를 거친다. 만약 A 계좌에서 출금한 직후에 뭔가 오류가 발생했는데, 그냥 그대로 끝나버리면? 실질적으로 B 계좌에 들어온 돈은 없는데 A 계좌의 잔고는 줄어드는 어이없는 일이 될 것이다. 시스템에서 해당 문제를 감지하고, 인출했던 돈을 다시 A 계좌로 입금시켜야 한다. 트랜잭션을 이용하면 이런 문제를 해결할 수 있다. 이러한 트랜잭션은 다양한 데이터 항목들을 액세스하고 갱신하는 프로그램 수행의 단위가 된다.

트랜잭션은 ACID라고 하는 다음의 네 가지 성질을 만족해야 한다.

다음 그림은 트랜잭션의 4가지 특성과, 이들을 지원하기 위한 DBMS의 기능들의 관계를 나타낸다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a8f2444e-88e3-44fd-9828-83f37ba2e167/untitled