포스트

ACID를 실무적으로 이해하기

ACID란

ACID는 트랜잭션의 신뢰성을 설명할 때 가장 먼저 나오는 네 가지 속성이다.

  • Atomicity
  • Consistency
  • Isolation
  • Durability

MySQL 매뉴얼은 ACID 모델을 업무 데이터에 중요한 신뢰성 측면을 강조하는 설계 원칙의 집합으로 설명한다. MySQL: InnoDB and the ACID Model 용어보다 각 속성이 실제 운영 문제와 어떻게 연결되는지가 더 쓸모 있다.


Atomicity

전부 성공하거나 전부 실패해야 한다는 뜻이다.

예를 들어 계좌 이체에서 출금만 되고 입금이 안 되면 안 된다. 중간에 실패하면 전체를 되돌릴 수 있어야 한다.


Consistency

트랜잭션 전후로 데이터가 규칙을 만족해야 한다는 뜻이다.

  • 재고는 음수가 되면 안 됨
  • 외래키 제약이 깨지면 안 됨
  • 비즈니스 불변식이 유지돼야 함

여기서 말하는 일관성은 단순히 DB 제약뿐 아니라 애플리케이션 수준 규칙까지 포함해 생각해야 한다.


Isolation

동시에 실행되는 트랜잭션이 서로 간섭하지 않고, 충분히 독립적으로 보이도록 만드는 것이다.

이 속성이 실제로는 가장 어렵다. 읽기 일관성, 락, MVCC, 데드락, 팬텀 리드 같은 문제들이 모두 여기에 연결된다.


Durability

커밋된 결과는 장애가 나더라도 보존되어야 한다는 뜻이다.

이를 위해 DB는 redo log, fsync, checkpoint, 복구 메커니즘 등을 사용한다. MySQL 매뉴얼은 InnoDB의 durability 관련 요소로 doublewrite buffer, innodb_flush_log_at_trx_commit, 운영체제의 fsync() 지원 등을 나열한다.


실무에서 중요한 점

ACID는 네 가지를 비용 없이 주지 않는다. DB는 내부적으로 로그, 락, MVCC, 버퍼 관리 등 여러 비용을 감수하면서 이 속성들을 만족시키려 한다.

그래서 ACID는 개념이면서 동시에 성능과 동시성의 trade-off 문제다.


정리

ACID를 시험용 정의로 끝내지 말고, 롤백, 락, MVCC, redo/undo log, 복구 메커니즘처럼 각 속성을 떠받치는 구현과 짝지어 두면 운영 중 문제를 만났을 때 어디를 볼지 정하기 쉽다.

참고한 자료외부 출처 1

외부 출처

데이터베이스 내부와 트랜잭션
이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다