🔒 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 |