트랜잭션(Transaction)은 ATM, 데이터베이스 등의 시스템에서 사용되는 쪼갤 수 없다는 업무처리의 단위이다.

영어의 Transaction은 거래를 뜻한다. 예를 들어 돈을 주었는데 물건을 받지 못한다면, 그 거래는 이루어지지 못하고 원상태로 복구되어야 한다. 이와 같이 쪼갤 수 없는 하나의 처리 행위를 원자적 행위라 고 한다. 여기서 쪼갤 수 없다는 말의 의미는 실제로 쪼갤 수 없다기보다는 만일 쪼개질 경우 시스템에 심각한 오류를 초래할 수 있다는 것이다. 이러한 개념의 기능을 ATM 또는 데이터베이스 등의 시스템에서 제공하는 것이 바로 트랜잭션이다.

트랜잭션은 사용자가 시스템에 요구를 시작하여 시스템 내의 처리, 시스템에서 사용자에게 응답하는 모든 처리를 포함한다. 이러한 트랜잭션이 충족해야 하는 기술적인 요건은 ACID가 있다.

출처 : 위키백과

http://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98


1. 트랜잭션(transaction)
하나의 논리적 기능을 수행하기 위한 작업의 단위로서 데이타베이스의 일관된 상태를 또 다른 일관된 상태로 변환시킨다.

2. 트랜잭션 특성 (ACID)
(1). 원자성(Atomicity)
 트랜잭션은 자기의 션산을 전부 또는 전무(all or nothing) 실행만이 있지 일부 실행으로 트랜잭션의 기능을 갖는 것은 아니다.

(2). 일관성(Consistency)
 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이타베이스 상태로 변환한다. 즉, 트랜잭션 실행의 결과로 데이타베이스 상태가 모순되지 않는다.

(3). 격리성(Isolation)
 트랜잭션이 실행 중에 있는 연산의 중간 결과는 다른 트랜잭션이 접근할 수 없다.

(4). 영속성(Durability)
 트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 영속적이다. 따라서 시스템은 어떤 경우에도 완료된 결과의 영속성을 보장해야 한다.

3. 트랜잭션 예 (계좌 이체)

T : Begin_Trans
       Read(A)
         A=A-100
       Write(A)
       Read(B)
         B=B+100
       Write(B)
     End_Trans

이 트랜잭션이 갖는 일관성 제약은, 이 트랜잭션이 실행되더라도 계좌 A와 계좌 B의 합계는 변하지 않아야 된다는 것이다.
A=A-100을 실행하고 B=B+100을 실행하는 도중 장애가 있어났다면 계좌 A와 계좌 B의 합계는 트랜잭션 T의 실행 전과 달라져 버리게 되어 일관성 제약을 위반하게 된다.
이러한 상태는 모순 상태(inconsistent state)라고 하는데 이러한 모순은 데이타베이스에서 허용되지 않는다.
원자성은 트랜잭션 실행의 시작에서부터 성공적으로 마칠 때까지를 한 단위로 해서 일관성을 검사하는 것이다.
원자성을 위한 연산에는 Commit(완료)와 Rollback(복귀) 연산이 있다.
Commit연산을 수행하면 그 트랜잭션의 실행이 성공적으로 종료되었음을 선언하는 것이다.
따라서 데이타베이스 상태는 일관성 있는 상태로 변환되었고 갱신된 데이타 아이템들의 값은 영속성을 갖도록 시스템이 보장하게 된다.
그러나 트랜잭션이 Rollback 연산을 수행하면 트랜잭션의 실행이 실패했음을 선언하는 것이다. 따라서 이 트랜잭션이 수행한 연산의 결과는 원상 복귀시켜야 된다.

4. 트랜잭션 상태
(1) 활동(active)
 트랜잭션이 Begin_Trans에서부터 실행을 시작하였거나 실행 중인 상태
(2) 부분완료(partially committed)
 트랜잭션이 마지막 명령문을 실행한 직후의 상태
(3) 실패(failed)
 정상적 실행을 더 이상 계속할 수 없어서 중단한 상태
(4) 완료(commited)
 트랜잭션이 실행을 성공적으로 완료하여 Commit 연산을 수행한 상태

BEGIN_TRANS;
       UPDATE
ACCOUNT
       SET Balace = Balance-100
       WHERE Accnt = 'A';
       IF ERROR GO TO UNDO;

       UPDATE
ACCOUNT
       SET Balace = Balance+100
       WHERE Accnt = 'B';
       IF ERROR GO TO UNDO;

       COMMIT
TRANS;
       GO TO
FINISH;

    UNDO:
       ROLLBACK
TRANS;
    FINISH:
       RETURN;

END_TRANS;

참고 & 출처 : 데이타베이스 시스템(DATABASE SYSTEM). 정익사. 이석호 저

+ Recent posts