[DB] 트랜잭션이란?

트랜잭션이란?

트랜잭션 개념

트랜잭션이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

트랜잭션 특성

  1. 트랜잭션은 데이터 베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위

  2. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.

  3. 하나의 트랜잭션은 commit되거나 rollback 된다.

Atomicity(원자성):

  1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.

  2. 트랜잭션 내의 모든 명령은 반드시 완벽하게 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

Consistency(일관성):

  1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.

  2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

일관성 ex)

또한 트랜잭션은 트랜잭션의 수행 전과 후에 일관된 상태를 유지해야 하고 이것을 일관성이라고 합니다. 예를 들어 어떤 테이블의 기본키와 같은 속성은 유지되어야 한다는 것 또는 A에서 B로 돈 이체를 할 때 A와 B계좌의 돈의 총합은 같아야한다는 것 등이 있습니다.

트랜잭션의 특징과 ACID가 무너질 수 있는 상황에 대한 ex)

[ 트랜잭션과 DBMS ]

DBMS는 원자성을 유지하기 위해 회복(복구)관리자 프로그램을 작동시킴.

DBMS는 일관성을 유지하기 위해 동시성 제어 알고리즘과 무결성 제약조건을 활용함.

DBMS는 고립성을 유지하기 위해 동시성 제어 알고리즘을 작동시킴.

DBMS는 지속성을 유지하기 위해 회복 관리자 프로그램을 이용함.

어떤 트랜잭션이 실행되다가 장애에 의해 부분 완료되는 상황은 원자성과 지속성이라는 속성에 위배됩니다. 그래서 DBMS는 이를 유지하기 위해 회복 관리자 프로그램을 이용하는데, 일부만 진행된 트랜잭션을 취소시켜 원자성을 유지할 뿐 아니라 값을 트랜잭션 이전의 상태로 복원시켜 지속성을 유지시켜줍니다.

또한 일관성과 고립성을 유지하기 위해서 값에 동시에 접근하지 않도록 하므로 동시성 제어(Locking)를 활용하여 이를 해결합니다.

파일 시스템과 같은 경우처럼 값이 덮어 씌워지는(Overwrite) 경우 일관성이 무너질 수 있고 그러한 경우는 고립성에 위배되는 경우이므로 Locking을 하여 이를 만족시킵니다.

여기에 더해 DBMS는 잘못된 값에 대한 입력이 오면 일관성이 무너질 수 있으므로 이를 유지시키기 위해 무결성 제약조건도 활용합니다.

Isolation(고립성):

  1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.

  2. 수행 중인 트랜잭션은 완전히 완료 될 때까지 다른 트랜잭션에서 수행 결과를 참조 할 수 없다.

Durability(영속성, 지속성):

  1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

트랜잭션의 연산

Commit 연산

Commit 연산은 한개의 논리적 단위에 대한 작업이 성공적으로 끝났고 데이터 베이스가 다시 일관된 상태에 있을 때 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

Rollback 연산

Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜젹신이 행한 모든 연산을 취소하는 연산이다.

Rollback 시에는 트랜잭션을 재시작하거나 폐기한다.

트랜잭션의 상태

활동 상태: 트랜잭션이 실행중인 상태

부분완료 상태: 트랜잭션의 마지막 연산까지 실행했지만 Commit 연산 전의 상태

완료 상태: 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

실패 상태: 트랜잭션 실행에 오류가 발생하여 중단된 상태

철회 상태: 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

참조:

https://mommoo.tistory.com/62

https://sjh836.tistory.com/11

https://mangkyu.tistory.com/30