Transaction

Transaction 이란?

Transaction이란 DB 내에서 수행되는 작업의 최소 단위로, DB의 무결성을 유지하면 DB의 상태를 변화시키는 기능을 수행한다.


ACID

트랜잭션은 DB의 무결성을 유지하기 위해 4가지의 성질을 갖는다.

  • Atomicity(원자성) : 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 말아야 한다. (All or nothing)

  • Consistency(일관성) : 트랜잭션 실행이 성공적으로 완료되면 언제나 일관성 있는 DB 상태로 유지하는 것을 의미한다. ex: 송금하는 금액과 받았을 때 잔액의 데이터 타입은 모두 integer이여야 한다.

  • Isolation(고립성) : 여러 트랜잭션은 동시에 수행되는데, 이 때 각 트랜잭션은 다른 트랜잭션의 작업에 끼어들지 못하도록 보장하여 독립적으로 작업을 수행한다. 동시에 수행되는 트랜잭션을 충돌하지 않도록 제어해줘야 하는데 이를 동시성제어(concurrency control) 이라고 한다.

  • Durability(지속성) : 성공적으로 수행된 트랜잭션은 DB에 영원히 반영되어야 한다. 저장 후에 생기는 장애, 오류 등에 영향을 받지 않아야 한다.

동시성 제어(concurrency control)

여러개의 트랜잭션이 하나의 데이터를 동시에 update할 때 한 트랜잭션의 갱신이 무효화 될 수 있다. 이를 갱신손실 이라고 한다.

ex : A = 1000일 때 </br> t1 = A + 100, t2 = A - 100 </br> t1을 실행하고 곧바로 t2를 실행한다. </br> t1의 결과를 작성했을 때 A =1100 이고, 이후 t2의 결과를 작성하면 아직 t1의 결과가 입력되지 않았기 때문에 A에 1100이 아닌 1000을 대입하여 t2는 A = 900 이 된다. </br> 따라서 t1의 결과는 t2의 결과에 덮어씌워졌기 때문에 “갱신손실” 이 일어났다고 말한다.

</br> </br>

Commit과 Rollback

DB는 commit과 rollback 명령어를 통해 데이터 무결성을 보장한다. </br>

  • commit : 트랜잭션 작업을 완료했다고 확정하는 명령어
  • rollback : 작업 중 문제가 발생했을 때, 트랜잭션 처리 과정에서 발생한 변경사항을 취소 하고 이전 commit의 상태로 되돌리는 명령어

댓글남기기