본문 바로가기

DB

[DB] 트랜잭션 ACID

트랜잭션

  • 단일한 논리적인 작업 단위
  • 논리적인 이유로 여러 SQL 문들을 단일 작업으로 묶어서 나눠질 수 없게 만든 것이 트랜잭션이다.
  • 트랜잭션의 SQL 문들 중에 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다.
  • 둘 다 정상 처리되어야만 성공하는 단일 작업

 

일반적인 트랜잭션 사용 패턴

  1. 트랜잭션을 시작한다.
  2. 데이터를 읽거나 쓰는 등의 SQL문들을 포함해서 로직을 수행한다.
  3. 일련의 과정들이 문제없이 동작했다면 트랜잭션을 커밋한다.
  4. 중간에 문제가 발생했다면 트랜잭션을 롤백한다.

트랜잭션이 가져야 할 속성 (ACID)

  1. Atomicity
  2. Consistency
  3. Isolation
  4. Durability

Atomicity(원자성)

  • ALL or Nothing
  • 트랜잭션은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL문들이 모두 성공해야 한다.
  • 중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무 일도 없었던 것 처럼 롤백한다.

Consistency(일관성)

  • 트랜잭션은 DB 상태를 일관된 상태에서 또 다른 일관된 상태로 바꿔줘야 한다.
  • 제약조건, 트리거 등을 통해 DB에 정의된 룰을 트랜잭션이 위반했다면 롤백해야 한다.
  • 트랜잭션이 DB에 정의된 룰을 위반했는지 DBMS가 커밋 전에 확인하고 알려준다.

Isolation(독립성)

  • 여러 트랜잭션들이 동시에 실행될 때도 혼자 실행되는 것 처럼 동작하게 만든다.
  • DBMS는 여러 종류의 isolation level을 제공한다.
  • 개발자는 isolation level 중에 어떤 level로 트랜잭션을 동작시킬지 설정할 수 있다.
  • concurrency control의 주된 목표가 isolation 이다.

Durability(지속성)

  • 커밋된 트랜잭션은 DB에 영구적으로 저장한다.
  • 즉, DB 시스템에 문제가 생겨도 커밋된 트랜잭션은 DB에 남아 있는다.
  • 영구적으로 저장한다라고 할 때는 일반적으로 비휘발성 메모리에 저장함을 의미한다.
  • 기본적으로 트랜잭션의 Durability는 DBMS가 보장한다.

 

'DB' 카테고리의 다른 글

[DB] 트랜잭션 회복 기법  (0) 2024.11.25
[DB] Soft Delete VS Hard Delete  (0) 2024.11.24
[DB] 데이터베이스 설계  (0) 2024.11.17
[SQL] 트리거  (0) 2024.06.08
[SQL] 스토어드 프로시저, 스토어드 함수, 커서  (0) 2024.06.07