정보처리기사

[정보처리기사 요약 11-10] 트랜잭션 회복 기법, 병행 제어 및 교착 상태 정리

Hong's_Computer 2026. 3. 4. 17:27
반응형
본문에 오류가 있을 수 있음을 감안하고 봐주시길 바랍니다.
# 문제 풀이 중 오답노트 하면서 나온 내용을 정리한 것

 

트랜잭션 회복(Recovery): 트랜잭션들을 수행하는 도중 장애가 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구하는 작업

회복 기법 설명
연기 갱신 기법
(Deferred Update)
· 트랜잭션이 성공적으로 완료(Commit)될 때까지 실제 DB에 대한 실질적인 갱신을 연기하는 방법
· 트랜잭션 수행 중 갱신된 내용은 일단 Log(로그)에만 보관함
· 트랜잭션 완료 시점에 Log의 내용을 실제 DB에 한 번에 기록함
· 오류 발생 시 Log만 버리면 되므로 REDO 작업만 가능(UNDO 불필요)
즉각 갱신 기법
(Immediate Update)
· 트랜잭션이 데이터를 갱신하면 부분 완료 전이라도 즉시 실제 DB에 반영하는 방법
· 장애 발생 시 회복 작업을 위해 갱신 전/후의 내용은 모두 Log에 보관함, 로그(Log)를 필요로 하는 회복 기법
· 완료 전 장애가 발생하면 UNDO, 완료 후 장애가 발생하면 REDO 작업 수행 (둘 다 사용 가능)
그림자 페이지 대체 기법
(Shadow Paging)
· 갱신 이전의 DB를 일정 크기의 페이지 단위로 구성하여 복사본인 '그림자 페이지'를 별도 보관하는 기법
· 실제 페이지를 대상으로 갱신하다가 장애가 발생해 트랜잭션을 Rollback(롤백) 시킬 때는 갱신된 실제 페이지를 버리고 보관해둔 그림자 페이지로 대체하여 회복함
· Log, REDO, UNDO 연산이 필요 없는 것이 특징
검사점 기법
(Check Point)
· 트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 상태 정보와 함께 검사점(Checkpoint)을 Log에 보관하는 기법
· 장애 발생 시 트랜잭션 전체를 철회하지 않고 Log에서 가장 최근의 검사점을 찾아 그 시점부터 회복 작업을 수행하므로 회복 시간을 대폭 절약함
미디어 회복 기법
(Media Recovery)
· 디스크 헤드 붕괴 등 비휘발성 저장장치(물리적 디스크) 자체가 손상되었을 때 사용하는 회복 기법
· DB 내용을 주기적으로 안전한 장치에 복사(Dump/덤프)해 두고 장애 시 덤프 내용을 가져와 가장 최근 상태로 복원한 뒤 Log를 이용해 REDO함

        - REDO(재실행): 트랜잭션의 변경 사항을 로그를 바탕으로 다시 실행하여 복구하는 작업

        - UNDO(취소): 트랜잭션이 변경한 사항을 로그를 바탕으로 원래 상태로 되돌리는(취소) 작업

 

 

 

트랜잭션 병행 제어(Concurrency Control): 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행 수행할 때 트랜잭션 간의 상호 작용을 제어하여 데이터베이스의 일관성을 유지하는 기법이다. 시스템 활용도 최대화, 사용자에 대한 응답시간 최소화, 데이터베이스 공유 최대화

  • 병행 제어 없이 무작정 동시 접근을 허용할 경우 발생하는 문제점
    • 갱신 분실(Lost Update): 두 트랜잭션이 같은 데이터를 공유하여 갱신할 때 하나의 갱신 내용이 덮어씌워져 사라지는 현상
    • 비완료 의존성(Uncommitted Dependency): 실패하여 롤백(Rollback) 중인 트랜잭션이 수정한 데이터를 다른 트랜잭션이 읽어서 발생하는 오류
    • 모순성(Inconsistency): 두 트랜잭션이 동시 실행되면서 데이터의 일관성이 깨져 서로 모순된 결과를 가져오는 현상
    • 연쇄 복귀(Cascading Rollback): 한 트랜잭션에 문제가 생겨 롤백할 때 그 데이터를 읽어간 다른 트랜잭션들까지 연쇄적으로 롤백되는 현상
제어 기법 설명
로킹(Locking) · 트랜잭션들이 데이터(로킹 단위)를 액세스하기 전에 Lock(잠금)을 요청하고 허락되어야만 액세스할 수 있도록 하는 기법
· 주요 데이터의 액세스를 상호 배타적으로 하여 동시 접근을 막음
타임 스탬프 순서
(Time Stamp Ordering)
· 트랜잭션과 데이터에 대해 실행을 시작하기 전에 시간표(Time Stamp)를 부여하여 그 순서에 따라 작업을 수행하는 기법
· 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 방법 중 가장 보편적임
· 교착 상태(Deadlock)가 발생하지 않는다는 장점이 있음
최적 병행 수행
(낙관적 기법, 검증 기법)
· 대부분의 트랜잭션이 판독 전용(Read Only)일 경우 트랜잭션 간 충돌률이 매우 낮다는 점을 이용한 기법
· 일단 병행 제어 없이 트랜잭션을 실행한 후 종료 시점에 동시성 위반(충돌)이 있었는지 검증하여 일관성 있게 시스템을 유지함
다중 버전 기법
(MVCC: Multi-Version
 Concurrency Control)
