CS/Database

Transaction (2) - 동시성 제어

leah-only 2025. 6. 23. 16:14

🔒 Serializability & Recoverability

트랜잭션의 ACID 속성 중 'Isolation(격리성)'을 보장하기 위한 두 핵심 개념인 Serializability와 Recoverability에 대해 알아보자.


🧩 동시성 제어 (Concurrency Control)

여러 트랜잭션이 동시에 실행되더라도 데이터 정합성과 무결성을 보장하는 기능

DBNS는 이 기능을 위해 2가지 속성을 보장해야 한다.

  • ✅ Serializability (직렬 가능성)
  • ✅ Recoverability (회복 가능성)

1️⃣ Serializability (직렬 가능성)

📌 개념

여러 트랜잭션이 병렬로 실행되더라도, 결과는 마치 순차적으로 실행된 것처럼 나와야 한다. 

즉, non-serial schedule이라 하더라도 serial schedule과 결과가 같아야 함. 

 

📊 용어 정리

용어 의미
R1(A) 트랜잭션 1이 A를 읽음 (Read)
W1(A) 트랜잭션 1이 A를 씀 (Write)
Schedule 여러 트랜잭션의 operation 실행 순서를 나열한 것

 

✅ Serial Schedule

  • 트랜잭션들이 겹치지 않고 하나씩 순차 실행
  • 장점 : 순서와 정합성이 보장되어 안전
  • 단점 : 성능 낮음

✅ non-serial Schedule

  • 트랜잭션들이 겹쳐 실행 (interleaving)
  • 장점 : 병렬로 처리→ 동시성이 높아진다. 즉, 성능이 좋다.
  • 단점 : 이상 현상 발생 (정합성에 문제 발생 가능)

🌟 Conflict Serializability

Non-serial schedule이지만, 순서만 다를 뿐 결과가 동일하면 OK

 

🔹 Conflict란?

두 연산이 아래 조건을 모두 만족하면 Conflict 이다.

  • 서로 다른 트랜잭션
  • 동일한 데이터 접근
  • 최소 하나는 Write
💡 Conflict 순서를 바꾸면 결과도 바뀌므로 순서 중요!

 

🔹 Conflict Equivalent

두 스케줄이 다음을 만족하면 equivalent

  • 동일 트랜잭션 구성
  • Conflict 연산들의 실행 순서 동일

🔹 Conflict Serializable

한 스케줄이 Serial 스케줄과 Conflict Equivalent 하면 

그 스케줄은 Conflict Serializable 하다. 

 

✅ 정리

DBMS는 대부분 Conflict Serializable한 non-serial schedule만 허용하여 성능과 정합성을 동시에 잡는다. 


2️⃣ Recoverability (회복 가능성)

📌 개념

트랜잭션이 실패했을 때, 다른 트랜잭션에 영향을 주지 ㅇ낳고 안전하게 복구할 수 있어야 한다. 

 

⚠️ Unrecoverable Schedule

  • 한 트랜잭션이 다른 트랜잭션의 결과(커밋 전)를 읽고, 먼저 커밋해버리는 경우
  • 이때 원래 트랜잭션이 롤백되면 복구 불가
  • 이 상황은 Dirty Read(더티 리드)라고도 함
T2 → W(B)
T1 → R(B)  ← 커밋
T2 → 롤백 ❌

 

✅ Recoverable Schedule

어떤 트랜잭션이 다른 트랜잭션의 데이터를 읽는 경우, 그 트랜잭션이 커밋하기 전까지는 커밋하지 않는 스케줄

→ 복구 가능함!

 

😵 Cascading Rollback

  • 트랜잭션 A가 트랜잭션 B의 데이터를 읽었는데
  • B가 롤백되면 A도 같이 롤백해야 하는 연쇄 복구 현상

비용 크고, 복잡함

 

 

✅ Cascadeless Schedule

커밋되지 않은 트랜잭션의 데이터는 읽지도 않음

  • Read는 무조건 커밋된 데이터만
  • Cascading rollback이 발생하지 않음 → 안정적

 

✅ Strict Schedule (가장 엄격)

커밋되지 않은 트랜잭션의 데이터는 읽지도, 쓰지도 않음

  • R/W 모두 커밋 후에만 접근 가능
  • 대부분의 DBMS는 이 strict 방식을 따름

🧠 마무리

트랜잭션의 성능과 정합성을 동시에 잡기 위해

DBMS는 Serializable & Recoverable 한 스케줄만 허용한다.

  • 병렬 실행으로 성능 확보
  • Conflict Serializable로 정합성 유지
  • Strict Schedule로 안전한 복구 보장

참고: https://github.com/devSquad-study/2023-CS-Study/blob/main/DB/db_transaction_concurrency-control.md

'CS > Database' 카테고리의 다른 글

Transaction(3) - Isolation Level (격리 수준)  (0) 2025.06.23
Transaction (1)  (0) 2025.06.23
데이터베이스 정규화  (0) 2025.06.23
ERD (Entity Relationship Diagram)  (0) 2025.06.21
🗝️ Database Key  (2) 2025.06.20