용어사전

Atomicity 
모든 트랜잭션은 원자적이다. 

이 말이 의미하는 바는 무엇인가? 
하나의 트랜잭션은 논리적으로 수행되는 일의 단위라고 할 수 있으며, 하나의 트랜잭션은 여러개의 분할된 작업으로 분리 될 수 있다. 따라서 하나의 트랜잭션은 다양한 작업을 포함할 수도 있고, 아닐 수도 있다.

위의 개념에 기반하면 모든 트랜잭션은 원자적이어야 한다는 것은, 그 트랜잭션을 구성하는 작업들로 인해 논리적인 구성이 훼손되면 안된다는 것을 의미한다. 

요약하면 하나의 트랜잭션은 그 논리적 작업을 구성하고 있는 모든 작업들이 완료되거나, 그렇지 않다면 단 하나도 수행되어서는 안된다는 것이다. 

예를 들어, 은행구좌에 있는 돈을 다른 은행구좌로 이체하는 작업을 하나의 트랜잭션이라고 생각한다면. 이 트랜잭션을 처리하기 위해서는 간단히 (1) 한 구좌에 있는 돈을 출금하고, (2) 출금한 돈을 입금하는 두 작업으로 구성되게 된다. 

결론적으로, 만약 위 두 작업 모두가 이루어지지 않으면 전체 트랜잭션은 이루어질 수 없다. 

- 데이터베이스에 익숙하지 않은 사람의 경우 처음 ACID 개념을 접하게 되면 많이 당황하는 부분은 대체로 다음과 같다. 

일반적인 트랜잭션 개념을 찾아보면 '쪼갤 수 없는 업무처리 단위'라고 설명되어있다. 
하지만 바로 위 설명으로 인해 초심자들의 오해가 발생하게 된다. 분명 쪼갤 수 없는 업무처리 단위인데 왜 사용되는 DB 작업은 여러개가 되고, 그 모든 작업들이 동시적으로 이루어져야 하는지 그리고 그 쪼갤 수 없는 작업들이 왜 나눠지게 되는 건지 의아해지는 것이다. (개인적으로 나의 경우에는 더욱 그랬다.)  

게다가 그렇게 하나의 트랜잭션은 여러개의 작업으로 구성되어 있으면서 왜 거기다 '원자성'이라는 단어를 갖다 붙이게 되는건지 더더욱 이해할 수 없게 된다. 

위의 딜레마를 극복하기 위해서는 위 트랜잭션 개념의 함정을 잘 살펴야 한다. 트랜잭션은 쪼갤 수 없는 DB 작업 단위가 아닌 '업무처리 단위'라는 것이다. 

현대사회에서 데이터베이스를 사용하는 다양한 업무 가운데, 그 업무들은 다른 업무들의 영향을 받고 상호작용 하게 되는 것이 일반적이다. 하지만 그와 같은 모든 업무들 가운데도 더 이상 쪼갤 수 없는 논리적 최소 단위가 존재하게 되는데 바로 그 '최소 단위의 업무'가 바로 트랜잭션이 되는 것이다. 

이를 은행 업무를 예로 들면 '입금' '출금' '이체'와 같은 업무 단위들이 바로 일개 트랜잭션들이 된다.
그리고 이와 같은 하나의 트랜잭션을 처리하기 위해서 여러개의 DB 작업 (Query)를 필요로 할 수 있다.

따라서 하나의 트랜잭션이 원자적이라는 것은 그 트랜잭션을 구성하는 모든 DB 작업이 원자적으로 이루어져야 한다는 것이다. 비록 그 DB 작업들은 여러개가 될 수 있지만 그 모든 것은 하나의 트랜잭션을 구성하며, 그 트랜잭션은 절대적으로 원자적일때 그 데이터를 신뢰할 수 있다.



Consistency
모든 트랜잭션은 일관적이다.