Akashic Records

데이터베이스 트랜젝션(Transactoin) - ACID (Consistency) 본문

Database Learning Guide

데이터베이스 트랜젝션(Transactoin) - ACID (Consistency)

Andrew's Akashic Records 2024. 11. 20. 10:43
728x90

데이터베이스에서 트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키는 작업의 논리적인 단위입니다. 일반적으로 트랜잭션은 여러 작업을 하나로 묶어 데이터의 일관성을 보장하는 역할을 합니다. 트랜잭션의 가장 큰 특징은 모든 작업이 성공적으로 완료되거나, 그렇지 않을 경우 모두 원래대로 복구되어야 한다는 점입니다. 이 원칙은 데이터베이스의 무결성과 일관성을 유지하는 데 중요합니다.

 

트랜잭션에는 보통 다음과 같은 4가지 성질이 있습니다. 이를 ACID라고 합니다:

1. Atomicity (원자성)

데이터베이스 트랜젝션(Transactoin) - ACID (Atomicity)

2. Consistency (일관성)

데이터베이스의 트랜잭션(Transaction)에서 일관성(Consistency)은 트랜잭션이 실행되기 전후에 데이터베이스의 상태가 일관성을 유지해야 함을 의미합니다. 즉, 트랜잭션이 성공적으로 완료될 때마다 데이터베이스는 항상 일관된 상태에 있어야 하며, 어떠한 변경 작업도 데이터의 무결성을 해쳐서는 안 됩니다. 이는 트랜잭션이 수행된 결과가 모든 데이터 무결성 제약 조건을 만족해야 함을 보장합니다.

일관성의 주요 개념

  1. 일관된 상태에서 일관된 상태로의 전환:
    • 데이터베이스는 트랜잭션 실행 전의 상태와 트랜잭션 실행 후의 상태가 모두 일관된 상태이어야 합니다. 일관된 상태란 데이터베이스의 모든 무결성 제약 조건(예: 기본키, 외래키, 제약 조건 등)을 만족하는 상태를 말합니다.
    • 트랜잭션이 시작될 때 데이터베이스가 일관된 상태에 있다면, 트랜잭션이 정상적으로 완료(커밋)된 후에도 데이터베이스는 여전히 일관된 상태로 유지되어야 합니다. 만약 트랜잭션 중 오류가 발생하거나 중단되면, 롤백(Rollback)을 통해 데이터베이스를 이전의 일관된 상태로 되돌려야 합니다.
  2. 무결성 제약 조건:
    무결성 제약 조건은 데이터베이스에서 일관성을 유지하는 가장 중요한 요소 중 하나로, 데이터의 유효성을 보장하는 규칙을 설정합니다. 
    • 기본 키 제약 (Primary Key Constraint):
      • 테이블의 각 행을 고유하게 식별하는 기본 키를 설정하여 중복된 데이터가 삽입되지 않도록 보장합니다. 기본 키 제약을 통해 테이블의 각 행이 유일성을 가지므로, 데이터 일관성을 유지할 수 있습니다.
    • 외래 키 제약 (Foreign Key Constraint):
      • 참조 무결성을 보장하기 위해 다른 테이블의 데이터를 참조할 때 사용하는 제약 조건입니다. 외래 키 제약은 데이터의 참조 관계를 강제하여, 참조하는 데이터가 반드시 존재하도록 보장합니다.
      • 예를 들어, 주문 테이블이 고객 테이블을 참조할 때, 고객이 삭제되면 주문도 일관성을 유지하기 위해 자동으로 처리해야 합니다.
    • 고유성 제약 (Unique Constraint):
      • 특정 컬럼의 값이 고유하도록 보장하여 중복을 방지합니다. 이는 일관된 데이터를 유지하고 데이터베이스의 무결성을 유지하는 데 도움을 줍니다.
    • 체크 제약 (Check Constraint):
      • 컬럼의 값이 특정 조건을 만족하도록 제한합니다. 예를 들어, 급여 컬럼의 값이 음수가 되지 않도록 하는 규칙을 설정할 수 있습니다. 이러한 제약 조건은 데이터의 유효성과 무결성을 보장합니다.
  3. 트랜잭션에 의한 무결성 보장:
    • 데이터베이스 트랜잭션은 일관성을 유지하기 위해 데이터베이스의 모든 무결성 제약 조건을 만족하는 방식으로 작업을 수행해야 합니다. 예를 들어, 트랜잭션이 수행되는 도중에 데이터베이스의 상태가 일관성을 깨트릴 수 있는 작업이 수행된다면, 트랜잭션은 롤백되어야 합니다.
    • 일관성을 유지하기 위해 트랜잭션 내의 연산은 모두 정확하게 수행되어야 하며, 이러한 작업이 성공적으로 완료된 경우에만 데이터베이스에 반영됩니다.

예시를 통한 이해

예를 들어, 은행의 계좌 이체를 생각해 보겠습니다. A 계좌에서 B 계좌로 100달러를 이체하는 트랜잭션을 가정합니다. 이 트랜잭션은 다음과 같은 두 가지 작업으로 구성됩니다.

  1. A 계좌에서 100달러 출금.
  2. B 계좌에 100달러 입금.

