ACID란?
ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 약자이며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미한다.
원자성(Atomicity)
원자성은 트랜잭션 내부 연산들이 부분적으로 실행되고 중단되지 않는 것을 보장한다는 것이다. 쉽게 말하자면, 트랜잭션은 전체 성공과 전체 실패 중 한 가지만 수행한다. 예를 들면 계좌 이체 트랜잭션은 다음과 같은 연산으로 이루어져 있다.
1
2
1. A의 계좌에서 20만원 출금
2. B의 계좌에 20만원 입금
이때 2번 과정에서 에러가 발생하면 1번 과정을 취소해야한다.
일관성(Consistency)
일관성은 트랜잭션이 성공적으로 완료되면 일관성 있는 데이터베이스 상태로 유지되는 것을 보장한다. 제약조건과 같이 데이터베이스에 정의된 규칙을 트랜잭션이 위반하는 경우에는 해당 트랜잭션은 취소되어야 한다.
격리성(Isolation)
격리성은 동시에 실행되는 여러 트랜잭션이 서로 독립적임을 보장한다. 가장 엄격할 경우에는 트랜잭션을 순차적으로 실행하기도 한다. 트랜잭션을 수행할 때 다른 트랜잭션이 해당 작업 사이에 끼어들지 못하도록 보장한다. 쉽게 이야기하면 트랜잭션 밖에서 어떠한 연산도 어떠한 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 예를들어 계좌 이체 작업에서 A 계좌의 잔고와 B 계좌의 잔고 총합이 100만원으로 시작했을때, 특정 순간에는 총합이 100만원이 아닌 경우도 있을것이다. 하지만, 다른 트랜잭션은 항상 잔고의 총합인 100만원을 볼 수 있도록 보장해야한다.
지속성(Durability)
지속성은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템에 장애가 발생해도 성공적으로 수행된 트랜잭션의 결과는 항상 데이터베이스에 반영되어야한다. 전형적으로 트랜잭션은 로그로 남고, 로그가 저장되어야 트랜잭션이 성공했다고 간주한다. 추후 장애가 발생하면 이 로그를 활용해 데이터베이스를 회복한다.