ACID란?

ACID 는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. ACID는 다음과 같다

1) Atomicity
2) Consistency
3) Isolation
4) Durability

1. Atomicity

원자성이라는 뜻을 갖는다.
A 계좌에서 B 계좌로 10,000원을 송금한다고 명령했을 때, 문제가 발생하여 A 계좌에서는 돈이 빠져나갔는데 B 계좌에 돈이 들어오지 않는 상황이 발생하면 원자성을 위반한다.
요청한 모든 것이 처리되거나(All) 문제가 발생하면 전부 안되게(Nothing) 해야 한다.
명령의 일부만 처리되서는 안된다는 것이다.

2. Consistency

일관성이라는 뜻을 갖는다.
사용자의 잔액을 저장하는 DB에 '잔액' 속성은 INT(정수)형으로만 저장된다고 가정하자. 이 때 어떤 데이터가 추가되거나, 삭제되거나, 수정되더라도 '잔액' 속성의 어떠한 데이터도 INT가 아닐수는 없다.(VARCHAR, Boolean 등..) 즉, DB에 지정해놓은 설정에 맞게 언제나 일관성을 유지해야한다.

3. Isolation

고립성이라는 뜻을 갖는다.
A 라는 계좌에는 10,000이 존재한다. 이 때, 2건의 자동이체가 거의 동시에 발생한다고 가정하자. 첫 번째 건은 계좌에서 5,000원을 이체하고, 두 번째 건은 계좌에서 8,000원을 이체한다. 두 건의 자동이체에 대한 결과는 다음의 케이스 중 하나가 될 수 있다.

1) 첫 번째 건이 먼저 실행되고, 두 번째 건이 연달아 실행되어 잔액이 2,000이 남는다
2) 두 번째 건이 먼저 실행되고, 첫 번째 건이 연달아 실행되어 잔액이 5,000이 남는다
3) 첫 번째 건이 먼저 완료되고, 두 번째 건은 잔액이 부족하여 처리가 되지 않는다
4) 두 번째 건이 먼저 완료되고, 첫 번째 건은 잔액이 부족하여 처리가 되지 않는다

위의 케이스에서 1,2는 고립성이 위반되어 문제가 발생한 것이다. 첫 번째 건과 두 번째 건 모두 이체를 진행하기 전 DB로부터 잔액을 확인할 것이다. 아직 아무런 이체가 진행되지 않았기때문에 첫 번째 건과 두 번째 건 모두 잔액이 10,000원이라는 결과를 받게 된다. 이 상태에서 각각 이체를 진행하게 되면 잔액이 부족해야 하는 정상적인 결과가 발생하지 않는 것이다.
고립성을 잘 갖추기 위해서는 트랜잭션 작업 수행 중에는 다른 트랜잭션에 영향을 주어서는 안 된다.

4. Durability

지속성이라는 뜻을 갖는다. 성공적으로 수행된 트랜잭션은 DB에 영원히 반영되어야 하는 것을 말한다.

profile
숲과 비, 눈을 좋아하고 스위스를 가는게 꿈입니다

0개의 댓글