이 트랜잭션이 수행되기 전에는 A와 B 계좌의 총액이 1000달러라고 가정합니다. 트랜잭션이 완료된 후에도 A와 B 계좌의 총액은 여전히 1000달러이어야 합니다. 이때 일관성을 유지한다는 의미는 다음과 같습니다:

  • 트랜잭션이 정상적으로 완료되면, A 계좌에서 100달러가 줄어들고 B 계좌에 100달러가 추가되면서 총액이 변함없이 1000달러가 되어야 합니다.
  • 만약 트랜잭션 중 오류가 발생해 A 계좌에서 출금은 완료되었지만, B 계좌로 입금이 이루어지지 않았다면, 일관성이 깨진 상태가 됩니다. 따라서 이러한 경우에는 롤백을 통해 A 계좌의 출금을 취소하여 총액이 다시 일관된 상태로 유지되도록 해야 합니다.
728x90

일관성 보장의 요소

  1. 무결성 제약 설정:
    • 데이터베이스에서 무결성 제약 조건을 설정하는 것이 일관성 유지의 핵심입니다. 이러한 제약 조건들은 트랜잭션이 수행될 때 데이터의 유효성을 보장합니다.
    • 예를 들어, 외래키 제약 조건을 사용하면 한 테이블의 데이터가 참조하는 다른 테이블의 데이터가 반드시 존재하도록 하여 데이터의 일관성을 보장할 수 있습니다.
  2. 트랜잭션 관리 시스템:
    • 트랜잭션 관리 시스템은 트랜잭션이 올바르게 수행되도록 보장하고, 만약 오류가 발생할 경우 롤백을 통해 데이터베이스의 일관성을 회복합니다.
    • 모든 트랜잭션은 데이터의 무결성을 검증하며, 만약 트랜잭션이 무결성을 위반하는 경우 트랜잭션이 완료되지 않고 자동으로 취소됩니다.
  3. 롤백 (Rollback)과 커밋 (Commit):
    • 트랜잭션이 성공적으로 완료되면 커밋(Commit)을 통해 데이터가 영구적으로 저장되며, 데이터베이스는 새로운 일관된 상태로 유지됩니다.
    • 반면, 트랜잭션 도중 오류가 발생하면 롤백(Rollback)을 통해 이전 상태로 되돌리며, 데이터베이스가 일관성을 잃지 않도록 합니다.
  4. 비즈니스 로직 검증:
    • 비즈니스 규칙에 따라 데이터의 일관성을 유지하는 것도 중요합니다. 예를 들어, 상품 재고 관리 시스템에서 재고가 0 미만으로 떨어지지 않도록 검증하는 로직이 트랜잭션에 포함되어야 합니다.
  5. 동시성 제어 (Concurrency Control)
    • 잠금(Locking):
      • 락(lock)은 여러 트랜잭션이 동시에 동일한 데이터에 접근하는 것을 제어하여 데이터베이스의 일관성을 유지합니다.
      • 공유 잠금(Shared Lock): 데이터를 읽는 동안 다른 트랜잭션도 읽을 수 있지만, 수정은 할 수 없도록 제한합니다.
      • 배타 잠금(Exclusive Lock): 데이터를 수정 중일 때 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 막습니다.
    • 낙관적 동시성 제어 (Optimistic Concurrency Control):
      • 낙관적 동시성 제어는 충돌이 거의 일어나지 않는다고 가정하고, 트랜잭션이 끝날 때 충돌 여부를 확인하여 문제가 있을 경우 롤백을 수행합니다. 이 방식은 주로 읽기 작업이 많은 환경에서 효율적입니다.
    • 비관적 동시성 제어 (Pessimistic Concurrency Control):
      • 비관적 동시성 제어는 트랜잭션이 시작될 때 잠금을 설정하여 다른 트랜잭션이 충돌하는 것을 방지합니다. 이는 충돌 가능성이 높은 환경에서 데이터의 일관성을 보장하는 데 사용됩니다.

일관성과 ACID 속성의 관계

  • 원자성(Atomicity)일관성(Consistency)은 밀접하게 연결되어 있습니다. 트랜잭션의 원자성이 보장될 경우, 트랜잭션이 모두 성공하거나 전혀 수행되지 않음으로 인해 데이터베이스는 항상 일관된 상태를 유지하게 됩니다.
  • 격리성(Isolation)은 여러 트랜잭션이 동시에 수행되더라도 각 트랜잭션이 서로의 중간 상태를 보지 않도록 하여 일관성을 유지하는 데 중요한 역할을 합니다.
  • 지속성(Durability)은 일관성을 보장하는 또 다른 측면으로, 트랜잭션이 커밋된 후에는 그 결과가 데이터베이스에 영구적으로 반영되어야 함을 의미합니다. 즉, 일관된 상태의 데이터가 데이터베이스에 안전하게 저장된다는 것을 보장합니다.

3. Isolation(격리성)

데이터베이스 트랜젝션(Transactoin) - ACID (Isolation)

4. Durability(지속성)

데이터베이스 트랜젝션(Transactoin) - ACID (Durability)

Database Transaction

 

728x90
Comments