데이터베이스에서 ACID, 데이터베이스의 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어입니다. (https://ko.wikipedia.org/wiki/ACID)

 

그럼 먼저, 트랜잭션(Transaction)이란 무엇일까요?

 

1. 트랜잭션이란?

데이터베이스에서 트랜잭션이란, 데이터에 대한 하나의 논리적 실행단계 말합니다.

말이 어렵죠?

예를 들어서 계좌이체를 한다고 가정해 봅시다.

계좌이체를 하기 위해서는 내부적으로 여러 단계를 거쳐야 합니다.

단계들을 간단하게 요약하면, [송신자 계좌 금액 감소], [수신자 계좌 금액 증가] 말합니다.

이렇게 단계에 대한 데이터를 처리하는 논리적 행위? 트랜잭션이라고 합니다.

그러면 [송신자 계좌 금액 감소] [수신자 계좌 금액 증가] 어느 하나만 이루어져서는 안됩니다.

그렇게 되면 데이터 정합성이 맞지 않겠죠? 나는 돈을 보냈는데 상대방은 받지 못했다고 하는 상황이 발생할 있습니다. 돈이 중간에 증발 해버리는 거죠.

 

때문에 트랜잭션은 ACID 성질을 만족해야 합니다.

 

2. ACID?

A,C,I,D 각각 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성) 나타내는데요,

각각의 성질에 대해 한번 알아보겠습니다.

(1) Atomicity(원자성)

트랜잭션과 관련된 세분화된 작업들이 일부분만 실행되는 것을 방지하는 성질입니다.

예를 들어 계좌이체를 , [송신자 계좌 금액 감소] 실행하고 끝나는 것을 방지하자는 말입니다.

 

(2) Consistency(일관성)

트랜잭션이 실행을 성공적으로 완료되었을 , 이전의 상태와 결과의 상태가 항상 안정된 상태로 있어야 한다는 것입니다.

예를 들어 계좌이체를 하기 전에, 은행에서 가지고 있던 보유 금액 총액이 100만원이면, 동행으로 계좌이체를 하고 나서도 보유 금액 총액이 100만원이어야 한다는 거죠.

다른 예로, 나의 계좌 잔고가 10,000원이고, 친구 계좌 잔고가 20,000원일 , 내가 5,000원을 친구 계좌에 계좌이체 하고 나서도, 계좌의 잔고와 친구 계좌 잔고의 합은 30,000원으로 동일해야 한다는 거예요.

 

(3) Isolation(고립성)

트랜잭션을 수행하는 동안에는 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 하는 성질입니다.

예를 들어 계좌 잔고에 10,000원이 있고, 친구에게 8,000원을 보내는 계좌이체 작업을 하는 도중이었습니다.

트랜잭션을 처리하는 도중에 계좌 잔고 5,000원을 부모님에게 보내는 작업을 하면 이전에 친구에게 보내려던 8,000원은 어떻게 될까요?

이러한 상황을 방지해야 한다는 성질이 고립성입니다.

 

(4) Durability(지속성)

성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다는 성질입니다.

, 시스템에 문제가 발생하더라도 트랜잭션의 결과는 유지되어야 한다는 거죠.

보통 DBMS에서 이러한 역할은 트랜잭션 로그가 해줍니다.

트랜잭션의 결과를 DB 반영하기 전에 트랜잭션 로그에 먼저 저장을 하는 형태로 말이죠.

 

이렇게 데이터베이스에서 말하는 ACID라는 성질에 대해 간단히 알아보았습니다.

 

참고자료:

https://ko.wikipedia.org/wiki/ACID

+ Recent posts