본문 바로가기

DEVELOP/Database

[Database] 트랜잭션의 개념 및 단계

반응형

트랜잭션이란?

 트랜잭션은 더 이상 쪼갤 수 없는 업무처리의 단위 또는 논리적 작업 단위를 이야기한다. 웹 개발에서 트랜잭션이라 하면 일반적으로 데이터베이스 트랜잭션에 해당하며, 이는 단일 사용자가 데이터베이스의 내용에 액세스하기위한 작업을 수행하는 것이다.

 

트랜잭션의 개념과 단계에 대한 이해를 위해 어떤 은행에서 직원이 고객 X의 계좌에서 Y의 계좌로 800만원을 이체해야하는 상황이 있다고 한 번 가정해보자. 우리가 보기에는 단순히 입금과 출금이라는 간단한 작업같지만, 아래와 같이 생각보다 많은 하위 작업들이 포함되어있다. 이러한 일련의 작업 단위를 그룹으로 묶어 놓은 것을 트랜잭션이라 한다.

 

  • X의 계좌
Open_Account (X)  
Old_Balance = X. 잔액  
New_Balance = Old_Balance-800  
X.balance = New_Balance  
Close_Account (X)  

 

  • Y의 계좌
Open_Account (Y)  
Old_Balance = Y. 잔액  
New_Balance = Old_Balance+800  
Y.balance = New_Balance  
Close_Account (Y)  

 

 은행에서 정상적으로 작업이 이루어진다면, X의 계좌에서 800만원이 빠져나가고 Y의 계좌에는 800만원이 추가될 것이다. 하지만 만약 일련의 과정 중 하드웨어 또는 소프트웨어 등 여러 변수로 인해 모든 작업이 완료되지 않는다면 큰 문제가 발생할 수 있다. 예를 들어 X의 계좌에서는 800만원이 빠져나갔지만, Y의 계좌에서는 800만원이 추가되지 않는 경우가 생길 수도 있다는 것이다. 따라서 모든 거래가 확실하게 끝나야만 완전하게 거래가 이루어졌다고 승인하고, 오류가 발생하는 경우 거래 자체를 아예 없는 거래로 만드는 방법을 사용할 수 있는데 이렇게 안정성에 대해 확보하는 것이 바로 트랜잭션이다.


데이터베이스 트랜잭션

 데이터베이스 트랜잭션 역시 일반적으로 DBMS에서의 상호작용 단위에 해당한다. 데이터베이스에 트랜잭션을 적용시킨 이유는, 데이터의 일관성을 유지하고 쉽게 복구할 수 있도록 안정성을 추가하기 위해서다. 우리가 데이터를 업데이트 하기 위해 INSERT, UPDATE, DELETE 등을 수행하는 것도 트랜잭션에 해당한다. 만약 트랜잭션이 데이터베이스를 업데이트하지 않고 데이터를 검색만 하는 경우에는 읽기 전용 트랜잭션이라고 한다.

 

 데이터베이스에서는 이렇게 하위 단위의 작업이 모여 이루어진 트랜잭션을 처리하기 위해서 두 가지의 명령을 활용한다. 바로 커밋롤백이다. (사실 커밋과 롤백 외에 세이브포인트도 존재하는데, 세이브포인트를 이용하면 전체 작업이 아닌 현재 시점에서 세이브포인트까지만을 롤백할 수 있다. 다만 세이브포인트는 지원이 안되는 DBMS 툴도 있다는 듯 하다..) 해당 작업은 응용 프로그램에서 실행하거나 또는 SQL과 같은 쿼리 언어를 통해 지정될 수 있다. 

 

커밋 (Commit)
모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이며, 트랜잭션의 작업 결과를 데이터베이스로 반영하기 위해서 변경한 내용 전부를 실제 데이터베이스에 영구적으로  저장한다. 커밋을 수행하면, 하나의 트랜젝션 과정을 종료하게 되는 것에 해당한다. 이전의 데이터가 모두 업데이트가 되며, 모든 사용자는 변경된 데이터의 결과를 볼 수 있다.
롤백 (Rollback)
작업 중 문제가 발생해했다면 트랙잭션 처리를 하는 과정에 발생했던 모든 변경 사항들을 전부 취소하고 트랜잭션 과정을 종료시켜버린다. 이전 커밋을 한 부분까지만 복구가 된다. 이렇게 한꺼번에 삭제가 가능한 것은 위에서 언급한 것과 같이 하나의 묶음으로 처리되기 때문이다.

