IT Study/데이터베이스 및 데이터 처리

🧰 트랜잭션(Transaction)의 ACID 원칙과 락(Lock) 이해

cs_bot 2025. 4. 7. 16:46

☐ 트랜잭션(Transaction) 개요

  • 데이터베이스 상에서 하나의 논리적인 작업 단위를 의미함
  • 사용자의 업무 수행 중 하나의 작업을 수행하는 최소 실행 단위임
  • 일반적으로 SQL의 BEGIN ~ COMMIT / ROLLBACK 블록에 해당함
  • 데이터의 일관성과 무결성을 보장하기 위한 기초 개념임
  • 예시: 계좌 이체 시 A 계좌에서 출금하고 B 계좌로 입금하는 작업은 하나의 트랜잭션으로 구성됨

☐ 트랜잭션의 4대 특성: ACID 원칙

▷ A: 원자성(Atomicity)

  • 트랜잭션 내 모든 작업이 전부 성공하거나 전부 실패해야 함
  • 중간 작업의 부분 완료는 허용되지 않음
  • 트랜잭션 실패 시, 모든 작업은 이전 상태로 복구됨 (Rollback 메커니즘 활용)
  • 예시: A→B 이체 중 A의 출금은 성공했으나 B의 입금 실패 시, A의 출금도 무효화되어야 함

▷ C: 일관성(Consistency)

  • 트랜잭션 수행 전과 후의 데이터베이스 상태가 모두 일관성을 유지해야 함
  • DB 내 정의된 무결성 제약조건, 트리거 조건 등을 위반하지 않아야 함
  • 트랜잭션 실패 및 성공 여부와 관계없이 데이터 무결성 보장됨

▷ I: 독립성(Isolation)

  • 동시에 실행 중인 트랜잭션이 서로 간섭하지 않도록 격리되어야 함
  • 트랜잭션 간 중간 결과가 다른 트랜잭션에 보이지 않도록 보호됨
  • 격리 수준에 따라 Read Uncommitted ~ Serializable로 구분됨

▷ D: 지속성(Durability)

  • 트랜잭션이 정상적으로 완료되면 그 결과는 영구적으로 저장되어야 함
  • 시스템 장애가 발생하더라도 커밋된 데이터는 손실되지 않음
  • 디스크 기반 저장, WAL(Write Ahead Logging), 로그 백업 등으로 보장됨

☐ 락(Lock)의 개요 및 필요성

  • 병행 제어(Concurrency Control)를 위한 대표적인 동기화 메커니즘
  • 동시에 여러 트랜잭션이 데이터에 접근할 때 발생 가능한 충돌 방지 목적
  • 트랜잭션 간 독립성을 보장하고, ACID의 Isolation을 실현하는 수단임
  • 주로 Shared Lock(읽기) / Exclusive Lock(쓰기)으로 구분함

☐ 락(Lock)의 종류와 세부 설명

▷ 공유 락(Shared Lock, S-Lock)

  • 데이터를 읽을 때 부여되는 락
  • 다수의 트랜잭션이 동시에 같은 데이터를 읽을 수 있음
  • 쓰기 작업은 불가능함

▷ 배타 락(Exclusive Lock, X-Lock)

  • 데이터를 수정할 때 부여되는 락
  • 동시에 다른 트랜잭션은 읽기/쓰기를 모두 수행할 수 없음
  • 완전한 독점적 제어가 필요할 때 사용됨

▷ 의도적 락(Intent Lock)

  • 상위 객체에 락을 걸기 위한 사전 선언 락
  • 트리 구조 인덱스 구조에서 부분 범위 락 동기화 시 사용됨

▷ 정점 락(Degree of Locking)

  • Row-level Lock: 세밀한 제어 가능, 병행성 우수
  • Page-level Lock: 균형 잡힌 성능
  • Table-level Lock: 락 오버헤드 작으나 병행성 저하 우려

☐ 트랜잭션과 락의 상호작용

  • 트랜잭션은 작업 도중 대상 데이터에 락을 설정하고 해제함
  • 락 보유 중 다른 트랜잭션은 해당 자원에 접근하지 못함
  • 격리 수준이 높을수록 락의 지속 시간이 길어짐
  • 락 경쟁 심화 시 교착상태(Deadlock) 발생 가능성 있음

☐ 교착 상태(Deadlock)와 회피 기법

▷ 교착 상태 개념

  • 서로 다른 트랜잭션이 상대가 가진 자원을 기다리며 무한 대기하는 상황
  • 시스템 전체의 처리 성능 저하 유발

▷ 회피 기법

  • 타임아웃: 일정 시간 대기 후 강제 종료
  • 자원 할당 그래프 분석: 순환 구조 감지 시 트랜잭션 중단
  • Wait-Die / Wound-Wait: 우선순위 기반 선점 기법

☐ 병행 제어의 다른 방식과 비교

구분 락 기반 제어 타임스탬프 기반 제어 낙관적 병행 제어
방식 자원 선점 타임스탬프 비교 충돌 발생 후 롤백
장점 구현 간단 Deadlock 없음 병행성 우수
단점 교착 상태 가능성 트랜잭션 무효 가능성 충돌 시 성능 저하

☐ 결론 및 시사점

  • ACID 원칙은 트랜잭션 설계와 실행의 근간이 되는 핵심 요소임
  • 그중 Isolation 실현을 위한 수단으로 락이 광범위하게 활용됨
  • 데이터베이스 설계 및 트랜잭션 구현 시, 락의 적절한 사용은 성능과 무결성 모두에 영향을 미침
  • 지나치게 보수적인 락 전략은 성능 저하, 느슨한 전략은 데이터 오류 가능성 초래함
  • 락과 병행 제어 전략에 대한 심층 이해는 고성능 DB 시스템 설계 및 장애 대응 능력 향상의 핵심 요소임