Ch.9 데이터베이스 (필기 3과목)

트랜잭션 & 회복

트랜잭션의 정의와 ACID 속성 4가지를 설명할 수 있다로킹 기법(공유/배타)과 2단계 로킹 프로토콜을 구분할 수 있다회복 기법 4가지(지연갱신/즉시갱신/검사점/그림자 페이징)의 특징을 비교할 수 있다

은행 이체 중 정전이 나면 돈이 사라질까?

A 계좌에서 출금은 됐는데 B 계좌에 입금이 안 된 상황

부분 실행된 작업은 데이터 일관성을 파괴합니다

트랜잭션은 'All or Nothing' 원칙으로 이 문제를 해결하며, 필기 시험에서 ACID와 회복 기법은 매회 1~2문항 출제됩니다


article

핵심 내용

트랜잭션(Transaction)이란 데이터베이스에서 하나의 논리적 작업 단위를 구성하는 연산들의 집합입니다. 은행 이체 = '출금 + 입금'처럼, 반드시 모두 실행되거나 모두 취소되어야 합니다.

ACID 암기법: '원일격영' — 원자성·일관성·격리성·영속성. 시험에서 영문 약자(A·C·I·D)와 한글 설명을 매칭하는 문제가 빈출!

트랜잭션 상태 5가지: ① 활동(Active) → 트랜잭션 실행 중 ② 부분 완료(Partially Committed) → 마지막 연산 실행 직후 (아직 COMMIT 전) ③ 완료(Committed) → COMMIT 수행, 결과 영구 반영 ④ 실패(Failed) → 오류 발생, 더 이상 진행 불가 ⑤ 철회(Aborted) → ROLLBACK 수행, 트랜잭션 이전 상태로 복원

-- 트랜잭션 기본 구조
BEGIN TRANSACTION;

UPDATE 계좌 SET 잔액 = 잔액 - 50000
WHERE 계좌번호 = 'A001';

UPDATE 계좌 SET 잔액 = 잔액 + 50000
WHERE 계좌번호 = 'B002';

-- 둘 다 성공하면
COMMIT;

-- 하나라도 실패하면
-- ROLLBACK;

로킹(Locking)은 동시성 제어 기법으로, 트랜잭션이 데이터에 접근할 때 잠금(Lock)을 설정하여 다른 트랜잭션의 간섭을 방지합니다.

공유 잠금끼리는 호환! (여러 트랜잭션이 동시에 읽기 가능) 배타 잠금은 독점! (쓰기 시 다른 모든 접근 차단)

2단계 로킹 프로토콜(2PL): • 확장 단계(Growing Phase): Lock만 획득, 해제 불가 • 축소 단계(Shrinking Phase): Lock만 해제, 획득 불가 → Lock을 모두 잡은 뒤에야 하나씩 풀기 시작. 직렬 가능성을 보장하지만 교착상태 예방은 불가!

교착상태(Deadlock): 두 트랜잭션이 서로가 잡고 있는 Lock을 기다리며 무한 대기하는 상태. 해결 방법: ① 예방(Prevention): 타임스탬프 기반 (Wait-Die, Wound-Wait) ② 탐지(Detection): 대기 그래프(Wait-for Graph)로 사이클 탐지 ③ 회복(Recovery): 교착 트랜잭션 중 하나를 ROLLBACK

회복(Recovery)이란 장애 발생 시 데이터베이스를 일관된 상태로 복원하는 것입니다. 로그(Log) 기반 회복이 핵심이며, 시험에서 4가지 기법의 특징을 비교하는 문제가 출제됩니다.

지연 갱신 = Redo만 / 즉시 갱신 = Undo + Redo — 이 차이가 시험 최빈출! 검사점 기법은 '모든 로그를 다 뒤지지 않아도 됨' → 회복 시간 단축이 핵심 장점.

-- 검사점 기반 회복 시나리오
-- T1: COMMIT 완료 (검사점 이전) → 회복 불필요
-- T2: COMMIT 완료 (검사점 이후) → Redo
-- T3: 실행 중 장애 발생       → Undo

-- 로그 예시
-- [T2, Start]
-- [T2, Write, 학생, 홍길동, 김길동]
-- [Checkpoint]
-- [T2, Commit]
-- [T3, Start]
-- [T3, Write, 수강, 80, 90]
-- *** 장애 발생 ***
-- → T2는 Redo, T3는 Undo

ACID 속성 중 '트랜잭션은 모두 실행되거나 모두 취소되어야 한다'에 해당하는 것은?

공유 잠금(S-Lock)에 대한 설명으로 옳은 것은?

지연 갱신(Deferred Update) 회복 기법의 특징으로 옳은 것은?

2단계 로킹 프로토콜(2PL)에 대한 설명으로 틀린 것은?

compare_arrows

비교 정리

항목속성영문설명
원자성AtomicityAll or Nothing — 모두 실행 또는 모두 취소
일관성Consistency트랜잭션 전후로 DB 상태가 일관성 유지
격리성Isolation동시 실행 트랜잭션이 서로 간섭하지 않음
영속성Durability완료된 트랜잭션 결과는 영구 반영
항목유형영문허용 동작동시 접근
공유 잠금Shared Lock (S-Lock)읽기(Read)만 가능다른 S-Lock 허용, X-Lock 불가
배타 잠금Exclusive Lock (X-Lock)읽기 + 쓰기 모두 가능모든 Lock 불가 (독점)
항목기법특징장점
지연 갱신COMMIT 전까지 DB에 반영하지 않음 (로그만 기록)UNDO 불필요 (Redo만)
즉시 갱신트랜잭션 실행 중에도 DB에 바로 반영Undo + Redo 모두 필요
검사점(Checkpoint)주기적으로 검사점을 설정하여 회복 범위 축소회복 시간 단축
그림자 페이징DB를 Current/Shadow 두 페이지 테이블로 관리로그 불필요

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작