[CS] DB- 트랜잭션의 4가지 특성 (ACID)

jake·2022년 10월 28일
0

CS

목록 보기
2/6

트랜잭션(Transaction)

트랜잭션은 데이터베이스 내에서 데이터를 처리하는 작업 수행의 논리적인 작업 단위(하나의 그룹)를 의미한다.

트랜잭션은 작업의 완전성을 보장해야한다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능이다. 사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고 시스템의 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위가 된다.

예를 들어, 쇼핑몰에서 물건을 구매 했는데 처리하는 카드사에 문제가 생겨 나는 쇼핑몰에 돈을 보냈지만 쇼핑몰계좌에 내 이름으로 입금이 안되었다고 해보자.
이렇게 중간 처리하는 과정에서 문제가 발생하게 되면 진행 중이던 작업(전체)을 취소하고 처음부터 다시 시작해야 하는 것이 트랜잭션의 특성이다. 

데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다.

 

트랜잭션의 특징

원자성(Atomicity) 

: 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 위의 예시와 같이, 입금처리는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.


일관성(Consistency) 

트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.


독립성(Isolation) 

트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 즉 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 보안상 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 독립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다.


지속성(Durability)  

성공적으로 수행된 트랜잭션의 결과와 데이터베이스의 내용은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 일반적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit상태로 간주될 수 있다.


0개의 댓글