ATM 이체
ATM 에서 checking 에서 savings 로 $500 옮겨. 기계가 checking 에서 차감. 그 순간 정전. ACID 없으면 $500 이 반쯤 적용된 트랜잭션에 사라져 — 한 계좌에서 빠지고, 다른 계좌엔 안 들어옴. ACID 가 그게 일어날 수 없다는 네 글자짜리 약속이야.
Atomicity — 전부 아니면 전무
트랜잭션은 나눌 수 없는 한 단위. 어느 단계든 실패하면 모든 단계가 시작 안 한 것처럼 롤백. ATM 의 일은 'checking 차감' 이랑 'savings 추가' 를 BEGIN ... COMMIT 안에 감싸는 거. 나머지는 PostgreSQL 이 보장.
Consistency — 룰은 항상 유지
제약 (NOT NULL, CHECK, FK, unique 인덱스) 이 매 commit 에서 강제. 어떤 트랜잭션도 정의된 룰 어기는 상태로 DB 를 두지 못 함. '잔액 ≥ 0' CHECK 있으면 어떤 트랜잭션도 그걸 못 빠져나가.
Isolation — 동시 트랜잭션이 서로 간섭 안 함
두 트랜잭션이 동시에 돌아도 차례로 돌은 것처럼 동작. PostgreSQL 은 MVCC (multi-version concurrency control) 로 — reader 가 writer 안 막고, writer 가 reader 안 막고, 각 트랜잭션이 일관된 스냅샷을 봄.
Durability — commit = 영원히 저장
COMMIT 이 돌아오면 데이터는 디스크에 있음. PostgreSQL 의 WAL (write-ahead log) 가 COMMIT ack 전에 flush. 1ms 후 서버 크래시 나도 recovery 가 WAL 재생, commit 한 데이터 무사.