DB Transaction

Jay Jang·2022년 6월 24일
0

DB

목록 보기
3/4


https://www.cashanalytics.com/corporate-bank-reporting/

트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 쪼갤 수 없는 논리적 처리 단위(unit of processing) 이다.

간단히 말해, 데이터베이스 트랜잭션은 하나의 비즈니스에서 일어나는 모든 실제 이벤트가 된다.

페이 시스템으로 이체를 한다고 생각해보자.


1. A 계좌에서 B 계좌로 1000원을 송금을 하려고 한다.
2. 이체 중, 네트워크 문제 또는 알 수 없는 오류가 발생했다.
3.  A 계좌에서 돈이 빠져 나갔지만 B 계좌에는 입금이 되지 않았다.
-- First statement
Update AccountBalance set amount=amount-1000 where accountId = sendingAccountId;

-- Second statement
Update AccountBalance set amount=amount+1000 where accountId = receivingAccountId;

이런 상황은 문제가 된다. ‘이체’ 라는 작업 비즈니스에 있어서, A 계좌에서 돈이 빠져 나가고, B 계좌에 입금되는 작업이 끝나야만 비로소 ‘이체’가 완벽하게 이루어 진 것이다. 어느 한 과정이라도 문제가 생기면 처음부터 없었던 거래로 돌아간다.

쪼갤 수 없는 논리적 처리 단위, 트랜잭션이 이것이다. 어느 하나라도 빠질 수 없다, 내 돈은 소중하니까..


트랜잭션의 시작과 끝 사이에 있는 모든 유형의 데이터베이스 엑세스 작업은 DBMS에서 하나의, 단일 논리적 트랜잭션으로 간주된다.

트랜잭션 진행되는 중에는 데이터베이스가 일관되지 않고, 오직 데이터베이스가 커밋된 경우에만 일관된 상태에서, 다음의 다른 일관된 상태로 변경된다. 이를 영속성 durability라고 하며, 이에 대해서는 조금 뒤에 이야기 하자.




Transaction Management in DBMS: What are ACID Properties? (guru99.com)

consistent state에서, 그 다음의 consistent state로

그렇다면 트랜잭션 진행 중에 작업이 중단되었다면, 어떻게 돌아갈 수 있을까?

커밋 Commit롤백 Rollback의 개념이 여기서 등장한다.


커밋 Commit
변경된 데이터를 한꺼번에 DB 테이블에 영구적으로 반영하는 것

롤백 Rollback
부분 작업이 실패하면 트랜잭션 실행 전으로 되돌리는 것

하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스 일관성을 깨뜨렸을 때, 트랜잭션의 일부가 정상적으로 처리되었더라도 처음의 상태로 돌아가야 한다.

A 계좌에서 돈이 빠져나갔지만 B 계좌에는 돈이 입금되지 않으면 안되는 것 처럼 말이다. 트랜잭션의 원자성 Atomicity에 대한 이야기이다. 이에 대해서는 조금 뒤에 이야기 해보도록 하자.


그렇다면 롤백은 커밋과 커밋 사이에서만 이루어질까? 트랜잭션 규모가 너무 크다면 비효율적이지 않을까? 여기서 저장점 SAVEPOINT이 등장한다.

저장점 SAVEPOINT
Rollback의 기준이 되는 지점

저장점 SAVEPOINT를 정의하면 롤백할 때 커밋과 커밋 사이 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 Savepoint까지 트랜잭션의 일부만 롤백할 수 있다. 따라서 복잡한 대규모 트랜잭션에서 에러가 발생했을 때 Savepoint까지의 트랜잭션만 롤백하고 실패한 부분에 대해서만 다시 실행할 수 있다.

다수의 Savepoint를 지정할 수 있으며, 동일한 이름의 Savepoint를 정의했다면 가장 최신의 정의가 유효하다.

 SAVEPOINT SPT;   // SAVEPOINT 정의
 ROLLBACK TO SPT; // Savepoint로 Rollback


트랜잭션 상태와 과정


DBMS의 트랜잭션 과정에는 다양한 상태 개념이 존재한다.

Transaction Management in DBMS: What are ACID Properties? (guru99.com)

활성 Active  : 트랜잭션이 정상적으로 실행중인 상태
실패 Failed :트랜잭션 실행에 오류가 발생하여 중단된 상태
철회 Aborted : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료 Partially Committed :트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료Committed :트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태



ACID in DATABASE TRANSACTION


조금 전에 원자성 Atomicity영속성 Durability 에 대해 이야기 했던 것을 기억할 것이다. 트랜잭션의 속성인 ACID의 일부이다.

트랜잭션의 4가지 속성인 ACID(Atomicity, Consistency, Isolation, Durability)에 대해 이야기해보자.

ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 트랜잭션의 속성을 말한다.

원자성 Atomicity
트랜잭션이 모두 DB에 반영되거나, 혹은 전혀 반영되지 않아야 한다. 트랜잭션이 실패하게 되어 완료되지 않은 트랜잭션의 중간 상태를 데이터베이스에 반영해서는 안된다. All or nothing.

일관성 Consistency
트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.

독립성 Isolation
둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 한다. 즉, 한 트랜잭션의 중간 결과가 다른 트랜잭션에게는 숨겨져야 한다.

지속성 Durability
트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다. 소프트웨어나 하드웨어 장애가 발생되더라도 보존되어야 한다.


REFERENCE


concurrency - What is a database transaction? - Stack Overflow
Transaction Management in DBMS: What are ACID Properties? (guru99.com)
ACID properties of database transactions. | by Thanh Tran | Programming Sharing
DBMS - Transaction (tutorialspoint.com)
Database transaction - Wikipedia
[DB]트랜잭션(Transaction)이란?/트랜잭션의 개념,특징, 연산과정/savepoint (tistory.com)
트랜잭션의 특성(Commit, Rollback, Savepoint) (tistory.com)

profile
그때는맞고지금은틀리다

0개의 댓글