티스토리 뷰

트랜잭션 ( Transaction )

 

트랜잭션은 DBMS의 질의(Query)를 하나의 단일 작업 화 해서, 커밋(Commit) 혹은 롤백(Rollback) 이라는 과정을 포함한 안전성 있고 정확한 데이터를 유지할 수 있도록 하는 DB의 논리적 작업 단위.

목적

트랜잭션이 필요한 이유는 다수의 질의가 동시에 들어왔을 때 그 순서를 정확하게 보장할 수 없어 데이터의 정확성이 위협받게 된다. 이 때 논리적으로 한 번에 처리될 필요가 있는 하나 이상의 질의를 단일 작업으로 묶어 데이터의 부정합을 방지한다.

트랜잭션 ACID

트랜잭션은 기본적으로 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability) 이라는 4가지의 특성으로 표현된다. 이를 트랜잭션 ACID 라고 한다.

원자성 ( Atomicity )

  • 트랜잭션의 하나의 단일 작업으로 묶인 질의들중 일부만 실행되는 일이 없도록 보장하는 것.
보장 방법

이전 상태를 임시 영역에 따로 저장해 두고, 트랜잭션을 처리하는 과정에서 문제가 발생하면 변경된 내역을 임시 영역에 저장한 이전 상태로 롤백(Rollback)한다.

이 때, 이전 상태를 저장하는 임시 영역을 롤백 세그먼트(Rollback Segment) 또는 언도 세그먼트(Undo Segment)라고 한다.

Tip
Undo(언도) 와 RollBack(롤백)은 기본적으로 동의어 입니다.
🪧 Save Point
트랜잭션의 길이가 길어 롤백으로 문제가 생기는 범위가 커질 때 오류가 생기지 않은 Point까지
저장해. 성능적인 문제를 잡는다.

일관성 ( Consistency )

  • 트랜잭션이 완료된 후에도 일관적인 DB 상태를 유지해야 한다는 것을 의미하는데, 이는 무결성 제약조건 혹은 비명시적 일관성 조건등이 있다.
보장 방법

트랜잭션의 일관성 보장은, **테이블에 이벤트에 자동으로 반응하는 트리거(Trigger)**를 통해 보장하는데, 이 트리거는 해당 작업 전・후에 모든 제약조건과 만족하는지 확인하여 일관성을 유지한다.

독립성 ( Isolation )

  • 트랜잭션은 서로 영향을 주어서는 안된기 때문에, 트랜잭션 작업에 영향을 줄 수 있는 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것.

 

보장 방법

여러 트랜잭션들은 시분할 방식으로 병행처리 되는데 이 때 공통된 데이터를 동시 처리하는 과정에서 갱신분실, 오손판독, 반복불가능, 팬텀문제등 여러 문제가 발생할 수 있다.

DBMS는 세마포어와 비슷한 개념의 Lock & excute unlock 을 통해 고립성을 보장한다.

  • lock의 종류
    • shared lock ( 공유 락 )
      • 다른 트랜잭션의 변경 작업은 막고 읽기는 허용한다.
    • exclusive lock ( 단독 락 ) - write lock
      • 다른 트랜잭션의 모든 작업을 막고 단독적인 소유권을 획득한다.

지속성 ( Durability )

  • 트랜잭션이 성공(Commit)하면 하드웨어 혹은 소프트웨어 오류등 어떤 이유로도 그 결과가 유실 되서는 안되고 영원히 보장되어야 한다.
  • 트랜잭션이 성공하면, 트랜잭션에 대한 로그가 남아있어야 한다.

'DataBase' 카테고리의 다른 글

인덱스 키의 빈번한 Update로 발생할 수 있는 오버헤드  (0) 2022.10.13
MySQL과 Redis  (0) 2022.10.10
Nested (Loop) Join 과 Hash Join  (0) 2022.08.23
CAP 정리란?  (0) 2022.08.20
샤딩(Sharding)이란?  (0) 2022.07.27
댓글