트랜잭션 상태

 

트랜잭션의 단계별 상태는 위 그림과 같이 나누어지며, 각 상태에 대한 내용은 다음과 같다. 

활동(Active) 
트랜잭션이 현재 실행 중인 상태이다.
부분 완료(Partially Committed)
트랜잭션이 최종 작업을 실행하였으나, 아직 commit이 되기 전의 상태
실패(Failed)
트랜잭션을 수행하던 도중 오류가 발생하여 중단이 된 상태이며, 더 이상 트랜잭션 진행이 불가능하다.
철회(Aborted)
트랜잭션 처리 과정 중 비정상적으로 종료되어 rollback을 수행한 상태이며, 트랜잭션이 중단된 후 데이터베이스 복구 모듈에서 트랜잭션을 다시 시작하거나 아예 수행 자체를 종료 해버리는 두 가지 경우가 존재하게 된다.
완료(Commited)
트랜잭션이 완료되고 commit 까지 수행한 후의 상태이며, 수행된 결과가 데이터베이스 시스템에 업데이트된다.

트랜잭션의 특징

 데이터베이스 시스템에서는 트랜잭션에 대해서 정확성, 완료성, 데이터 무결성(데이터의 정확성 및 일관성)을 보장하기 위해서 다음과 같은 특징들 역시 가진다. 각 특징의 첫글자를 따 ACID라고도 한다. 

원자성 (Atomicity) 
트랜잭션이 원자 단위로 처리되어야 한다는 뜻이다. 원자 단위로 처리한다는 말이 애매하게 느껴진다면, 오류가 발생해서 모든 작업이 실행되지 않는 경우 트랜잭션이 전부 취소된다고 생각하면 좀 더 간단하다. 데이터베이스에는 부분적으로 완료되어 남겨진 트랜잭션이 존재하는 상태가 있어서는 안된다.
일관성 (Consistency)
데이터베이스는 트랜잭션 후에 일관성있는 상태를 유지해야 한다는 의미인데, 상태를 유지해야한다는 말을 좀 더 정확히 이야기하면 트랜잭션에 의한 작업 처리 결과가 일관성이 있어야 한다는 뜻이다.
독립성 (Isolation)
만약 데이터베이스 시스템에서 하나 이상의 트랜잭션이 동시에 병렬로 실행되고 있다면, 어떤 트랜잭션의 처리 과정에서 이루어지는 연산에는 다른 트랜잭션이 개입할 수 없다. 또한 처리 중인 트랜잭션이 완전히 완료되기 않았다면, 다른 트랜잭션에서 해당 트랜잭션의 처리 결과에 대해 참조할 수 없다.
영구성 (Durality)
트랜잭션이 만약 데이터를 업데이트하고 커밋한 후 성공적으로 완료되었음이 확인된다면 데이터베이스는 수정된 데이터 결과를 반영해야한다. 하지만 트랜잭션이 커밋이 되었더라도 데이터가 디스크에 기록되기 전에 시스템이 실패하게 된다면, 시스템이 다시 작동할 때 데이터가 업데이트가 된다. 이는 시스템에 문제가 생기더라도 트랜잭션 결과는 반영이 되어야하기 때문이다.

Reference

 

DBMS - Transaction - Tutorialspoint

DBMS - Transaction A transaction can be defined as a group of tasks. A single task is the minimum processing unit which cannot be divided further. Let’s take an example of a simple transaction. Suppose a bank employee transfers Rs 500 from A's account to

www.tutorialspoint.com

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

반응형

'DEVELOP > Database' 카테고리의 다른 글

[Database] 데이터베이스 인덱싱이란?  (0) 2021.07.11