· 타임 스탬프 개념을 발전시킨 기법(다중 버전 타임 스탬프 기법이라고도 함)
· 데이터가 갱신될 때마다 기존 데이터를 덮어쓰지 않고 새로운 버전을 부여하여 여러 버전의 데이터를 유지/관리함
· 읽기 작업과 쓰기 작업이 서로 대기하지 않아 성능이 매우 우수함 (최신 오라클, MySQL 등 대부분의 RDBMS에서 채택)

 

로킹 단위(Locking Granularity): 병행제어에서 한꺼번에 로킹할 수 있는 객체의 크기를 의미한다. 데이터베이스, 파일, 레코드, 필드 등이 로킹 단위가 될 수 있다.

  • 로킹 단위가 클 때: 오버헤드는 감소되고 병행성 수준이 낮아짐.(병행성 수준 낮다 = 데이터베이스 공유도가 감소), 로크의 수가 적다.
  • 로킹 단위가 작을 때: 병행성은 높아지지만 오버헤드가 증가함.(병행성 수준 높다 = 데이터베이스 공유도가 증가), 로크의 수가 많아진다.

 

2단계 로킹 규약(Two-Phase Locking, 2PL): 스케줄의 직렬성을 보장하기 위해 모든 트랜잭션이 잠금(Lock)과 해제(Unlock)를 2개의 독립된 단계로 나누어 수행하는 병행 제어 기법 (장점: 트랜잭션의 직렬성(Serializability)을 완벽하게 보장함, 단점: 교착상태(Deadlock)를 예방할 수 없음(여전히 교착상태 발생 가능성이 존재함))

  • 확장 단계(Growing Phase): 트랜잭션이 새로운 Lock 연산은 수행할 수 있지만 Unlock 연산은 수행할 수 없는 단계(잠금만 획득 가능)
  • 축소 단계(Shrinking Phase): 트랜잭션이 새로운 Unlock 연산은 수행할 수 있지만 Lock 연산은 수행할 수 없는 단계(잠금만 반납 가능)

 

 

교착 상태(Deadlock): 상호 배제에 의해 나타나는 문제점으로 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는(Block) 현상을 의미한다.

  • 교착상태 발생의 필요 충분 조건: 다음 4가지 조건이 모두 만족되어야 교착 상태가 발생한다.(하나라도 깨지면 발생하지 않음)
조건 설명
상호 배제(Mutual Exclusion) 한 번에 한 개의 프로세스만이 해당 공유 자원을 사용할 수 있어야 함
점유와 대기(Hold and Wait) 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 함
비선점(Non-preemption) 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 함
환형 대기(Circular Wait) 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형(Cycle)으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 함
  • 교착상태의 해결 방법
기법 설명
예방 기법(Prevention) · 교착 상태가 발생하지 않도록 사전에 시스템을 제어하는 방법
· 교착 상태 발생의 4가지 조건 중에서 어느 하나를 제거(부정)함으로써 수행됨
· 시스템의 처리량이나 효율성을 떨어뜨리며 자원의 낭비가 가장 심한 기법임
회피 기법(Avoidance) · 교착 상태가 발생할 가능성을 배제하지 않고 발생 가능성을 인정하면서도 적절히 피해 가는 방법
· 시스템을 안전 상태(Safe State)와 불안전 상태(Unsafe State)로 나누어 안전 상태를 유지할 수 있을 때만 자원을 할당함
· 주로 은행원 알고리즘(Banker's Algorithm)이 사용됨
발견 기법(Detection) · 시스템에 교착 상태가 발생했는지 주기적으로 점검하여 교착 상태에 있는 프로세스와 자원을 찾아내는 방법
· 교착 상태 발견 알고리즘과 자원 할당 그래프(Resource Allocation Graph) 등을 주로 사용함
회복 기법(Recovery) 교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 선점하여 정상 상태로 회복하는 기법
- 프로세스 종료: 교착 상태에 빠진 모든 프로세스를 중단하거나 회복될 때까지 하나씩 중단하는 방식
- 자원 선점: 교착 상태가 해결될 때까지 한 프로세스의 자원을 빼앗아 다른 프로세스에 할당하는 방식

        - 은행원 알고리즘(Banker's Algorithm): E. J. Dijkstra가 제안한 회피 기법으로 은행에서 모든 고객의 요구가 충족되도록 현금을 안전하게 할당하는 데서 유래했다. 시스템이 자원을 할당한 후에도 '안전 상태'에 머무를 수 있는지를 사전에 검사하여 교착 상태를 회피한다.

반응형