Kim Seogyu
Database

ACID

ACID 네 가지 특성과 실무에서 흔히 놓치는 지점을 간결하게 정리합니다.

Published 2025년 12월 27일2 min read207 words

ACID

ACID 정의

  • Atomicity: 트랜잭션은 전부 성공하거나 전부 실패해야 합니다.
  • Consistency: 트랜잭션 전후로 제약조건과 데이터 규칙이 유지되어야 합니다.
  • Isolation: 동시에 실행되는 트랜잭션 간 간섭이 제어되어야 합니다.
  • Durability: 커밋된 결과는 장애 이후에도 보존되어야 합니다.

ACID를 실제로 깨뜨리는 원인

  • 애플리케이션에서 트랜잭션 경계를 너무 넓게 잡아 락 경합 증가.
  • 격리수준 이해 없이 기본값 사용 후 팬텀 리드/갱신 손실 발생.
  • DB 커밋 전에 외부 시스템(메시지 발행, 캐시 갱신)부터 수행.
  • 장애 복구 절차가 없어 durability를 백업에만 의존.

격리수준 선택 기준(요약)

  • READ COMMITTED: 일반 OLTP 기본 선택.
  • REPEATABLE READ: 동일 트랜잭션 내 조회 일관성이 중요할 때.
  • SERIALIZABLE: 충돌 허용이 매우 낮고 처리량 희생 가능할 때.

분산 환경에서의 확장

단일 DB 트랜잭션으로 끝나지 않으면 보통 두 가지를 고려합니다.

  • 2PC/XA: 강한 일관성 우선, 운영 복잡도와 지연 증가.
  • Saga: 보상 트랜잭션 기반, 최종 일관성 모델.

정답은 하나가 아니라, 도메인의 실패 허용치에 따라 선택합니다.

실무 체크포인트

  • 트랜잭션 안에서는 DB 변경 외 작업을 최소화합니다.
  • 교착상태 재시도 정책(횟수/백오프)을 명시합니다.
  • "커밋 후 이벤트 발행" 패턴(outbox 등)으로 정합성을 맞춥니다.
  • 백업 복구 리허설 없이는 durability를 만족했다고 보기 어렵습니다.

요약

ACID는 이론이 아니라 운영 계약입니다. 트랜잭션 경계, 격리수준, 장애 복구 시나리오를 코드와 문서로 함께 관리해야 실제 품질이 유지됩니다.

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim