Transaction

DBMS에서 말하는 논리 작업의 최소 단위로서, Task의 집합으로 이루어진다.
Task는 DBMS에서 이루어지는 하나의 작업(CRUD)를 말하며, DBMS에서 1개 이상의 Task를 묶어 Transaction으로 처리한다.
이러한 트랜잭션은 진행 상테 혹은 로직에 따라 Commit되거나 Rollback된다.

ACID

  • Atomicity: Transaction이 온전하게 DBMS에 반영되거나(commit) 반려되어야(rollback) 한다.
  • Consistency: Transaction의 작업 처리 결과가 항상 일관성이 있어야 한다. Query를 실행함에 있어 결과에 미치는 side-effect는 없어야 한다.
  • Durability: DBMS의 최종 결과물(CRUD 이후)은 시스템의 어떠한 문제가 생기더라도 영구히 유지되어야만 한다. data chunk가 disk에 기록되기 전에 문제가 발생하더라도, commit이 되었다면 이는 시스템이 정상 동작하기 시작하면 disk에 반영되어야 한다.
  • Isolation: 다수의 transaction이 동시에 처리되더라도, 모든 transaction은 single-thread처럼 한번에 하나의 transaction이 실행되는 것 처럼 실행되어야 하며, transaction들이 서로 영향을 끼쳐서는 안된다.

Transaction을 실행함에 있어 ACID를 보장하는 방법

DBMS는 Lock을 사용하여 ACID를 보장한다. Read-lock이라 불리는 Shared-lock, Write-lock이라 불리는 Exclusive-lock이 있다.

  • Shared-lock: 동시에 여러 개의 lock이 걸릴 수 있으며, exclusive-lock과는 동시에 걸릴 수 없다. Resource에 대해 읽기 상태는 허용하지만, 수정에 대한 부분은 허용하지 않는다.
  • Exclusive-lock: 오직 하나의 lock만이 걸릴 수 있다. 이 lock이 풀리기 전에는 lock이 걸린 범위 내에서는 다른 transaction의 lock이 걸릴 수 없다.

Lock을 적용하는 범위는 DBMS부터 table(collection) 혹은 row 단위를 많이 사용하지만, DBMS에 따라 Query의 대상이 되는 record에만 적용되는 record-lock, index-lock 등 다양한 lock 기법이 존재한다.