1. ACID란?
원자성 (Atomicity), 일관성 (Consistency), 격리성 (Isolation), 지속성 (Durability)의 약자로,
데이터베이스의 트랜잭션이 안전하고 일관되게 수행됨을 보장하는 속성입니다.
🤔 트랜잭션(Transaction)이란?
트랜잭션은 하나의 논리적인 작업 단위를 의미하며,
작업 수행시 모두 성공하거나 모두 실패해야 합니다.
또한 트랜잭션은 ACID를 만족해야 데이터의 무결성과 신뢰성을 보장할 수 있습니다.
2. ACID의 속성
(1) 원자성 (Atomicity)
✅ 원자성이란?
트랜잭션 내의 모든 작업이 전부 성공하거나 실패해야 한다는 성질입니다.
즉 트랜잭션을 더이상 나눌 수 없는 하나의 단위로 보고,
실행 중간에 어떤 작업이 실패하면, 전체 트랜잭션이 수행되지 않은 것처럼 처리합니다.
📦 예시로 이해하기
아래와 같은 은행 계좌 이체 트랜잭션이 실행될 때,
A계좌에 5000원 출금
B계좌에 5000원 입금
[문제 발생]
A계좌에서 돈이 빠지고 B계좌에 돈이 입금 되지 않았다면?
반대로 A계좌에서 돈이 빠지지 않고, B계좌에 돈이 입금 되었다면?
이처럼 둘 중 하나의 작업이 실패하면 전체 작업을 취소해야합니다.
이러한 성질을 원자성이라 합니다.
(2) 일관성 (Consistency)
✅ 일관성이란?
트랜잭션이 실행되기 전과 후의 데이터 상태가 항상 데이터베이스의 규칙(제약조건)을 만족해야하는 성질입니다.
즉, 데이터는 항상 유효한 상태여야 하며, 트랜잭션이 실행된 후에도 정합성이 깨지면 안됩니다.
🤔 정합성(Integrity)이란?
정합성은 데이터 간에 모순 없이 논리적으로 일관된 상태를 의미합니다.
일관성보다 더 넓은 개념으로,
여러 데이터 간의 관계가 논리적으로 맞아야한다는 것을 뜻합니다.
예시 ) 존재하지 않는 고객 ID로 거래 내역이 등록된 경우 → 정합성 위배
📦 예시로 이해하기
데이터베이스에 아래와 같은 제약조건이 존재하고,
잔액은 음수가 될 수 없다.
재고 수량은 0이상이어야 한다.
상품 구매 트랜잭션이 실행될 때,
사용자 계좌에서 결제 금액 차감
상품 재고에서 수량 1 감소
[문제 상황]
계좌 잔액이 음수가 된다면?
상품 재고가 -1이 된다면?
위와 같은 경우에서 DB의 정합성이 깨진 것이므로, 트랜잭션은 실패하고 롤백되어야합니다.
이러한 성질을 일관성이라고 합니다.
(3) 격리성 (Isolation)
✅ 격리성이란?
트랜잭션이 동시에 여러 개 실행되더라도,
각 트랜잭션은 독립적으로 수행되어야 하는 성질입니다.
즉, 다른 트랜잭션의 작업에 영향을 받지 않아야 하며,
결과적으로는 순차적으로 실행한 것과 같은 일관된 결과가 나와야 합니다.
🤔 왜 중요할까?
하나의 트랜잭션이 끝나지 않았는데,
다른 트랜잭션이 그 데이터를 읽거나 수정을 한다면
데이터 충돌이나 정합성 오류가 발생할 수 있습니다.
📦 예시로 이해하기
상품 재고가 1개 남아 았는 상태에서,
2명의 사용자가 동시에 상품을 주문한다고 가정할 때,
사용자 A의 트랜잭션 : 재고 수량 확인 → 재고 = 1 → 주문요청
사용자 B의 트랜잭션 : 재고 수량 확인 → 재고 = 1 → 주문요청
[문제 상황]
두 트랜잭션이 거의 동시에 실행되면,
서로 같은 재고 1을 보고 동시에 주문이 들어갑니다.
이후 재고는 -1이 되고, 정합성이 깨진 상태가 됩니다.
이러한 상황을 방지하기 위해 격리성이 필요하며,
DB에서는 이를 위해 트랜잭션 격리 수준을 설정하여 트랜잭션이 독립적으로 수행되도록 합니다.
이러한 성질을 격리성이라고 합니다.
(4) 지속성 (Durability)
✅ 지속성이란?
트랜잭션이 성공적으로 완료되었다면,
그 결과는 시스템 오류나 장애가 발생하더라도 영구적으로 유지되어야 한다는 성질입니다.
즉, 트랜잭션이 커밋된 이후에는 서버에 장애가 발생하더라도
해당 변경 사항은 절대 사라지지 않아야 합니다.
📦 예시로 이해하기
사용자가 결제를 완료 했는데,
서버가 다운되면서 결제 정보가 날아간다면?
이는 신뢰할 수 없는 시스템이 되고, 지속성 보장에 실패한 상태입니다.
이러한 문제를 방지하기 위해서
트랜잭션이 커밋되면 디스크에 로그나 데이터 파일로 기록하고,
그 기록을 바탕으로 복구할 수 있도록 합니다.
3. 요약
ACID는 트랜잭션이 안정되고 일관적이게 수행된다는 것을 보장하기 위한 성질을 의미합니다.
속성 |
설명 | |
Atomic | 원자성 | 트랜잭션의 모든 작업이 수행되거나 수행되지 않아야 함 |
Consistency | 일관성 | 트랜잭션 전후로 데이터가 항상 유효하고, DB 제약 조건을 만족해야 함 |
Isolation | 격리성 | 동시에 실행되는 트랜잭션이 서로 영향을 주지 않도록 분리해야 함 |
Durability | 지속성 | 트랜잭션이 커밋되면 시스템 장애가 발생해도 결과는 DB에 반영되어 있어야 함 |