정보처리기사

📘 [9일차] 트랜잭션 병행 제어와 회복 기법 완전 정리

news800905 2025. 5. 7. 20:17
728x90

💡 주제: Lock, Deadlock, 로그 기반 회복(Undo/Redo)의 개념과 방식


🧩 오늘의 학습 목표

  • 병행 제어의 필요성과 동시성 문제를 이해한다
  • 로킹(Locking)과 교착 상태(Deadlock)를 설명할 수 있다
  • 데이터베이스 회복 기법(Undo, Redo, 로그 기반)의 흐름을 이해한다

🎯 이론 설명


✅ 1. 병행 제어 (Concurrency Control)

병행 제어란?
여러 사용자가 동시에 데이터베이스에 접근할 때, 데이터 무결성을 지키기 위한 제어 방식입니다.
트랜잭션이 동시에 실행될 경우 발생할 수 있는 문제를 방지합니다.


🔹 병행 실행 시 발생 가능한 문제

문제설명
갱신 손실 (Lost Update) 두 트랜잭션이 같은 데이터를 갱신 → 마지막만 반영됨
모순 읽기 (Inconsistent Read) 하나의 트랜잭션이 처리 중인 데이터를 다른 트랜잭션이 읽음
더티 리드 (Dirty Read) 커밋되지 않은 데이터를 읽음
반복 불가능한 읽기 (Non-repeatable Read) 같은 쿼리를 다시 수행했을 때 결과가 다름
 

✅ 2. 로킹(Locking)과 2단계 로킹(2PL)

Lock(잠금): 트랜잭션이 특정 데이터에 접근하는 것을 다른 트랜잭션이 막는 기능

🔸 Lock의 종류

종류설명
공유 잠금 (S-Lock) 읽기 전용 (다른 읽기 가능, 쓰기 불가)
배타 잠금 (X-Lock) 읽기/쓰기 모두 가능, 다른 트랜잭션 접근 차단
 

🔸 2단계 로킹 프로토콜 (2PL, Two-Phase Locking)

  • 확장 단계: 필요한 Lock을 모두 획득
  • 축소 단계: Lock 해제만 가능, 새로운 Lock 획득 불가

➤ 모든 트랜잭션이 2PL을 따르면 **직렬 가능성(Serializability)**을 보장할 수 있음


✅ 3. 교착 상태 (Deadlock)

**Deadlock(교착 상태)**는 두 트랜잭션이 서로 필요한 자원을 점유한 채 영원히 기다리는 상태

🔸 해결 방법

  • 발생 방지: 자원 순서 지정, 타임아웃 설정
  • 발생 회피: Wait-Die, Wound-Wait 방식
  • 발생 후 회복: 트랜잭션 중단 후 Rollback

✅ 4. 회복 기법 (Recovery)

트랜잭션 처리 중 시스템 장애가 발생했을 때 데이터를 복구하는 방법

🔸 로그(Log)를 이용한 회복

모든 변경 내용을 로그 파일에 기록해두고 복구에 사용

방식설명
Undo 장애 발생 전의 상태로 복원 (롤백)
Redo 완료된 작업을 다시 실행하여 반영 (재적용)
Undo/Redo 병행 상황에 따라 둘 다 수행 가능
 

📌 트랜잭션 처리 과정에서 로그 기록 순서:

  • 트랜잭션 시작
  • 데이터 변경 전/후 로그 기록
  • COMMIT 또는 ROLLBACK 로그
  • 장애 발생 시 로그를 보고 복원 수행

📝 기출문제 예제

문제: 트랜잭션 중 하나가 커밋되지 않은 데이터를 다른 트랜잭션이 읽은 경우를 무엇이라 하는가?

① Lost Update
② Inconsistent Read
③ Dirty Read
④ Non-repeatable Read

정답: ③

🧠 해설:

  • Dirty Read는 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 상황
  • 트랜잭션이 롤백되면 읽은 데이터도 잘못된 값이 됨

💡 오늘의 정리 포인트

  • 병행 제어는 데이터 무결성과 일관성을 보장하는 필수 기법
  • Lock은 충돌을 방지하고, 2PL은 직렬 가능성을 보장
  • Deadlock은 자원 경합에서 발생 → 방지 및 회복 기법 이해 필수
  • 장애 복구는 로그 기반 Undo/Redo 기법 사용
728x90