오늘의 질문
📍 정답 확인
ACID 는 원자성 (Atomic), 일관성 (Consistency), 격리성 (Isolation), 지속성 (Duration) 의 약자이며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미한다.
ACID
- 원자성 (Atomic)
트랜잭션 내부 연산들이 부분적으로 실행되거나 중단되지 않는 것을 보장한다. 쉽게 말하자면, 트랜잭션은 전체 성공, 전체 실패 중 하나만 수행한다. 가령 A 계좌에서 10,000원을 출금하여 B 계좌에 입금한다고 할 때, 1번 과정은 실패하고 2번 과정만 성공했다고 하면 전체 트랜잭션 자체를 실패로 처리해야 한다.
- 일관성 (Consistency)
트랜잭션이 성공적으로 완료되면 일관성 있는 데이터베이스 상태로 유지되는 것을 보장한다. 가령 제약조건과 같이 데이터베이스에 정의된 규칙을 위반하는 경우에는 해당 트랜잭션을 취소한다.
- 격리성 (Isolation)
동시에 실행되는 여러 트랜잭션이 서로 독립적임을 보장한다. (트랜잭션을 수행할 때 다른 트랜잭션이 해당 작업 사이에 끼어들지 못하도록 보장한다.) 예를 들어, 은행의 계좌이체 작업을 생각해 보면 A 계좌와 B 계좌의 잔고 총합이 10,000원인 상태로 별개의 트랜잭션이 작동한다 했을 때, 특정 순간에는 총합이 10,000원이 아닐 때도 있을 것이다. 하지만 트랜잭션은 항상 잔고의 총합인 10,000원을 볼 수 있도록 보장되어야 한다.
- 지속성 (Duration)
성공적으로 수행된 트랜잭션은 영구히 반영되어야 함을 보장한다. 시스템에 장애가 발생해도 성공적으로 수행한 트랜잭션의 결과는 항상 데이터베이스에 반영되어 있어야 한다. 전형적으로 트랜잭션은 로그로 남고, 로그가 저장되어야 트랜잭션이 성공했다고 간주한다. 추후 장애가 발생한다면 이 로그를 활용해 데이터베이스를 회복한다.
심화 과정 - BASE
- 기본 가용성 (Basically Available)
사용자가 언제든지 데이터베이스에 동시에 액세스할 수 있다. 다시 말해 사용자가 레코드를 업데이트하기 위해 다른 사용자가 거래를 완료할 때 까지 기다릴 필요가 없다. 예를 들어 전자 상거래 플랫폼에서 트래픽이 갑자기 급증하는 경우, 시스템은 제품 목록 제공 및 주문 수락을 우선할 수 있다. 이 경우 재고 수량의 업데이트가 약간 지연될 수 있지만 사용자는 계속해서 항목을 확인할 수 있다.
- 소프트 상태 (Soft state)
외부 트리거, 입력이 없더라도 시간 경과에 따라 데이터가 변할 수 있는 일시적 상태 또는 임시 상태를 가질 수 있다. 예를 들어 사용자가 소셜 미디어 게시물을 편집한다 했을 때 변경 사항이 다른 사용자에게 즉각적으로 표시되지 않을 수 있다. 다만 나중에 사용자가 트리거하지 않았더라도 게시물이 저절로 업데이트된다.
- 최종 일관성 (Eventually consistent)
모든 동시 업데이트가 완료되었을 때 레코드의 일관성이 유지된다. 이 시점에 레코드를 쿼리하면 동일한 값을 얻게 된다. 예를 들어 여러 사용자가 동시에 문서를 편집할 수 있는 분산 문서 편집 시스템이 있다면 사용자 A 와 사용자 B 가 문서의 동일한 섹션을 동시에 편집하는 경우, 변경 내용이 전파되고 동기화될 때까지 로컬 사본이 일시적으로 다를 수는 있다. 하지만 시간이 지나면 시스템은 여러 사용자가 변경한 내용을 전파하고 병합하여 최종 일관성을 보장한다.
차이점
ACID 와 BASE 는 데이터베이스 트랜잭션 모델이다. 다만, ACID 는 데이터베이스 가용성보다 일관성을 우선시하고 BASE 는 일관성보다 가용성을 우선시한다. 그래서 ACID 원칙은 트랜잭션이 어느 단계에서든 실패하면 전체 트랜잭션을 실패로 처리하지만, BASE 원칙은 실패로 처리하지 않는다. 때문에 사용자가 일관되지 않은 데이터에 일시적으로 접근할 수 있게 되는데, 결과적으로 데이터베이스 일관성은 달성이 되지만, ACID 처럼 즉시 달성되지는 않는다.
일부 사례에서는 BASE 원칙이 선호되기도 한다. 예를 들어 소셜 미디어에서 친구 요청을 수락할 때 일시적으로 소셜 미디어 프로필에 다른 사용자의 친구 수가 잘못 표시되어도 상관 없다. 하지만 데이터가 업데이트되는 동안 소셜 미디어 피드에 접근하지 못하게 되어서는 안 된다. 이러한 시나리오에서는 BASE 원칙을 적용할 수 있다.
즉 ACID 는 데이터 일관성, 신뢰성 및 예측 가능성이 요구되는 애플리케이션에 이상적인 옵션이다. 예를 들어 은행 시스템의 경우 데이터 무결성이 무엇보다 중요하기에 ACID 데이터베이스를 사용할 것이고, 반면 BASE 는 구조화되지 않은 대용량 데이터의 처리에 더 적합한 옵션이다. 예를 들어 전자 상거래 시스템의 경우 가격 정확성보다는 모든 고객이 제품 가격에 실시간으로 액세스할 수 있도록 하는 것이 더 중요하다.
🔖 참고자료