데이터베이스

트랜잭션의 ACID 특성

♠디지털 모험일지♠ 2024. 10. 29. 20:15
728x90
반응형
SMALL

1. 원자성 (Atomicity)

  • 개념:
    원자성은 트랜잭션의 모든 작업이 모두 성공하거나 모두 실패해야 한다는 원칙입니다. 즉, 트랜잭션 내의 작업들이 하나의 단위로 처리되어야 하며, 일부만 처리되거나 중간에 실패해서는 안 됩니다. 만약 트랜잭션 도중 오류가 발생하면, 이미 완료된 작업도 취소하여 처음 상태로 돌아가야 합니다.

  • 쉽게 설명:
    원자성은 "올바른 결과가 나오지 않으면, 아무 일도 일어나지 않은 것처럼 되돌려야 한다"는 원칙입니다. 예를 들어, 은행에서 돈을 이체할 때 송금자 계좌에서 돈을 빼고 수신자 계좌에 입금하는 작업이 동시에 완료되거나, 둘 다 완료되지 않아야 합니다.

  • 예시 코드:

    BEGIN TRANSACTION;
    
    -- 송금자 계좌에서 1000원을 차감
    UPDATE accounts SET balance = balance - 1000 WHERE account_id = 'sender';
    
    -- 수신자 계좌에 1000원을 추가
    UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'receiver';
    
    COMMIT;  -- 모든 작업이 성공하면 확정
    
    -- 만약 중간에 오류가 발생하면
    ROLLBACK;  -- 처음 상태로 되돌림

    여기서 하나의 작업이라도 실패하면 ROLLBACK을 통해 전체 트랜잭션이 취소되고 처음 상태로 돌아갑니다.


2. 일관성 (Consistency)

  • 개념:
    일관성은 트랜잭션이 실행되기 전과 후에 데이터베이스의 상태가 일관된 상태를 유지해야 한다는 원칙입니다. 트랜잭션이 완료되면, 모든 데이터는 데이터베이스가 정의한 제약 조건(예: 데이터 유형, 범위, 고유성 등)을 충족하여 데이터 무결성이 유지되어야 합니다.
  • 쉽게 설명:
    일관성은 "트랜잭션이 성공하면 데이터베이스는 항상 일관성 있는 상태로 유지되어야 한다"는 원칙입니다. 예를 들어, 은행 계좌에 음수 잔액이 허용되지 않는다면, 트랜잭션 후에도 이 규칙이 지켜져야 합니다.
  • 예시:
    만약 accounts 테이블의 잔액이 음수일 수 없다는 조건이 있다면, 일관성 규칙에 따라 어떤 트랜잭션이든 잔액이 음수가 되도록 허용되지 않습니다. 만약 잔액이 음수가 되는 작업이 실행되면, 일관성 위배로 인해 트랜잭션은 취소됩니다.

3. 고립성 (Isolation)

  • 개념:
    고립성은 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션이 서로 영향을 받지 않고 독립적으로 수행되어야 한다는 원칙입니다. 고립성은 트랜잭션 간의 데이터 간섭을 막아 트랜잭션의 독립성을 보장합니다. 이를 위해 데이터베이스는 특정 수준의 격리(Isolation Level)를 적용합니다.

  • 쉽게 설명:
    고립성은 "다른 트랜잭션이 동시에 실행되더라도 내 작업에는 영향을 주지 않아야 한다"는 원칙입니다. 예를 들어, A와 B 사용자가 동시에 동일한 계좌의 잔액을 조회하고 갱신하려 할 때, 고립성은 A와 B의 작업이 서로 간섭하지 않도록 합니다.

  • 예시 코드:
    고립성 레벨을 설정하여 트랜잭션 간 간섭을 최소화할 수 있습니다.

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    
    BEGIN TRANSACTION;
    
    -- 트랜잭션 처리
    UPDATE accounts SET balance = balance + 500 WHERE account_id = 'user1';
    
    COMMIT;

    SERIALIZABLE 수준은 가장 높은 고립성 레벨로, 다른 트랜잭션이 동시에 접근하지 못하게 합니다. 하지만, 고립성 수준이 높을수록 성능이 저하될 수 있습니다.


4. 지속성 (Durability)

  • 개념:
    지속성은 트랜잭션이 성공적으로 완료되면 시스템 오류가 발생해도 그 결과가 보장되어야 한다는 원칙입니다. 트랜잭션이 성공적으로 완료되면, 변경된 데이터는 디스크 등에 안전하게 저장되어 전원이 꺼지거나 시스템 오류가 나도 데이터가 보존됩니다.
  • 쉽게 설명:
    지속성은 "한 번 완료된 작업은 영구히 유지된다"는 원칙입니다. 예를 들어, 송금이 완료되었다면 시스템이 꺼져도 데이터베이스는 송금 내역을 저장해 두어야 합니다.
  • 예시:
    데이터베이스는 트랜잭션이 완료되면 변경된 데이터를 영구적으로 저장하여 시스템 오류가 발생하더라도 트랜잭션 결과가 유지되도록 합니다. 이를 위해 COMMIT이 수행되면 데이터가 디스크에 기록되어 안정성이 확보됩니다.

ACID 특성 요약 표

특성 설명 쉽게 설명
원자성 트랜잭션 내 모든 작업이 성공하거나 모두 실패해야 함 "모든 것이 성공하지 않으면 아무 일도 일어나지 않은 것처럼 되돌려야 함"
일관성 트랜잭션 전후에 데이터의 무결성이 유지되어야 함 "트랜잭션이 성공해도 데이터베이스 규칙이 깨지지 않도록 함"
고립성 여러 트랜잭션이 동시에 실행되어도 서로 간섭하지 않도록 함 "내 작업이 다른 작업과 혼선되지 않도록 함"
지속성 트랜잭션 완료 후 시스템 오류가 나도 데이터는 영구히 유지됨 "한 번 완료된 작업은 영구히 기록되어 시스템 오류가 나도 유지됨"

ACID 특성은 데이터베이스가 트랜잭션을 안정적이고 일관되게 처리하도록 보장하는 중요한 원칙입니다. 이를 통해 데이터의 신뢰성을 유지하고, 시스템 장애 발생 시에도 안전하게 데이터를 관리할 수 있습니다.

반응형
SMALL