본문 바로가기
DBMS/데이터베이스

[데이터베이스] 트랜잭션 개념과 관리 방안 수립

by 클레어몬트 2025. 2. 6.

DB에서 트랜잭션 관리는 필수적인 요소이다. 데이터의 무결성을 유지하고, 동시 접근을 효율적으로 제어하며, 장애 발생 시 복구할 수 있도록 설계해야 한다. 이를 위해 트랜잭션 관리 방안을 수립하는 것이 중요하다. 이번 포스팅에서는 트랜잭션 개념과 트랜잭션 관리 방안, 그리고 트랜잭션의 상태 변화와 격리 수준까지 알아보자~!

 

 

ㅁ트랜잭션(transaction): 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위

개인적으로 나는 트랜잭션이라 하면 파란색 전기가 떠오른다 ㅎ

 

 

(트랜잭션 관리의 중요성)

하나의 트랜잭션은 여러 개의 작업(쿼리)으로 구성될 수 있으며, 모든 작업이 성공적으로 완료되어야만 데이터베이스에 반영된다. 트랜잭션 관리를 통해 다음과 같은 기능을 제공할 수 있다.

  • 데이터 무결성 유지
  • 동시 접근 제어(락을 사용)
  • 장애 발생 시 복구 기능 제공

 

ACID 속성

 

트랜잭션이 올바르게 수행되기 위해서는 ACID 속성을 준수해야 한다. ACID는 다음 네 가지 속성으로 구성된다.

  • 원자성(Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 한다
  • 일관성(Consistency): 트랜잭션이 실행된 후에도 데이터베이스가 일관된 상태를 유지해야 한다
  • 격리성(Isolation): 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 한다
  • 지속성(Durability): 트랜잭션이 완료된 후에도 결과가 영구적으로 저장되어야 한다

 

트랜잭션 제어 기능들

 

트랜잭션을 효과적으로 관리하기 위해 다양한 트랜잭션 제어 기능을 제공한다. 대표적인 트랜잭션 제어 기능은 다음과 같다.


1. 트랜잭션 시작과 종료
- BEGIN TRANSACTION: 트랜잭션의 시작을 명시적으로 선언한다.

- 커밋(COMMIT): 모든 작업을 정상적으로 수행한 후 변경 사항을 데이터베이스에 영구적으로 반영한다

- 롤백(ROLLBACK): 오류 발생 시 변경 사항을 취소하고 트랜잭션을 초기 상태로 되돌린다

 

※ 트랜잭션의 상태 변화

트랜잭션은 수행 중 특정 상태를 거치며 최종적으로 커밋되거나 롤백된다. 각각의 상태에서 데이터의 접근성과 잠금 상태가 다르게 동작한다.

 

① 커밋(Commit) 혹은 롤백(Rollback) 하기 전 상태

  • 모든 데이터의 변경 사항은 데이터베이스 버퍼(Database Buffer)에 저장된다.
  • 현재 트랜잭션을 수행하는 사용자는 자신이 변경한 데이터를 SELECT 문을 통해 볼 수 있지만 "다른 사용자는 그 변경된 내용을 확인할 수 없다"
  • 트랜잭션이 변경한 데이터(Row)는 잠금(Lock) 상태에 놓이며, 다른 사용자가 해당 데이터를 수정할 수 없다.
  • 이러한 방식은 Row Level Locking Mechanism을 기반으로 한다.

② 커밋(Commit)한 후의 상태

  • 트랜잭션 내에서 변경된 데이터가 데이터베이스에 영구적으로 반영된다.
  • "다른 모든 사용자가 해당 데이터를 조회할 수 있다"
  • 해당 데이터(Row)에 설정된 잠금(Lock)이 해제된다.


2. 동시성 제어
- 낙관적 동시성 제어(Optimistic Concurrency Control): 트랜잭션 간 충돌이 드물다고 가정하고, 변경 사항을 최종적으로 검증하여 충돌이 발생하면 롤백하는 방식이다.


- 비관적 동시성 제어(Pessimistic Concurrency Control): 트랜잭션이 실행되는 동안 을 걸어 충돌을 사전에 방지하는 방식이다.

 


3. 트랜잭션의 격리 수준 4단계

실무에서는 2번째 READ COMMITTED가 가장 많이 사용된다

 

- Dirty Read (더티 리드): 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 경우

데이터 일관성이 깨질 수 있다!

 

예시

  • A 트랜잭션이 잔액을 100만 원 → 50만 원으로 변경 (아직 커밋되지 않음)
  • B 트랜잭션이 A의 변경된 데이터(잔액 50만 원)를 읽음
  • 이후 A 트랜잭션이 롤백되면, B는 잘못된 데이터를 본 셈이 됨

- Non-Repeatable Read (반복 불가능한 읽기): 하나의 트랜잭션 내에서 동일한 데이터를 두 번 읽었는데 값이 다르게 나오는 경우

일관성 문제 발생

 

예시

  • A 트랜잭션이 잔액 100만 원 조회
  • B 트랜잭션이 잔액을 200만 원으로 수정 후 커밋
  • A 트랜잭션이 같은 데이터를 다시 조회하면 200만 원으로 변경됨 → 값이 달라짐

- Phantom Read (팬텀 리드): 트랜잭션 중간에 다른 트랜잭션이 데이터를 추가 또는 삭제하여 조회 결과의 개수가 바뀌는 현상

예시

  • A 트랜잭션이 고객 수를 조회한 결과 10명
  • B 트랜잭션이 새로운 고객을 추가하고 커밋
  • A 트랜잭션이 동일한 조건으로 다시 조회했을 때 고객 수가 11명으로 증가 → 처음 조회와 다름

 

 

 

 

트랜잭션 관리는 데이터베이스 시스템의 신뢰성과 성능을 보장하는 중요한 요소이다. ACID 속성을 준수하면서 적절한 트랜잭션 제어 기능을 활용하면 안정적인 데이터베이스 운영이 가능하다! 중요 또 중요