본문 바로가기
공부이야기/CS공부

[DB] Transaction (트랜잭션)이란?

by coderoom 2021. 5. 13.

 

 

 

Transaction이란?

데이터베이스 관리 시스템 또는 유사한 시스템에서의 상호작용 단위.

(유사한 시스템: 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미)

 

전부 성공하거나 전부 실패되거나 둘 중 하나의 작업을 수행하며 모든 연산은 반드시 한꺼번에 완료가 되어야 하고 그렇지 않은 경우에는 한꺼번에 취소되어야 한다. (원자성)

 

한꺼번에 완료가 된 경우에는 COMMIT을 호출해 작업 결과를 DataBase에 반영한다.

취소가 되거나 문제가 발생한 경우에는 ROLLBACK을 호출하고 작업결과를 모두 취소하여 DataBase에 영향을 미치지 않게 한다.

 

 

 

 


 

 

 

Transaction의 성질

 

 

Atomicity (원자성)

분리할 수 없는 하나의 단위로 작업은 모두 완료되거나 모두 취소되어야 한다.

이전에 COMMIT된 상태를 임시 영역인 rollback segment에 저장해 만약 현재 수행하고 있는 트랜잭션에서 오류가 발생하면 현재 내역을 날려버리고 rollback segment에 저장했던 상태로 rollback.

 

 

Consistency (일관성)

사용되는 모든 데이터는 일관되어야 한다. 

트랜잭션 수행 전,후에 데이터 모델의 모든 제약 조건 (기본키, 외래키, 도메인, 도메인 제약조건 등)을 만족해야 한다.

성공적으로 수행된 트랜잭션은 정당한 데이터들만을 DataBase에 반영해야 한다.

 

 

Isolation (고립성, 격리성)

접근하고 있는 데이터는 다른 트랜잭션으로부터 격리되어야 한다.

여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 한다.

(Transaction의 Isolation Level 바로가기)

 

 

고립성 보장

lock & execute unlock을 통해 고립성을 보장할 수 있다.

  • shared_lock: 데이터를 읽을 때, 여러 트랜잭션이 읽을 수는 있도록 허용
  • exclusive_lock: 데이터를 쓸 때, 다른 트랜잭션이 읽을 수도 쓸 수도 없도록 잠금

 

 

2PL Protocol (2 Phase Locking Protocol)

무분별한 lock으로 데드락에 걸리는 것을 방지하고자 어떤 규칙에 의해서 고립성을 보장해야 한다는 2PL 프로토콜이 연구되었다. 이름 그대로 2가지 단계의 locking이 존재한다. 이 두 단계를 유지, 즉 상승 단계와 하강 단계가 섞이면 안된다는 것을 의미한다. lock과 unlock이 번갈아 수행되지 않고 lock이 쭉 수행된 후에 unlock이 쭉 수행되어야 한다는 것이다.

  • growing phase: read_lock, write_lock
  • shrinking phase: unlock

 

https://victorydntmd.tistory.com/129

 

 

 

Durability (영속성)

트랜잭션이 정상 종료되면 그 결과는 시스템에 영구적으로 적용되어야 한다.

트랜잭션이 성공적으로 완료되어 COMMIT되고 나면, 해당 프랜잭션에 의한 모든 변경은 향후 어떤 소프트웨어나 하드웨어 장애가 발생되더라도 보존되어야 한다.

 

 

 

 

 

 

참고 링크

 

 

 

 

 


 

 

 

댓글