트랜잭션과 ACID

목차

트랜잭션과 ACID

  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 격리성(Isolation)
  • 지속성(Durability)

원자성 보장

트랜잭션 원자성은 All or Nothing 으로 부분적으로 실행되거나 중단되지 않음을 보장한다. 즉, 분해가 불가능한 최소 단위인 하나의 원자처럼 동작한다는 의미

  • 트랜잭션에 의한 변경 내용을 유지하면서, 이전에 Commit 된 시점의 데이터를 임시영역에 따로 저장함으로써 원자성을 보장한다.
  • 현재 수행하고 있는 트랜잭션에 오류가 나면 현재 내역을 날려버리고 임시 영역에 저장했던 상태로 Rollback 을 한다.
  • 이전 데이터들이 저장된 영역을 롤백 세그먼트라고 부른다.
  • 현재 수행중인 트랜잭션에 의해 새롭게 변경되는 내역을 데이터베이스 테이블이라 부른다.
  • 트랜잭션의 원자성은 롤백 세그먼트에 의해 보장이 된다.

Consistency - 일관성 보장

트랜잭션 수행 전, 후 데이터 베이스 제약 조건 이나, 자료형 이 변하지 않음을 보장한다.

  • 트랜잭션이 성공적으로 수행되면 일관적인 DB상태를 유지함을 보장한다.
  • 데이터 베이스에 저장된 데이터들은 각 제약 조건이나 자료형들을 모두 만족한 상태로 저장돼 있다.
  • 조건에 위배되는 쿼리가 들어오게 되면 트랜잭션은 종료된다.

Isolation - 격리성 보장

하나의 트랜잭션이 수행 중에는 다른 트랜잭션이 수행될 수 없음을 보장한다.

  • 트랜잭션이 수행되고 있을 때 다른 트랜잭션의 작업이 끼어들지 않음을 보장한다.
  • 트랜잭션끼리는 서로 간섭할 수 없다.
  • lock & excute unlock 을 통해 고립성을 보장한다.
  • 데이터를 쓸 때는 문을 잠궈서 다른 트랜잭션이 접근하지 않도록 고립성을 보장하고, 수행을 마치면 unlock을 통해 데이터를 다른 트랜잭션이 접근할 수 있도록 허용하는 방식이다.
  • shared lock(공유 락)
    • 트랜잭션에서 데이터를 읽을 때 다른 트랜잭션들이 읽을 수는 있도록 허용하는 lock
  • exelusive lock(베타 락)
    • 한 트랜잭션에서 데이터를 수정하고 있을 경우 다른 트랜잭션들이 접근을 못하도록하는 lock

Durability - 지속성 보장

트랜잭션이 수행된 후 저장된 데이터는 영구적으로 보관됨 을 보장한다.

  • 데이터는 비휘발성 저장소에 기록되며
  • H/W, S/W 장애가 발생하더라도 데이터는 계속 보존돼야 한다.
Share