Transaction

(재업) 데이터베이스 트랜잭션(transaction)을 아십니까? 그리고 트랜잭션의 매우 중요한 속성들인 ACID를 아십니까? 모르신다면 들렀다 가시지요

ACID

  1. Atomicity (원자성)
    1. 모두 성공하거나, 모두 실패하거나 (All or Nothing)
    2. transaction은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL문들이 모두 성공해야 한다.
    3. 중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무 일도 없었던 것처럼 rollback 한다.
  2. Consistency (일관성)
    1. transaction은 DB 상태를 consistent 상태에서 또 다른 consistent 상태로 바꿔줘야 한다.
    2. constraints, trigger 등을 통해 db에 정의된 rules을 transaction이 위반했다면 rollback해야 한다.
    3. transaction이 db에 정의된 rule을 위반했는지는 DBMS가 commit 전에 확인하고 알려준다
    4. 그 외에 application 관점에서 transaction이 consistent하게 동작하는지는 개발자가 챙겨야 한다.
  3. Isolation (격리)
    1. 여러 transaction들이 동시에 실행될 때도 혼자 실행되는 것처럼 동작하게 만든다.
    2. DBMS는 여러 종류의 isolation level을 제공한다.
    3. 개발자는 isolation level 중에 어떤 level로 transaction을 동작시킬지 설정할 수 있다
    4. concurrency(병행성) control의 주된 목표가 isolation이다
  4. Durability (영존성)
    1. commit된 transaction은 DB에 영구적으로 저장한다.
    2. 즉, DB System에 문제(power fail or DB crash)가 생겨도 commit된 transaction은 DB에 남아 있는다.
    3. 영구적으로 저장한다 라고 할 때는 일반적으로 ‘비휘발성 메모리(HDD, SSD 등 )에 저장함’을 의미한다
    4. 기본적으로 transaction의 durability는 DBMS가 보장한다.