스물두줄

컴퓨터시스템응용기술사 · 개념서 · 데이터베이스 및 데이터 처리

트랜잭션 회복

설명 영상 트랜잭션 회복 · 2:36

왜 배우는가: 트랜잭션 회복은 장애 후에도 원자성과 내구성을 지키는 DBMS의 핵심 기능이다. 실무에서 데이터 손실과 복구 시간을 결정하며, 시험에서는 REDO·UNDO, 체크포인트, 그림자 페이징이 묶여 2개 회차에 반복 출제되었다.

출제 이력: 제135회 2교시 6번, 제104회 4교시 1번

1. 한 줄 정의와 핵심 키워드

트랜잭션 회복은 장애 발생 후 로그 또는 페이지 사본을 이용해 트랜잭션의 원자성과 지속성을 복원하는 DBMS 기법이다.

  • 트랜잭션 회복(Transaction Recovery)
  • 로그(Log)와 WAL(Write-Ahead Logging)
  • REDO와 UNDO
  • 체크포인트(Checkpoint)
  • 그림자 페이징(Shadow Paging)
  • CLR(Compensation Log Record)
  • 원자성(Atomicity)과 지속성(Durability)

2. 개념 풀이

쉽게 말하면 은행 이체 도중 정전이 나도 돈이 사라지거나 두 번 빠지지 않도록 되돌리거나 다시 적용하는 장치다. 트랜잭션이 완료되지 않았으면 원상복구하고, 완료됐으면 결과를 다시 반영한다.

트랜잭션 회복은 장애 시점에 데이터베이스를 일관된 상태로 되돌리는 절차 전체를 말한다. 회복의 기본 재료는 변경 이력을 담은 로그와, 변경 전 상태를 보관하는 페이지 사본이다. 로그 기반 방식은 변경 내용을 로그에 먼저 남기고, 그림자 페이징은 원본을 두고 사본에 변경을 적용한다.

REDO는 완료(Commit)된 트랜잭션의 변경을 로그의 새 값(After-image)으로 다시 반영하는 연산이다. 장애 시 버퍼에만 있던 갱신이 디스크에 빠졌을 때 지속성을 보장한다. UNDO는 완료되지 않은 트랜잭션의 변경을 로그의 이전 값(Before-image)으로 되돌리는 연산이다. 버퍼가 먼저 디스크에 기록된 경우 원자성을 보장한다.

WAL은 데이터 페이지를 디스크에 쓰기 전에 해당 변경의 로그를 먼저 안정 저장장치에 기록하는 원칙이다. 이 원칙이 지켜져야 REDO와 UNDO가 가능하다. 체크포인트는 로그와 데이터를 동기화한 시점을 로그에 기록하는 것이며, 복구 범위를 줄이는 역할을 한다. 그림자 페이징은 로그 없이 페이지 테이블 포인터를 바꾸어 커밋을 확정하는 방식이다.

3. 등장 배경과 필요성

초기 DBMS는 장애가 나면 전체 데이터를 백업본에서 다시 읽어야 했다. 이 방식은 복구 시간이 길고, 장애 직전까지의 갱신을 잃었다. 트랜잭션 단위로 원자성과 지속성을 보장하려면 장애 시점의 상태를 정확히 재구성할 수 있어야 했다.

동시에 여러 트랜잭션이 실행되면서 로그가 교차 기록되고, 장애 후 어느 트랜잭션을 되돌리고 어느 것을 다시 적용할지 판단하기 어려워졌다. 이를 해결하기 위해 로그 순서 규칙(WAL), 체크포인트, 로그 분석 단계가 도입되었다. 로그가 무한히 커지는 문제도 체크포인트로 완화했다.

그림자 페이징은 로그 기록 비용을 줄이고 커밋을 원자적 포인터 교체로 처리하려는 대안으로 등장했다. 다만 페이지 복사 비용과 단편화 문제 때문에 대규모 동시 처리에는 로그 기반 방식이 주로 쓰인다.

4. 구성요소·원리·절차

회복 기법은 여러 구성요소가 함께 작동한다. 구성요소와 역할을 먼저 정리한다.

구성요소역할회복과의 관계
로그 레코드트랜잭션의 시작·변경·완료 기록REDO·UNDO 판단 근거
로그 버퍼로그를 모아 안정 저장장치에 기록커밋 전 강제 기록 대상
체크포인트 레코드로그와 데이터의 동기화 시점 표시복구 분석의 시작점
데이터 버퍼·데이터 페이지실제 데이터 갱신이 이뤄지는 곳즉시·지연 갱신 차이
그림자 페이지 테이블현재·그림자 페이지의 위치 보관그림자 페이징 회복

로그 레코드는 회복의 기준 자료다. 로그 버퍼와 데이터 버퍼가 분리되어 있어 장애 시점에는 두 곳의 내용이 서로 다를 수 있다.

WAL(Write-Ahead Logging, 로그 선행 기입)은 데이터 변경 내용을 로그에 먼저 기록하고, 그 뒤에 데이터베이스에 반영하는 원칙이다. 로그는 추가만 하는 구조이며 안정 저장장치에 기록되어야 한다. 로그 레코드 형식은 다음과 같다.

