데이터베이스 트랜잭션이 지켜야 할 4가지 약속을 ’은행 송금’ 예로 풀어보기
글자 | 긴 이름 | 은행 송금에 빗댄 쉬운 설명 |
---|---|---|
A | Atomicity (원자성) | “올‑오어‑낫싱” 내 통장에서 −10만 원, 친구 통장에 +10만 원이 둘 다 성공하거나, 둘 다 안 되거나. 중간에 컴퓨터가 꺼져도 ‘−10만만 되고 +10만은 안 된’ 상태는 없다. |
C | Consistency (일관성) | “규칙 지키기” 이체 전·후에도 잔액 ≥ 0 같은 은행 규칙이 항상 만족. 규칙을 깨는 결과는 애초에 커밋되지 않는다. |
I | Isolation (격리성) | “각자 방에서 작업” 동시에 여러 사람이 이체해도 내 트랜잭션은 마치 혼자 실행한 것처럼 보인다. 진행 중인 값(임시 잔고)을 다른 사람에게 보여주지 않는다. |
D | Durability (지속성) | “영수증이 영원히 남음” 이체 ‘완료’ 메시지를 받았다면 서버가 꺼져도 로그·디스크에 남아 있어 나중에 복구된다. |
왜 중요할까?
- Atomicity 덕분에 중간 실패로 인한 ‘돈 증발’이 없다.
- Consistency 와 Isolation 덕분에 여러 사람이 동시에 써도 규칙이 깨지지 않는다.
- Durability 덕분에 전원 장애가 나도 완료된 거래 가 되살아난다.
참고: Jetpack Compose에서도 “멱등성(idempotent) → 같은 입력엔 같은 결과가 보장” 이라는 비슷한 안정성 원칙이 중요합니다. 이는 데이터베이스의 원자·일관성 개념과 맞닿아 있습니다.