Transaction & ACID

Woozy9ucci·2023년 12월 22일
0

DB

목록 보기
1/4

Transaction

  • 단일한 논리적인 작업의 단위

  • 논리적인 이유로 여러 SQL문들을 하나의 단위로 묶어 나눠질 수 없게 만든 것

  • 예시
    A가 B에게 계좌이체를 한다고 가정해보자
    1.[A 계좌에서 출금] 을 하고 2.[B계좌에 입금]을 하는 과정이 필요할 것이다.

    • UPDATE account SET balance = balance - 1,000,000 WHERE id = A

    • UPDATE account SET balance = balance + 1,000,000 WHERE id = B

      그런데 이 과정에서 1번만 성공하고 2번은 실패하는 경우 A의 100만원이 증발하고 1번은 실패했는데 2번만 성공하는 경우 없는 돈 100만원이 B에게 생기게 된다.
      논리적으로 '이체'라는 작업은 저 둘의 Query문이 하나의 단위로 이루어져야 의미가 있다.
      즉 모두 반영되거나 모두 반영되지 않아야 한다는 것이다.

ACID

  • Transaction이 어떤 속성을 지녀야 하는지 나타내는 개념

  • 원자성(Atomicity)

    • 하나의 논리적인 작업단위는 쪼개질 수 없기 때문에 모두 반영되거나 모두 반영되지 않아야 한다.
  • 일관성(Consistency)

    • 트랜잭션이 실행 후 일관성을 가져야 한다.
    • 위반시 (어플리케이션 관점에서도 신경써야한다) 롤백
    • 위 예시에서 계좌를 출금했을 때 잔액이 0보다 커야한다.
  • 고립성(격리성)(Isolation)

    • 트랜잭션이 동시에 실행되어도 각각 실행되는 것과 같아야 함
      (마치 혼자서 실행되는 것 과 같아야한다)
    • 임계영역을 두는 것으로 달성가능
    • 위 예시에서 r1(A) - w1(A) - r1(B) - r2(B) - w2(B) - r1(B) 는 독립성을 지니지 못함
    • 고립성 이 올라갈 수록 동시성은 떨어짐
  • 지속성(Durablity)

    • commit된 Transaction은 DB에 문제가 생겨도 영구적으로 저장되어야함
    • 방법론적으로는 비휘발성 메모리에 저장함을 의미
    • 기본적으로 dbms가 보장

0개의 댓글