본문 바로가기
T./Database Transaction

ACID

by IT Journeyman 2023. 12. 30.

데이터베이스 트랜잭션은 ACID라는 약어로 정의할 수 있습니다.

"네가 뭘 안다고" 하실 수도 있으나 그래도 25년 넘게 데이터베이스 업계에 종사했으니 한 번 정리해 보겠습니다.

 

모든 논의는 정의가 중요합니다, 말장난하는 사람들도 많아서 이런 당황스러운 대화를 했던 기억이 납니다.

Q. 트랜잭션을 지원하나요? A. 네, 어플리케이션에서 처리하시면 됩니다.

Q. 트랜잭션을 지원하나요? A. 네, 하지만 ACID는 모두 지원하지 않습니다.


세상의 모든 DBMS들이 데이터베이스 트랜잭션(ACID)를 지원하지도 않고, 그럴 필요도 없다고 생각합니다.

일부 DBA(데이터베이스 실무자)분들은 조선의 유학자들처럼 ACID를 종교적 신념처럼 여기기도 합니다.

그러나 ACID는 한반도와 그 부속도서에서 강제력을 갖는 헌법과 법률이 아닙니다.
IT환경과 요구사항은 항상 변하며, 늘 더 좋은 대안이 있을 수 있습니다.

 

예를 들면, Last Update Wins(LUW)이나 Eventually Consistent가 더 효율적인 경우도 많습니다.

(이 두 가지는 서로 다른 개념입니다, 나중에 이것들도 각각 한 꼭지씩 다루어 보겠습니다)

 

ACID를 고집했다면, 2000년대 등장한 Facebook이나 Twitter는 전세계적인 성장이 불가능했을 것입니다.

그 당시 네트워크 속도나 대역폭도 부족했지만, 현재의 네트워크 환경에서도 빠른 응답 시간을 보장하는

Global Distributed Transaction을 지원하는 데이터베이스 아키텍처는 매우 어려워 보입니다.
또한 오라클 같은 상용 DBMS의 라이센스 비용을 감안하면, 투자 비용도 천문학적이었을 것 같습니다.

 

오라클의 Distributed Transaction을 사용했다면, Distributed Lock 때문에 폭망했을 것 같습니다.

ORA-01591 에러나 dba_2pc_pending이라는 딕션너리 테이블을 기억하신다면, 네 그거 맞습니다.


결국 Facebook은 자체 DBMS을 만들었고, 이것이 Instragram/Netflix가 쓰는 Apache Cassandra입니다.

 

글을 쓰는 지금 시점에서도  Global Distributed Transaction을 지원하는 데이터베이스는 매우 논쟁적입니다.

여러 DBMS들이 있으나, 매우 제한적인 환경에서만 적용가능하고 아직도 많은 분들이 도입을 망설이고 있습니다.

 

