1. 데이터베이스 트랜잭션(Database transaction)이란?

  • 데이터베이스 트랜잭션(Database Transaction): 데이터베이스의 여러 작업들을 하나로 묶은 단위이다.
  • All-or-Nothing: 한 덩어리의 작업(트랜잭션)은 모두 실행되거나, 실행되지 않는다.



🤔 트랜잭션이 필요한 이유

예를 들어 은행 A에서 은행 B로 돈을 보낸다고 가정한다. 이 때 A에서 출금 후, B로 송금하려할 때 시스템에 장애가 발생해 시스템이 멈추게 된다면 어떻게 될까?


A에서 돈은 출금되었지만, B로 송금되지 않고 증발하는 큰 문제가 발생할 수 있다.


트랜잭션은 이런 문제가 발생하지 않도록 해주는 역할을 한다.


대부분은 데이터베이스에서는 송금이 되다가 마는 상황이 발생하지 않도록 여러 방법을 제공하지만, 공통으로 제공하는 가장 기본적인 방법은 트랜잭션을 통해 데이터의 유효성을 보장하는 것이다.



2. ACID란?

  • 데이터베이스 트랜잭션들이 안정적으로 수행되는 것을 보장하기 위한 네 가지 성질을 일컫는 단어이다.

ACID의 각 성질을 알아보자.


(1) 원자성(Atomicity)

  • 모든 작업이 반영되거나, 혹은 모두 롤백(rollback)되는 성질이다.
  • 예를 들면, 위의 송금 예시처럼 트랜잭션이 중간 단계까지 실행하고 실패하는 일이 없도록 한다.

(2) 일관성(Consistency)

  • 데이터는 미리 정의된 규칙에서만 수정이 가능하다.
  • 트랜잭션이 실행을 성공적으로 완료하면, 언제나 일관성 있는 데이터베이스 상태로 유지해야한다.
  • 예를 들면 숫자 컬럼(column)에 문자열(string)이 저장되지 않도록 보장한다.

(3) 고립성(Isolation)

  • 트랜잭션이 실행되고 있을 때, 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 성질이다.
  • 즉, 트랜잭션 바깥에 있는 어떤 연산도 중간단계의 데이터를 볼 수 없게 하는 것이다.
  • 예를 들어, 은행 관리자는 이체 작업 도중 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다.

(4) 영구성(Durability)

  • 한 번 반영(commit)된 트랜잭션의 내용은 영원히 적용된다는 성질이다.
  • DBMS가 사용자에게 트랜잭션 commit 응답을 했을 경우, DB가 객체에 대한 변경사항이 디스크에 반영(flush)되기 전 시스템 장애가 발생해도 해당 커밋이 보장되어야 한다.
  • 이 성질을 제공하기위해 DBMS는 로그(log)를 관리한다.
  • 로그(log): DB 객체의 갱신 작업에 대한 기록 관리