← 아티클 목록

ACID 트랜잭션이란? 4원칙 쉽게 이해하기

2028-04-24#database#트랜잭션#ACID

"계좌 이체 중간에 서버가 죽으면 돈은 어떻게 되나요?" 데이터베이스를 처음 배우면 이런 걱정이 듭니다. ACID는 바로 그 걱정에 대한 답입니다. 여러 작업을 하나의 트랜잭션으로 묶어, 중간에 무슨 일이 생겨도 데이터가 깨지지 않도록 보장하는 4가지 약속이 ACID입니다. 단어가 어려워 보이지만 송금 한 건으로 전부 설명됩니다.

ACID 4원칙 한눈에

원칙영문핵심송금 예시
원자성Atomicity전부 성공 아니면 전부 취소출금만 되고 입금 실패면 둘 다 롤백
일관성Consistency규칙을 어기는 상태로 못 만든다잔액이 음수가 되면 거부
격리성Isolation동시 실행이 서로 간섭 안 함두 이체가 같은 잔액을 동시에 못 건드림
지속성Durability커밋되면 영구히 남는다완료 후 정전돼도 결과 유지

송금으로 보는 4원칙

A가 B에게 1만 원을 보내는 트랜잭션은 두 작업으로 이뤄집니다.

SQL
BEGIN;
UPDATE account SET balance = balance - 10000 WHERE id = 'A';
UPDATE account SET balance = balance + 10000 WHERE id = 'B';
COMMIT;

원자성은 이 두 UPDATE를 하나로 묶습니다. A에서 빠졌는데 B에 안 들어가는 중간 상태는 허용되지 않습니다. 둘 중 하나라도 실패하면 ROLLBACK으로 통째로 되돌립니다.

일관성은 "잔액은 0 이상"처럼 미리 정한 규칙을 트랜잭션 전후로 항상 지키게 합니다. A의 잔액이 1만 원보다 적으면 제약 조건에 걸려 거래 자체가 거부됩니다.

격리성은 동시성 문제를 막습니다. A의 잔액이 5천 원인데 두 이체가 동시에 "5천 원 있으니 OK"라고 판단해 둘 다 빠져나가는 일(-5000 발생)을 격리 수준으로 막습니다.

지속성COMMIT이 끝난 거래는 디스크에 안전하게 기록되어, 직후 서버가 꺼져도 사라지지 않음을 보장합니다.

격리성은 단계가 있다

격리성은 비용과 안전성의 트레이드오프라 4단계로 나뉩니다.

격리 수준막는 문제특징
READ UNCOMMITTED거의 안 막음커밋 안 된 값까지 읽힘(더티 리드)
READ COMMITTED더티 리드 차단많은 DB의 기본값
REPEATABLE READ반복 읽기 보장MySQL InnoDB 기본값
SERIALIZABLE모든 충돌 차단가장 안전하나 가장 느림

높을수록 안전하지만 동시 처리량이 줄어듭니다. 그래서 대부분은 READ COMMITTEDREPEATABLE READ를 씁니다.

요점 정리

  • ACID는 트랜잭션이 중간 실패·동시 접근·장애에도 데이터를 지키는 4가지 약속.
  • 원자성=전부 아니면 전무, 일관성=규칙 유지, 격리성=동시 간섭 차단, 지속성=커밋 후 영구 보존.
  • 격리성은 단계가 있어 안전성과 성능을 상황에 맞게 고른다.

BEGIN·COMMIT·ROLLBACK을 직접 실행하고 격리 수준에 따라 동시 트랜잭션이 어떻게 달라지는지 확인하는 실습은 데이터베이스 트랙에서 회원가입 없이 무료로 할 수 있습니다.