본문 바로가기
카테고리 없음

[CS] 트랜잭션(Transaction)

by hbIncoding 2023. 5. 15.

1. Transaction이란?

  • 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미한다.
  • 적절한 예시 : A통장에는 30만원, B통장에는 20만원이 있다. A통장에서 B통장으로 5만원을 송금한다고 해보자. 아래와 같은 순서로 진행된다고 가정할 시 A통장에서만 기능하고 그 뒤에 오류가 발생해서 멈춘다면 A통장에서 5만원만 빠져나가고 B통장은 그대로 20만원 일 것이다. 트랜잭션은 이러한 오류를 방지하여 트랜잭션 내 모든 작업이 동시에 완료되거나 완료되지 못한다면 롤백 되게 해준다. 
    • A통장에서 5만원출금요청
    • A통장에서 5만원 출금
    • B통장에 5만원 입금요청
    • B통장에 5만원 입금

2. ACID 특징

  • 원자성(Atomicity) : 트랜잭션이 DB에 모두 반영되던가, 전혀 반영되지 않아야하는 것이다.
  • 일관성(Consistency) : 트랜잭션 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다. 트랜잭션이 진행되는 동안 DB가 변경되더라도 업데이트된 DB로 트랜잭션이 진행되는 것이 아닌 처음에 참조된 DB로 진행되어 각 사용자에게 일관성 있는 데이터를 보여줄 수 있다.
  • 독립성(Isolation) : 둘 이상의 트랜잭션이 동시에 실행되는 경우, 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산 에 끼어들 수 없다는 것이다. 하나가 완료되기 전까지 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
  • 지속성(Durability) : 트랜잭션이 성공적으로 완료됐을 경우, 결과가 영구적으로 반영되어야 한다는 것이다.

3. Commit, Rollback 연산

  • Commit : 하나의 트랜잭션이 성공적으로 끝났고, DB가 일관성 있는 상태에 있을 때, 하나의 트랜잭션이 끝났다라는 것을 알려주기 위해 사용하는 연산
  • Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소 시킨다.

4.  Transaction 중첩(트랜잭션 안의 트랜잭션)

  • 외부 트랜잭션과 내부 트랜잭션이 하나의 물리 트랜잭션으로 묶인다.
  • 따라서 하나의 트랜잭션으로 보고 내부 어디서 오류가 발생하더라도 최초 지점으로 롤백되며, 커밋 시점까지 중간에 커밋이 발생하지 않는다.

 

 

5. 참조

 1)트랜잭션, 동시성, 고립수준, 회복 : https://mangkyu.tistory.com/30

 

[Database] 8. 트랜잭션, 동시성 제어, 회복

[ 본 사진은 쉽게 배우는 오라클로 배우는 데이터베이스 개론과 실습 ppt에서 캡처했습니다. ]이번 장에서는 트랜잭션(Transaction), 동시성 제어(Locking or Currency Control), 회복(Recovery)에 대해 알아보겠

mangkyu.tistory.com

 2)트랜잭션 중첩 : https://velog.io/@wangjh789/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%84%ED%8C%8C-%EC%A4%91%EC%B2%A9

 

스프링 트랜잭션 전파 - 중첩

하나의 트랜잭션이 수행중이고, 아직 끝나지 않았는데 또 다른 트랜잭션이 수행되는 경우가 있다. 먼저 시작한 트랜잭션을 외부 트랜잭션, 그 뒤의 트랜잭션을 내부 트랜잭션이라고 한다.스프

velog.io