ACID에 대해서 설명해주세요.

백엔드와 관련된 질문이에요.

ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 약자이며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미합니다.

각 속성은 어떤 의미를 가지나요? 🤔

원자성(Atomicity) 은 트랜잭션 내부 연산들이 부분적으로 실행되고 중단되지 않는 것을 보장합니다. 쉽게 말하자면, 트랜잭션은 전체 성공과 전체 실패 중 한 가지만 수행한다는 것입니다. 예를 들면 계좌 이체 트랜잭션은 다음과 같은 연산으로 이루어져 있습니다. 이때 2번 과정에서 에러가 발생하면 1번 과정을 취소해야 합니다.

1. A 계좌에 3000원 출금
2. B 계좌에 3000원 입금 

일관성(Consistency) 은 트랜잭션이 성공적으로 완료되면 일관성 있는 데이터베이스 상태로 유지되는 것을 보장합니다. 가령, 제약조건과 같이 데이터베이스에 정의된 규칙을 트랜잭션이 위반하는 경우에는 해당 트랜잭션은 취소되어야 합니다.

격리성(Isolation) 은 동시에 실행되는 여러 트랜잭션이 서로 독립적임을 보장합니다. 가장 엄격할 경우에는 트랜잭션을 순차적으로 실행하기도 합니다. 트랜잭션을 수행할 때 다른 트랜잭션이 해당 작업 사이에 끼어들지 못하도록 보장합니다. 쉽게 이야기하자면 트랜잭션 밖에서 어떠한 연산도 중간 단계의 데이터를 볼 수 없음을 의미합니다. 가령, 계좌 이체 작업에서 A 계좌의 잔고와 B 계좌의 잔고 총합이 10,000원인 상태로 시작했을 때, 특정 순간에는 총합이 10,000원이 아닌 경우도 있을 것입니다. 하지만, 다른 트랜잭션은 항상 잔고의 총합인 10,000원을 볼 수 있도록 보장되어야 합니다.

지속성(Durability) 은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 보장합니다. 시스템에 장애가 발생해도 성공적으로 수행된 트랜잭션의 결과는 항상 데이터베이스에 반영되어 있어야 합니다. 전형적으로 트랜잭션은 로그로 남고, 로그가 저장되어야 트랜잭션이 성공되었다고 간주합니다. 추후 장애가 발생한다면 이 로그를 활용해 데이터베이스를 회복합니다.

추가 학습 자료를 공유합니다.