SQL

MYSQL 트랜잭션의 4대 원칙

하루이2222 2024. 7. 25. 22:42

ACID 원칙은 데이터베이스 시스템에서 트랜잭션의 신뢰성을 보장하기 위해 설계된 네 가지 핵심 특성을 의미한다.

1. Atomicity (원자성)

원자성은 트랜잭션의 모든 연산이 모두 성공적으로 완료되거나 전혀 완료되지 않도록 보장하는 특성이다.

  • 개념: 트랜잭션의 모든 작업은 하나의 단일 단위로 처리된다. 트랜잭션이 중간에 실패하면 모든 작업은 취소되고, 데이터베이스는 트랜잭션이 시작되기 전의 상태로 되돌아간다.
  • 예시: 은행에서 계좌 이체를 하는 경우, 돈이 한 계좌에서 인출되고 다른 계좌에 입금된다. 트랜잭션 도중 실패가 발생하면 인출과 입금 모두 이루어지지 않도록 보장한다.

2. Consistency (일관성)

일관성은 트랜잭션이 성공적으로 완료되면 데이터베이스가 일관된 상태를 유지하도록 보장하는 특성이다.

  • 개념: 트랜잭션 전후에 데이터베이스의 제약 조건과 규칙이 항상 충족된다. 트랜잭션이 완료되면 데이터베이스는 올바른 상태로 남아있어야 한다.
  • 예시: 데이터베이스에 학생의 성적을 저장할 때, 성적은 항상 0에서 100 사이여야 한다는 제약 조건이 있다면, 이 조건이 트랜잭션 전후에도 유지된다.

3. Isolation (고립성)

고립성은 트랜잭션이 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행되도록 보장하는 특성이다.

  • 개념: 여러 트랜잭션이 동시에 수행될 때, 각 트랜잭션은 마치 자신만이 데이터베이스에서 실행되는 것처럼 독립적으로 수행된다. 이는 트랜잭션 간 간섭을 방지하고 데이터 무결성을 유지한다.
  • 예시: 두 사용자가 동시에 은행 계좌 잔액을 갱신하려고 할 때, 고립성은 한 사용자의 트랜잭션이 완료되기 전까지 다른 사용자의 트랜잭션이 영향을 받지 않도록 보장한다.

4. Durability (지속성)

지속성은 트랜잭션이 성공적으로 완료된 후 그 결과가 영구적으로 저장되도록 보장하는 특성이다.

  • 개념: 트랜잭션이 완료되면 그 결과는 영구적으로 데이터베이스에 반영된다. 시스템 장애나 충돌이 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않는다.
  • 예시: 전자 상거래 사이트에서 주문이 완료되면, 주문 내역은 시스템 오류가 발생하더라도 데이터베이스에 영구적으로 저장되어야 한다.

예시 시나리오: 은행 계좌 이체

  • 트랜잭션 A: 계좌 A에서 계좌 B로 $100 이체
    1. 계좌 A에서 $100 인출
    2. 계좌 B에 $100 입금

이 시나리오에서 ACID 원칙이 적용되는 방법은 다음과 같다:

  • 원자성: 계좌 A에서 $100이 인출되고 계좌 B에 입금되는 작업은 모두 완료되거나 모두 완료되지 않아야 한다. 둘 중 하나라도 실패하면 두 작업 모두 취소된다.
  • 일관성: 이체 전후에 계좌 잔액이 일관된 상태를 유지해야 한다. 예를 들어, 계좌 A와 B의 총합은 트랜잭션 전후에 변하지 않아야 한다.
  • 고립성: 다른 사용자가 동일한 계좌에서 동시에 다른 트랜잭션을 수행하더라도 각 트랜잭션은 서로 영향을 주지 않는다. 각 트랜잭션은 독립적으로 처리된다.
  • 지속성: 트랜잭션이 완료되면 시스템 오류나 충돌이 발생해도 이체 결과는 데이터베이스에 영구적으로 저장된다.

ACID 원칙은 데이터베이스의 신뢰성과 일관성을 유지하는 데 필수적인 역할을 하며, 특히 금융, 의료, 전자 상거래 등 중요한 데이터를 처리하는 시스템에서 매우 중요하다.