IT/DB

[DB] 데이터베이스 트랜잭션의 4가지 특징(ACID)

코딩하는 너구리 2022. 10. 6. 00:23
반응형

 

서버 개발자로서 DBMS를 사용할 때 가장 중요한 관심사 중의 하나는 데이터의 정합성 유지가 아닐까 생각합니다. DBMS가 일관된 결과를 생성하고 정합성을 유지하기 위해 트랜잭션을 이용해 작업을 처리하곤 합니다.

이번 글에서는 데이터베이스 트랜잭션의 개념과 4가지의 특성에 대해 알아보도록 하겠습니다.

 

 

트랜잭션

트랜잭션은 데이터베이스의 내용을 접근하고 수정하는 논리적 작업 단위입니다.

트랜잭션은 논리적인 작업들을 모두 완벽하게 처리하거나, 처리하지 못했을 경우에는 진행된 모든 작업들을 Rollback하고 원상태로 복구하여 작업의 일부만 적용되는 상황이 발생하지 않도록 하는 기능입니다. 

 

데이터베이스의 일관성을 유지하기 위해 트랜잭션 전후에 특정 속성을 따르는데, 이를 ACID 속성이라고 합니다.

ACID 속성

ACID 속성원자성, 일관성, 독립성, 지속성을 나타내는데 하나씩 살펴보도록 하겠습니다.


원자성 (Atomicity)

원자성은 트랜잭션을 구성하는 작업들이 모두 정상적으로 실행되거나 전혀 실행되지 않음을 의미합니다.
트랜잭션이 부분적으로 발생하지 않습니다. 즉 중간은 없습니다. 
원자성은 "All or nothing rule" 이라고도 알려져 있습니다.

 

각각의 특성을 설명할 때 이해를 돕기 위해 하나의 예시를 들어 확인해보겠습니다.

X의 계좌에서 Y의 계좌로 100원을 이체하는 과정입니다.

트랜잭션 예시

- Transaction TT1 작업(100원 송금)T2 작업(100원 입금)으로 구성되어 있습니다.

 

이때 트랜잭션 T1 작업이 완료되고 T2 작업이 완료되기 전에 실패하면

X의 계좌에서는 100원이 송금되고 Y의 계좌에는 100원이 입금되지 않은 상태여야 하지만 트랜잭션을 사용한다면

Transaction T의 작업이 롤백되어 모두 실행되지 않습니다.


일관성 (Consistency)

일관성은 데이터베이스의 정확성을 나타냅니다.
트랜잭션 전후에 항상 무결성 제약 조건을 유지함을 의미합니다.

 

위의 예시에서는 

TransactionT가 발생하기 이전의 상태는 X계좌에 500원이 있고 Y 계좌에 200원이 있어 총 700원이 존재했습니다.

TransactionT 작업이 진행된 이후에도 거래 전후의 총액을 유지해야 합니다.

트랜잭션이 성공해서 X계좌에 400원, Y계좌에 300원이 존재하거나, 트랜잭션이 실패해서 X계좌에 500원, Y계좌에 200원인 상태로 일관된 총액 700원을 유지해야 합니다.


독립성 (Isolation)

독립성은 트랜잭션간에 간섭 없이 서로 독립적으로 수행됨을 의미합니다.
트랜잭션 수행 중 다른 트랜잭션 작업이 끼어들지 못하도록 보장하는 것을 말합니다.

트랜잭션간에 간섭이 일어나면 데이터 정합성 및 일관성 등 여러 문제가 발생할 수 있습니다. 

 


지속성 (Durability)

지속성은 트랜잭션 실행이 완료되면 데이터베이스에 대한 업데이트 및 수정 사항이 영구적으로 반영됨을 의미합니다.
시스템 오류가 발생하더라도 해당 기록은 영구적이어야 합니다.

이렇게 RDBMS에서 트랜잭션의 4가지 속성인 원자성, 일관성, 독립성, 지속성에 대해 살펴보았습니다.

 

 

그냥 글을 마치기에는 조금 아쉬워서 DBMS 트랜잭션 상태에 대해서도 조금 더 찾아보았습니다.

아래 그림은 트랜잭션이 동작하는 동안 진행되는 상태를 나타냅니다.

 

Transaction 상태

 


활성 상태(Active State) : 트랜잭션 명령이 실행중일 때 트랜잭션은 활성 상태에 있습니다. 모든 읽기 및 쓰기 작업이 오류 없이 수행되면 부분적 커밋 상태가 됩니다. 만약 명령이 실패하면 실패 상태가 됩니다.

 

부분적 커밋 상태(Partially Committed State) : 모든 읽기 및 쓰기 작업이 완료된 후 변경사항이 데이터베이스에 영구적으로 적용되면 커밋된 상태로 변경되고 실패할 경우 실패 상태가 됩니다.

 

실패 상태(Failed State) : 트랜잭션 명령이 실패하면 실패 상태가 되거나 데이터베이스의 데이터를 영구적으로 변경하는 데 실패한 경우 실패 상태가 됩니다.

 

중단 상태(Abort State) : 오류가 발생한 후 트랜잭션은 실패 상태에서 중단 상태로 바뀌고 변경 사항이 삭제되거나 롤백됩니다.

 

커밋 상태(Committed State) : 데이터베이스에서 변경 사항이 영구적으로 반영된 상태입니다. 이후 종료 상태에서 종료됩니다.

 

종료 상태(Terminated State) : 트랜잭션이 종료되는 상태입니다.

 

이렇게 해서 트랜잭션의 ACID 특징과 트랜잭션 상태에 대해 알아보았습니다.

 

 

참고 : https://www.geeksforgeeks.org

반응형

'IT > DB' 카테고리의 다른 글

[DB] 데이터베이스 제약조건과 PK, FK  (0) 2022.10.05