ACID 트랜잭션 (ACID Transaction)

컴퓨터과학·AI
한 줄 정의: 데이터베이스에서 하나의 작업 단위(트랜잭션)가 원자성, 일관성, 고립성, 지속성이라는 네 가지 성질을 만족하도록 보장하는 원칙입니다.

쉽게 풀면

계좌 이체를 예로 들어봅시다. 내 계좌에서 10만원을 빼고 친구 계좌에 10만원을 더하는 두 단계의 작업이 있는데, 만약 중간에 정전이 나서 "빼는 것"만 실행되고 "더하는 것"은 실행되지 않는다면 10만원이 허공으로 사라져버립니다. ACID 트랜잭션은 이런 일이 절대 일어나지 않도록, 두 단계를 "전부 성공 아니면 전부 실패"로 묶어서 처리합니다(원자성). 여기에 더해 트랜잭션 전후로 데이터가 정해진 규칙을 항상 만족하고(일관성), 동시에 여러 거래가 일어나도 서로 간섭하지 않으며(고립성), 한 번 완료된 거래는 시스템이 꺼져도 사라지지 않는다는(지속성) 성질까지 묶어 ACID라고 부릅니다.

왜 중요한가

ACID는 관계형 데이터베이스 설계의 근간이 되는 원칙이기 때문에, 새로운 저장 엔진이나 분산 데이터베이스를 제안하는 논문에서는 거의 항상 "우리 시스템이 ACID를 얼마나, 어떻게 보장하는가"를 설명하거나 평가 기준으로 삼습니다. 특히 클라우드·분산 환경으로 시스템이 확장되면서 ACID를 유지하는 비용과 성능 사이의 트레이드오프가 중요한 연구 주제가 되었고, 이는 분산 합의(consensus), 트랜잭션 격리 수준, NewSQL 시스템 설계 등 여러 하위 연구 분야와 맞닿아 있습니다. 또한 블록체인이나 마이크로서비스처럼 여러 독립적인 컴포넌트가 상태를 나눠 갖는 환경에서 ACID를 어떻게 흉내 내거나 대체할지도 활발히 논의되는 주제입니다.

논문에서는 이렇게 쓰입니다

"동시에 여러 사용자가 재고 정보를 수정하는 상황을 시뮬레이션하여 ACID 트랜잭션이 데이터 정합성을 유지하는지 검증하였다."

이 문장은 데이터베이스 시스템, 분산 시스템을 다루는 논문의 실험 검증 부분에서 자주 등장합니다. ACID는 전통적인 관계형 데이터베이스 설계의 기본 전제이며, 트랜잭션 처리 성능이나 정합성을 평가하는 논문에서 핵심 기준으로 다뤄집니다.

"제안한 분산 데이터베이스는 다중 노드에 걸친 트랜잭션에 대해서도 ACID 특성을 보장하면서, 기존 방식 대비 처리 지연을 줄이는 것을 목표로 한다."

분산 데이터베이스나 NewSQL 계열 논문에서 흔히 볼 수 있는 문장으로, 단일 서버를 넘어선 환경에서도 ACID를 유지하려는 시도와 그에 따른 성능 비용을 함께 강조하는 경우가 많습니다.

"블록체인 기반 거래 처리 계층을 설계하면서, 스마트 컨트랙트 실행 단위가 ACID 트랜잭션의 원자성과 고립성 요건을 만족하도록 구현하였다."

블록체인·분산원장 관련 논문에서는 전통적 데이터베이스 개념인 ACID를 새로운 실행 환경에 적용하거나 재해석하는 방식으로 인용되는 경우가 있습니다.

조금 더 깊게 보면

ACID를 실제로 논문에서 다룰 때는 네 원칙을 뭉뚱그려 말하기보다, 그 중 어느 성질을 어떤 방식으로 구현했는지가 논의의 핵심이 되는 경우가 많습니다. 특히 고립성(isolation)은 Read Uncommitted부터 Serializable까지 여러 수준으로 나뉘며, 어떤 격리 수준을 택하느냐에 따라 성능과 데이터 정합성 사이의 균형이 달라집니다. 원자성과 지속성을 구현하는 대표적인 메커니즘으로는 write-ahead logging(WAL), 2단계 커밋(two-phase commit) 같은 프로토콜이 자주 언급되며, 분산 환경 논문에서는 이런 메커니즘을 어떻게 확장하거나 대체했는지가 기여점으로 제시되는 경우가 많습니다.

주의할 점

분산 시스템 환경에서는 모든 서버가 항상 ACID를 완벽히 지키려 하면 성능과 가용성이 크게 떨어질 수 있습니다. 그래서 일부 시스템은 일관성을 다소 완화하는 대신 가용성을 높이는 BASE 모델을 택하기도 하며, 이러한 선택의 근거는 CAP 정리와 밀접하게 연결됩니다.

관련 용어