📚Read

MySQL로 배우는 데이터베이스 개론과 실습 2판: Chapter 08 트랜잭션, 동시성 제어, 회복

limdaeil 2025. 11. 25. 20:18

🔖Contents

🔥학습목표
    1. 트랜잭션의 개념을 이해하고 데이터베이스에서 이 개념이 왜 중요한지 알아본다.
    2. 트랜잭션 실행 시 동시성 제어가 필요한 이유를 알아보고, 락킹을 이용한 동시성 제어 기법을 살펴본다.
    3. 락킹보다 완화된 방법으로 트랜잭션의 동시성을 높이는 트랜잭션 고립 수준에 대해 알아본다.
    4. 데이터베이스 시스템에 문제가 생겼을 때 쓸 수 있는 복구 방법을 알아본다.

PREVIEW

일상생활에서 비즈니스는 거래를 중심으로 일어난다. 상품을 주문하고 입금하면 배송이 이루어지고, 판매처에서 배송 확인을 마치민 거래가 완료된다. 그러나 만약 거래가 중간에 멈추어. 입금했는데도 상품이 배송되지 않으민 문제가 된다. 다시 말해, 모든 거래는 배송 확인이 완료되거나 아예 취소되어야 한다. 마찬가지로, 데이터베이스에서도 거래를 처리한다. 이때 데이터베이스에서 이루어지는 거래를 트랜잭션(tansaction)이라고 한다. 트랜잭션은 데이터를 다루는 작업의 단위로, 거래가 일어나는 동안 데이터가 모두 빈경되거나 아무런 일도 일어나지 않아야 한다. 이를 통해 데이터베이스 시스템은 거래의 일관성과 안정성을 유지한다.

 

이 장에서는 트랜잭션의 개념과 성질에 대해 알아보고, 트랜책션이 동시에 실행될 때 오류 없이 실행되도록 제어하는 기법을 배운다. 또한 대이터베이스 시스템에 문제가 생길 때 데이터를 복구하는 알고리즘에 대해서도 알아본다. 이번 장을 학습하고 나민 데이터베이스가 어떻게 안정적으로 운영되고 거래 데이터가 소중히 보호되는지 이해하게 될 것이다.

01 트랜잭션

트랜잭션은 데이터베이스 관리 시스템(DBMS)에서 사용되는 작업(프로그램)의 단위로 원자성, 일관성, 고립성, 지속성이라는 성질을 갖는다. DBMS는 트랜잭션이 이러한 성질을 유지할 수 있도록 자원하여 데이터베이스의 안전성과 무결성을 보장한다.

트랜잭션의 개념

트랜잭션(transaction)은 DBMS에서 데이터를 다루는 논리적인 작업의 단위다. 트랜잭션은 SQL 문일 수도 있지만, 보통 여러 개의 SQL 문으로 구성된다. 데이터베이스에서 트랜잭션을 정의하는 이유는 다음과 같다.

  • 데이터베이스에서 데이터를 다룰 때 장애가 일어나는 경우가 있다. 트랜잭션은 장애 시 데이터를 복구하는 작업의 단위가 된다.
  • 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때가 있다. 트랜잭션은 이 작업을 서로 분리하는 단위가 된다.

BEGIN
	1) A 계좌에서 10,000원을 인출하는 SQL UPDATE 문
	2) B 계좌에 10,000원을 입금하는 SQL UPDATE 문
END

# 1)과 2)는 모두 수행되거나 아예 수행되지 않아야 한다

START TRANSACTION 문과 COMMIT 문: 하나의 논리적인 작업의 단위로 만들어준다

COMMIT: 트랜잭션의 종료를 알리는 SQL 문

START TRANSACTION
	1) A 계좌에서 10,000원을 인출하는 SQL UPDATE 문
	2) B 계좌에 10,000원을 입금하는 SQL UPDATE 문
COMMIT

# 1)과 2)는 모두 수행되거나 모두 수행되지 않는다!
  • 트랜잭션이 데이터베이스에서 실행될 때 일어나는 상황
# 테이블: Customer(name, balance)

START TRANSACTION 
# 1) 박지성 계좌를 읽어온다
# 2) 김연아 계좌를 읽어온다
	# 잔고 확인

# 3) 예금인출 박지성
UPDATE Customer
SET balance = balance - 10000
WHERE name = '박지성';

# 4) 예금입금 김연아
UPDATE Customer
SET balance = balance + 10000
WHERE name = '김연아';

COMMIT /* 부분 완료 */
# 5) 박지성 계좌를 기록한다
# 6) 김연아 계좌를 기록한다

트랜잭션은 데이터베이스에 저장된 테이블을 읽어와 주기억장치 버퍼에 저장하고,
버퍼에 저장된 데이터를 수정한 후 최종적으로 데이터베이스에 다시 저장한다

 

세부 과정

  1. A 계좌(박지성)의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다
  2. B 계좌(김연아)의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다
  3. A 계좌(박지성)에서 10,000원을 인출한 값을 저장한다
  4. B 계좌(김연아)에서 10,000원을 입금한 값을 저장한다
  5. A 계좌(박지성)의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다
  6. B 계좌(김연아)의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다

트랜잭션의 사실적인 종료는 1~6이 완전히 끝난 후지만, DBMS는 1~4까지만 수행하고 사용자에게 완료 사실을 알리고 나머지 5, 6은 DBMS가 책임지고 수행한다(1 → 2 → 3 → 4 → COMMIT → 5 → 6 → 완료)→ 이유 2: 5, 6의 과정은 시간이 많이 소요되고, 다른 트랜잭션이 또 Customer 테이블을 필요로 할 수도 있기 때문이다

 

트랜잭션은 임시로 종료를 선언하고 실제 데이터베이스에 기록하는 것은 DBMS가 수행한다. 이유는 DBMS가 동시에 많은 트랜잭션을 수행할 때, 각각의 트랜잭션이 하드디스크에 개별 접근하는 것을 피하고 DBMS가 일괄적으로 하드디스크에 접근하여 처리함으로써 사용자에게 빠른 응답성을 보장할 수 있다.

 

트랜잭션의 수행 과정: 시작(begin) → 수행(1, 2, 3, 4) → 부분완료 → 버퍼내용 기록(5, 6) → 완료(commit)

부분완료: 트랜잭션의 종료를 사용자나 다른 트랜잭션에게 알리는 단계로, 부분완료된 트랜잭션은 DBMS가 다른 트랜잭션의 작업 처리 상황을 봐가면서 변경 내용을 하드디스크에 기록한다.

 

이외 내용 모두 중요하므로 정리하지 않고 책으로 정리했다.