각설하고, ACID를 정리하면 아래와 같습니다.

  • Atomicity(원자성) - All or Nothing!
    트랜잭션 내의 모든 작업이 전체가 성공적으로 완료되거나 전체가 실패하도록 보장하여 부분 업데이트(partial updates)를 방지하고 데이터 무결성을 유지합니다.

  • Consistency(일관성) - 데이터베이스의 다른 제약 조건들도 준수해야 함.
    데이터베이스, 더 정확하게 DBMS는 database operation에 대하여 다양한 constraints and rules을 설정할 수 있는데 트랜잭션은 이러한 제약 조건들도 모두 준수해야 성공이고 그렇지 않으면 실패로 처리하여 Consistency(일관성)을 유지해야 한다는 뜻.

    ACM 튜링상 수상자 Jim Gray의 1981년 논문 첫문장을 그대로 옮기면 아래와 같습니다. 
    A transaction is a transformation of state which has the properties of atomicity (all or nothing), durability (effects survive failures) and consistency (a correct transformation)
    (제가 보기에는 Consistency가 ACID에서 가장 많이 오해되는 부분이기도 합니다. 물론 제가 틀릴 수도 있고 또 많이 틀립니다)

    또한 ACID의 "C"는 CAP Theorem의 "C"와 다른 의미입니다(출처 : Wikipedia). Eric Brewer의 CAP 가설을 정식으로 증명하여 이론으로 확립했다는 두 교수, Seth Gilbert와 Nancy Lynch의 2002년 논문에 따르면 아래와 "C"의 정의는 아래와 같습니다.
    Consistency, informally, simply means that each server returns the right response to each request, i.e.,
    a response that is correct according to the desired service specification.

    이 정의는 분산 시스템에서 모든 노드가 같은 시점에 동일한 데이터를 볼 수 있도록 보장하는 특성을 "C"로 설명합니다.
    좀 무식하게 정리하면, ACID의 "C"와는 조금 다르게 읽기 일관성을 강조한 개념으로 이해합니다. 

  • Isolation(고립성/격리성) - 서로 간섭하면 안됨.
    즉, 다른 트랜잭션에 영향을 미치지 않아야 함. 여기서 조금 더 생각해 보면 이 부분은 고민할 내용이 생깁니다. 즉 동일 데이터(혹은 동일 Key)를 서로 다른 트랜잭션이 변경하려 할 때 다양한 처리 방법이 존재합니다. 이를 처리하는 방법으로는 대표적으로 Locking/Enqueue Mechanism이나 Last Update Wins(LUW)/Last Write Wins(LWW)가 있습니다. 

  • Durability(지속성/내구성) - 트랜잭션은 영구 저장되어야 함.  
    성공적으로 완료된 트랜잭션은 영구적으로 기록되어야 하며, 시스템 장애 또는 전원 공급 장애와 같은 상황에서도 트랜잭션의 결과는 손실되지 않아야 합니다. 이 부분을 처리하기 위해 DBMS는 다양한 방법을 사용하고 있습니다.

    대표적으로 세 가지 방법이 있고, 오라클이나 MS SQL 같은 상용 DBMS와 대부분의 NoSQL은 1, 2번을 혼용하는 방법을 사용합니다. 오라클은 트랙잭션을 기록하는 Redo log와 데이터 블락을 Undo(Before Image)와 데이터파일(After Image)에 직접 기록하는 방식을 사용하는데 이것을 Physiological Logging[1]이라고 합니다. 제가 주니어일 때 이것을 공부하면서 이 아키텍처를 생각한 사람은 정말 대단하다고 생각했습니다. 이 내용도 나중에 NoSQL과 비교하여 설명하도록 하겠습니다.
    1. 변경된 데이터의 블락을 메모리(캐쉬)에서 직접 데이터파일에 기록하는 방법.
    2. 변경된 데이터의 내용(Change Vector)만 Log 파일에 기록하는 방법.
    3. 1번, 2번 방법을 다양하게 혼용하는 방법

ACID의 연원은 데이터베이스 역사의 또 다른 아버지[2]라고 할 수 있는 Jim Gray(1944-2007, Turing Award (1998))와 Andreas Reuter로 들 수 있고, 그들의 저서[3]에서 ACID 관련된 내용을 상술되어 있는 듯 합니다.(목차만 읽어 보았고, 본문은 읽어 보지 않았으므로 틀릴 수도 있습니다)

 

[1] 노벨 생리의학상(Nobel Prize in Physiology or Medicine)의 그 "Physiological"과 철자가 같습니다. Physical과 Logical, 두 가지 방법을 모두 사용하여 Logging을 한다는 뜻으로 만든 조어(Coinage,造語)인 듯 합니다.(영어사전에는 어디에도 나오지 않는데 제가 못 찾은 것일 수도 있습니다.) Physiological Logging을 오라클이 "대단히 혼자" 개발한 것처럼 많이들 오해하고 있지만, 이것은 Jim Gray(아래 주석[2]의 책에 Physiological Logging이 나옵니다)를 포함한 많은 사람들이 연구한 트랜잭션 처리 방법 중 하나였고 Physiological이라는 조어도 오라클 고유의 것인지는 잘 모르겠습니다.     

 

[2] 제가 꼽는 DB의 아버지들은 E. F. Codd(Edgar Frank "Ted" Codd, 1923 ~ 2003, Turing Award (1981)), Michael Stonebraker(1943 ~, Turing Award (2014)), Eric Brewer(Eric Allen Brewer, 1964 ~ ) 등입니다. 

 

[3] Transaction Processing: Concepts and Techniques (The Morgan Kaufmann Series in Data Management Systems) 1st Edition
by Jim Gray (Author), Andreas Reuter (Author)

Publisher ‏ : ‎ Morgan Kaufmann; 1st edition (September 15, 1992)
Language ‏ : ‎ English
Hardcover ‏ : ‎ 1128 pages
ISBN-10 ‏ : ‎ 1558601902
ISBN-13 ‏ : ‎ 978-1558601901

 

아래 출처 : https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902