전체 목록
데이터베이스Medium#208

트랜잭션의 ACID 속성을 설명해주세요.

#데이터베이스#Transaction#ACID#정합성

답변 포인트

원자성, 일관성, 격리성, 지속성를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

ACID는 원자성, 일관성, 격리성, 지속성을 의미합니다. 트랜잭션이 모두 성공하거나 실패하고, 무결성을 지키며, 동시 실행과 장애 상황에서도 신뢰성을 유지하게 합니다.

ACID는 트랜잭션이 신뢰성 있게 처리되기 위한 네 가지 속성입니다. 은행 이체처럼 여러 SQL이 하나의 논리 작업을 이룰 때 중간 상태가 노출되거나 일부만 반영되면 안 됩니다.

Atomicity: 원자성

트랜잭션 안의 작업은 모두 성공하거나 모두 실패해야 합니다.

SQL
BEGIN;
UPDATE accounts SET balance = balance - 10000 WHERE id = 1;
UPDATE accounts SET balance = balance + 10000 WHERE id = 2;
COMMIT; -- 둘 다 성공
-- 오류가 나면 ROLLBACK으로 둘 다 취소

첫 번째 차감만 성공하고 두 번째 입금이 실패하면 돈이 사라집니다. 원자성은 이런 부분 반영을 막습니다.

Consistency: 일관성

트랜잭션 전후에 데이터가 정의된 규칙을 만족해야 합니다. 제약 조건, 외래 키, unique key, 애플리케이션 불변식이 여기에 포함됩니다.

Isolation: 격리성

동시에 실행되는 트랜잭션이 서로의 중간 결과를 함부로 보지 않도록 합니다. 격리 수준에 따라 dirty read, non-repeatable read, phantom read 같은 현상을 허용하거나 막습니다.

Durability: 지속성

커밋된 데이터는 장애가 나도 보존되어야 합니다. DB는 WAL/redo log, fsync, replication 등을 사용해 커밋 결과를 복구 가능하게 만듭니다.

실무에서의 균형

ACID는 공짜가 아닙니다. 강한 격리는 lock 경합을 늘릴 수 있고, 강한 durability 설정은 쓰기 지연을 늘릴 수 있습니다. 그래서 결제, 재고 차감처럼 정확성이 중요한 영역과 로그/분석처럼 eventual consistency를 허용할 수 있는 영역을 구분해야 합니다.

면접 답변 포인트

ACID를 각각 풀어 설명한 뒤, “트랜잭션은 여러 작업을 하나의 신뢰 가능한 단위로 묶지만 격리 수준과 성능 사이의 trade-off가 있다”는 점까지 덧붙이면 좋습니다.

관련 질문

같은 카테고리/태그 기준