ACID는 데이터베이스 트랜잭션이 안전하고 신뢰할 수 있도록 보장하기 위한 4가지 기본 속성입니다. 이 속성들은 데이터베이스가 트랜잭션을 처리하는 동안 데이터의 무결성을 보장합니다.
A: Atomicity (원자성)
C: Consistency (일관성)
I: Isolation (격리성)
D: Durability (지속성)
📢 트랜젝션?
논리적인 작업 단위 (a single logical unit of work),
논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나누어질 수 없도록 만든 것
트랜잭션에 속한 각각의 문(데이터를 읽기, 쓰기, 업데이트 또는 삭제하기 위함)을 하나의 단위로 취급합니다. 즉, 트랜잭션 내의 모든 작업이 "전부 성공"하거나 "전부 실패"해야 합니다. 중간에 일부 작업만 성공하고 나머지가 실패하는 경우를 허용하지 않습니다.
ex> 은행 계좌 이체에서 계좌 A에서 100원을 인출하고 계좌 B에 100원을 입금할때
두 작업이 모두 성공해야 트랜잭션이 완료되고 하나라도 실패하면 이전 작업이 취소(롤백)되어 데이터베이스가 원래 상태로 복구됩니다.
트랜잭션이 실행되기 전과 후에 데이터베이스는 항상 유효한 상태를 유지해야 합니다. 즉, 데이터베이스의 모든 규칙(제약 조건, 관계 등)이 유지되어야 합니다.
ex> 계좌 A와 계좌 B의 잔액 합계가 1000원이라면, 이체 후에도 잔액 합계는 여전히 1000원이어야 합니다.
트랜잭션 작업 수행 중에는 다른 트랜잭션에 영향을 주어서도 안되고, 다른 트랜잭션들에 의해 간섭을 받아서도 안 된다는 것을 의미합니다.
여러 트랜잭션이 동시에 실행되더라도, 각 트랜잭션은 독립적으로 실행된 것처럼 보장됩니다.
하나의 트랜잭션이 완료되기 전까지 다른 트랜잭션이 그 작업에 영향을 미치지 못하도록 합니다.
트랜잭션이 완전히 수행되거나 완전히 수행되지 않은 상태를 외부에서 참조할 수는 있지만, 트랜잭션의 중간 과정이나 중간 결과를 볼 수 없도록 하는 특징이다.
READ UNCOMMITTED: 트랜잭션이 커밋되지 않은 데이터도 읽을 수 있습니다.
READ COMMITTED: 커밋된 데이터만 읽을 수 있습니다.
REPEATABLE READ: 같은 트랜잭션에서 반복적으로 조회해도 동일한 데이터를 반환합니다.
SERIALIZABLE: 트랜잭션이 직렬적으로 실행되는 것처럼 보장합니다.
ex> 사용자 A가 상품 재고를 감소시키는 동안, 사용자 B는 동일한 상품의 재고를 확인, 사용자 B가 확인하는 재고는 사용자 A의 작업이 완료된 후의 데이터만 보거나, 사용자 A의 작업이 시작되기 전의 데이터만 볼 수 있습니다.
트랜잭션이 완료되면 결과는 데이터베이스에 영구적으로 저장되며, 이후 시스템에 어떠한 문제가 생기더라도 데이터는 손상되지 않는 것을 의미합니다. 트랜잭션이 성공적으로 커밋된 후, 해당 트랜잭션에 의해 생성 또는 수정된 데이터가 어떠한 상황에서도 보존되는 특징입니다.
트랜잭션이 성공적으로 완료된 후에는 어떠한 시스템 장애(예: 서버 다운, 전원 차단)가 발생하더라도 데이터가 손실되지 않아야 함을 의미합니다.
데이터베이스는 데이터를 디스크에 영구적으로 저장하거나 복구 메커니즘을 통해 데이터를 유지합니다.
사용자 A가 계좌 이체를 완료하고 "성공" 메시지를 받았다면, 그 결과는 전원 장애나 시스템 다운 상황에서도 유지되어야 합니다.
ACID 속성들은 데이터 무결성과 신뢰성을 보장하기 위해 함께 동작합니다.
원자성(Atomicity)은 작업의 전부 또는 전무를 보장
일관성(Consistency)은 데이터 규칙을 보장
격리성(Isolation)은 여러 트랜잭션 간 간섭을 방지
지속성(Durability)은 성공적으로 완료된 작업의 결과를 영구히 저장
https://www.databricks.com/kr/glossary/acid-transactions
https://velog.io/@jazzcafe12/ACID%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80