$$$$

T_n은 트랜잭션, X는 데이터 항목, V_1은 이전 값(UNDO용), V_2는 새 값(REDO용)이다.

갱신 시점에 따라 필요한 연산이 달라진다.

  • 즉시 갱신: 커밋 전에도 데이터베이스에 반영될 수 있어 UNDO와 REDO 모두 필요.
  • 지연 갱신: 커밋 후에만 반영되므로 REDO만 필요.

로그 기반 판단 기준은 커밋 여부다. 커밋 로그가 있는 트랜잭션은 REDO 대상이다. 시작 로그만 있고 커밋 로그가 없는 트랜잭션은 UNDO 대상이다. 완료 트랜잭션은 확정하고 미완료 트랜잭션은 취소하는 것이 원리의 핵심이다.

UNDO를 수행하면 CLR(Compensation Log Record, 보상 로그 레코드)을 기록한다. CLR은 REDO 전용 로그이며, 이전 로그를 가리키게 하여 같은 변경을 두 번 취소하지 않도록 한다. 트랜잭션 철회는 로그를 역방향으로 탐색하며 UNDO를 수행하고, 트랜잭션의 시작 로그에 도달하면 끝난다.

체크포인트는 로그와 데이터베이스를 동기화한 시점을 로그에 남기는 작업이다. 체크포인트 이전의 완료된 변경은 이미 디스크에 반영되어 있으므로 분석 범위가 줄어든다. 절차는 다음과 같다.

  • 새 트랜잭션의 실행을 제한한다(방식에 따라 생략 가능).
  • 로그 버퍼의 내용을 안정 저장장치에 기록한다.
  • 변경된 데이터 버퍼를 데이터베이스에 반영한다.
  • 체크포인트 레코드를 로그에 기록한다.

재시작 복구는 분석, REDO, UNDO 순서로 진행한다. 세부 절차는 다음과 같다.

  • 분석 단계: 마지막 체크포인트부터 로그 끝까지 정방향으로 읽어 REDO 목록과 UNDO 목록을 만든다.
  • REDO 단계: 체크포인트 이후 로그를 순서대로 다시 적용하여 새 값(V_2)을 반영한다.
  • UNDO 단계: UNDO 목록의 트랜잭션을 로그 끝에서 거꾸로 따라가며 이전 값(V_1)을 복원한다.
재시작 복구 3단계

도식은 재시작 복구의 순서를 보인다. 분석 결과가 REDO 목록과 UNDO 목록을 결정한다.

그림자 페이징은 로그를 쓰지 않는다. 데이터베이스를 고정 크기 페이지로 나누고, 갱신 대상 페이지를 복사해 그림자 페이지로 둔다. 변경은 복사본에만 하고, 커밋 시 그림자 페이지 테이블의 포인터를 새 페이지로 원자적으로 바꾼다. 장애가 나면 이전 포인터를 그대로 쓰면 되므로 UNDO가 필요 없다.

5. 관련 법령·기준·표준

데이터베이스 회복 기법을 직접 규정한 국내 법령이나 고시는 확인된 자료가 없다. 따라서 회복 기준은 DBMS 교재와 제품 구현에서 정립된 원칙을 따른다. 시험 답안에는 다음 기준을 근거로 쓴다.

기준·원칙기준 내용근거
WAL 원칙데이터 반영 전에 로그 먼저 기록ACID의 원자성·영속성
로그 강제 기록커밋 로그를 안정 저장장치에 기록내구성 보장
REDO 대상커밋 로그가 있는 트랜잭션로그 분석 결과
UNDO 대상시작 로그만 있고 커밋 없음로그 분석 결과
지연 갱신REDO만 필요갱신 시점 기준
그림자 페이징포인터 교체로 커밋로그 없이 회복

위 표는 기준 수치보다 조건을 외우는 용도다. 원칙 자체에는 정해진 시간이나 크기 값이 없다.

회복 기준의 핵심은 로그 선행 기입과 커밋 시점 강제 기록이다. 제품 구현 사례로 PostgreSQL과 SQLite는 WAL을 지원한다. MongoDB와 Apache HBase도 로그 선행 기입 또는 WAL로 장애 후 복구를 제공한다. ARIES는 WAL 계열에서 잘 알려진 회복 알고리즘이다.

체크포인트 주기는 고정 표준이 없으며 DBMS 설정으로 정한다. 설계 시에는 복구 시간 목표와 로그 용량을 함께 본다. 개정 연혁은 확인된 자료가 없어 적지 않는다.

6. 유형과 비교

회복 기법은 데이터 갱신 시점과 로그 사용 방식에 따라 나뉜다. 가장 먼저 구분할 것은 즉시 갱신과 지연 갱신이다. 두 방식은 버퍼가 데이터베이스에 반영되는 시점이 달라서 REDO와 UNDO 중 무엇이 필요한지가 정해진다.

이어지는 내용

로그인하면 하루 2페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 단원 읽기