monimoni 2025. 5. 13. 19:51

1. 트랜잭션의 개념

  • 트랜잭션의 정의
    • 데이터베이스를 조작하기 위한 하나의 논리적 단위를 이루는 일련의 데이터베이스 연산의 집합
    • 예시 : 예금 인출
      • 작업 단위 : 예금 1000원 인출
      • 일련의 연산 : Read(A), A=A-1000, Write(A)
  • 데이터베이스를 사용하여 처리하는 작업을 하나의 묶음으로 인식하여 묶음 단위로 실행된 것과 동일한 결과가 도출되도록 정의한 개념

2. 데이터 읽기와 쓰기

  • 데이터베이스의 두 연산
    • Read(X)
      • 데이터베이스에서 데이터 X를 읽고, 트랜잭션이 실행되는 메모리의 변수 X에 값을 저장하는 연산
    • Write(X)
      • 트랜잭션이 실행되는 메모리에 있는 변수 X의 값을 데이터베이스에 저장하는 연산
  • 예시
    • 계좌 A에서 B로 1,000원을 이체하는 트랜잭션
Read(A)
A := A - 1000
Write(A)
Read(B)
B := B + 1000
Write(B)

3. 트랜잭션의 특징

  • 다수의 연산으로 구성된 트랜잭션이 사용자에게 단일작업처럼 다뤄지도록 ACID 특성을 준수
  • ACID 특성
    • 원자성( Atomicity )
      • 하나의 트랜잭션에 포함된 모든 연산은 완전히 수행되거나 전혀 수행되지 않음
    • 일관성( Consistency )
      • 특정 트랜잭션이 수행되기 전과 후에 데이터베이스가 일관된 상태를 유지
    • 고립성( Isolation )
      • 특정 트랜잭션이 데이터베이스를 갱신하는 동안 다른 트랜잭션에 의해 방해받지 않음
    • 지속성( Durability )
      • 완료된 트랜잭션의 결과는 어떠한 시스템의 장애에도 데이터베이스에 반영되어야 함

4. 트랜잭션 실행 연산자

  • 트랜잭션 실행의 연산
    • 커밋( commit )
      • 트랜잭션 연산에 의해 갱신된 데이터 항목의 값을 데이터베이스에 반영시키고 지속성을 확보
    • 롤백( rollback )
      • 트랜잭션이 중단되기 이전까지 수행한 연산에 의해 갱신된 모든 데이터 항목의 값을 무효화하여 일관성을 확보

5. 트랜잭션의 5가지 상태 변화

  • 트랜잭션의 상태
    • 동작 : 트랜잭션이 시작을 준비 또는 실행 중인 상태
    • 부분 커밋 : 마지막 연산을 실행한 직후의 상태
    • 커밋 : 모든 실행이 성공적으로 완료된 후의 상태
    • 실패 : 실행이 정상적으로 진행될 수 없는 상태
    • 중단 : 실행 실패로 롤백되고 시작 이전의 상태로 환원된 상태
  • 상태 전이 흐름도
    • 동작 → 부분 커밋 → 커밋
    • 동작 → 실패 → 중단

6. 동시성 고려

  • DBMS는 다수의 사용자가 데이터베이스를 공용으로 사용하기 위한 목적으로 도입
  • 다중 사용자 환경에서 트랜잭션의 동시 실행으로 데이터 갱신 시, 일관성 훼손 문제가 발생
  • 트랜잭션 동시 실행의 이점
    • 트랜잭션 처리율과 자원 이용률을 향상
    • 트랜잭션의 대기 시간을 감소
  • 동시성 제어 ( concurrency control )
    • 다수의 트랜잭션이 성공적으로 동시에 실행되어도 일관성을 유지할 수 있도록 지원하는 기법

7. 스케줄의 개념

  • 스케줄( schedule ) : 다수의 트랜잭션에 포함된 연산의 실행 순서를 명시한 것
    • 예제 트랜잭션
      • A와 B에 각각 10,000원과 20,000원 잔액
      • T₁ : 1000원을 계좌 A에서 B로 이체
      • T₂ : 계좌 A의 잔고에서 20%를 B로 이체
  • 직렬 스케줄 : 각 트랜잭션에 속한 모든 연산이 순차적으로 실행되는 스케줄
  • 병렬 스케줄 : 하나의 트랜잭션이 완료되기 전에 다른 트랜잭션이 실행되는 스케줄( 비순차적으로 실행 )
    • 병렬 스케줄의 순서로 연산을 수행할 경우, 일관성 훼손 문제가 발생할 가능성 내포

8. 트랜잭션의 직렬화

  • 직렬 가능 스케줄
    • 복수개의 트랜잭션이 동시에 수행된 결과가 직렬 스케줄의 결과와 동일한 스케줄
    • 트랜잭션 간 연산 순서를 교환하여 트랜잭션을 직렬 스케줄과 동등하게 변환이 가능한 스케줄
    • 사용된 Read와 Write 연산 교환 시 상황에 따라 실행 결과에 일관성이 훼손되는 현상( 충돌 )이 발생
    • 연산 순서의 교환 ( 단, 𝑰ᵢ는 𝑻ᵢ의 연산 )
      • Iᵢ = Read(Q) ↔ Iⱼ = Read(Q) ← (충돌 없음)
        Iᵢ = Read(Q) ↔ Iⱼ = Write(Q) ← (충돌 발생)
        Iᵢ = Write(Q) ↔ Iⱼ = Read(Q) ← (충돌 발생)
        Iᵢ = Write(Q) ↔ Iⱼ = Write(Q) ← (충돌 발생)
      • 동일한 항목에 대해서 wirte 작업이 포함될 경우, 충돌 발생
        • 서로 다른 항목에서 작업을 진행하는 경우에는 충돌이 발생하지 않음

9. 충돌 동등

  • 특정 스케줄 S에서 충돌이 일어나지 않는 연산의 순서를 바꿔 스케줄 S′으로 변환이 가능한 상태

10. 충돌 직렬성

  • 순서 교환이 가능한 연산을 교환하여 직렬 스케줄의 연산과 동등하게 변환이 가능한 스케줄

11. 회복의 개념

  • 트랜잭션 실패 시, 원자성을 보장하기 위해 실행된 모든 연산을 실행 이전 상태로 복원하는 기법
  • 회복 불가능한 스케줄
    • T₆은 T₅가 기록한 A를 읽고 커밋한 상태
      • T₆는 T₅에 종속적( dependent )
    • 커밋한 T₅는 롤백 불가능
      • 회복 불가능

12. 회복 가능한 스케줄

  • Tᵢ와 Tⱼ에 대해, Tᵢ가 기록한 데이터를 Tⱼ가 읽을 때, Tᵢ의 커밋이 Tⱼ보다 먼저 나타나는 스케줄
  • 연쇄적 롤백 유발 가능
    • T₇의 롤백으로 인하여 연쇄적으로 다른 트랜잭션들도 롤백되는 현상

13. 비연쇄적 스케줄

  • 대량의 회복 연산이 발생하는 연쇄적 롤백을 방지하기 위해 연쇄적이지 않은 연산 순서로 구성된 스케줄
  • Tᵢ가 기록한 데이터를 읽을 때, Tᵢ의 커밋이 Tⱼ의 읽기 연산보다 먼저 나타나는 스케줄
728x90