ACID 원칙이란?
Atomicity, Consistency, Isolation, Durability의 약자로 데이터베이스 관리 시스템(DBMS)에서 트랜잭션을 안전하게 수행하기 위한 속성이다.
Transaction
트랜젝션은 하나의 단위로 수행되는 쿼리의 집합이다.
작업이 하나라도 실패하면 트랜젝션도 실패가 되며, 모든 작업이 성공해야 트랜젝션이 성공한다. 데이터베이스 트랜젝션은 ACID라는 특성을 가지고 있다.
Atomicity (원자성)
트랜잭션 내의 모든 연산은 전부 성공하거나 전부 실패해야 하며 부분적으로 실행 되어서는 안된다.
트랜잭션이 중간에 실패하면 변경 사항은 모두 롤백 되어야 한다.
사용자 A가 사용자 B에게 1000원을 입금할 때
1. A 계좌에서 1000원을 삭제
2. B의 계좌에 1000원을 삽입
두개의 작업 중 하나만 발생해서는 안된다
Consistency (일관성)
하나의 트랜잭션 이후 데이터 베이스의 상태가 이전과 같이 유효해야 한다.
데이터베이스의 제약, 규칙이 항상 유지되어야 한다.
A 계좌에는 1000원 이상이 있어야 B에게 입금할 수 있음
계좌는 규칙에 따라 마이너스 값을 가질 수 없다
따라서 일관성이 보장 된다면 트랜잭션이 완료된 이후에도
모든 계좌의 잔액은 음수가 아니다
PICTURE 테이블의 ID가 1인 행의 LIKES가 4이고
PICTURE_LIKES 테이블의 PICTURE_ID가 1인 행의 갯수가 2개라면
서로의 페어가 맞지 않아 일관성이 없는 데이터가 된다
Isolation (고립성)
동시에 여러 트랜잭션이 실행 되더라도 각 트랜잭션은 서로에게 영향을 주지 않아야 한다.
한 트랜젝션이 완료되기 전까지는 다른 트랜잭션에서 그 결과를 볼 수 없다. 즉 동시에 여러 개의 트랜잭션들이 수행될 때 각 트랜젝션은 격리되어 있어 연속으로 실행한 것과 같은 결과를 낸다.
A가 B에게 1000원을 입금하는 동안 C가 A의 계좌에 입금할 수 있다
이때 C의 입금 트랜잭션은 A와 B간의 입금 트랜잭션에 영향을 주지 않아야 한다
A가 1000원의 잔고가 있는 통장에서 B와 C에게 각각 600원을 입금하는
트랜잭션을 수행하다고 가정할 때 B의 계좌에 송금한 뒤
C의 계좌에 송금하는 것과 같은 결과가 나타나야 한다
Durability (지속성)
트랜잭션이 성공적으로 완료 되면 그 기록(로그)은 영구적으로 데이터베이스에 저장 되어야 한다.
시스템이 실패 하더라도 트랜잭션의 기록(로그)은 사라져서는 안된다.
A가 B에게 성공적으로 1000원을 입금 했으면 은행의 DB에 오류가 발생해 종료 되어도
입금 내역은 기록으로 남아야 한다
입금을 로그로 기록하기 이전에 시스템에 장애가 발생하여 종료 된다면 해당 입금은
실패하고 A와 B의 계좌는 입금 이전의 상태로 돌아간다
'Computer science > Database' 카테고리의 다른 글
MongoDB의 migration과 cursor (0) | 2023.12.14 |
---|---|
이상현상과 트랜잭션의 격리 수준 (0) | 2023.09.12 |
데이터베이스의 원리와 응용 8 (0) | 2022.04.09 |
데이터베이스의 원리와 응용 7 (0) | 2022.04.09 |
데이터베이스의 원리와 응용 6 (0) | 2022.04.09 |