Ch.9 데이터베이스 (필기 3과목)
트랜잭션 & 회복
은행 이체 중 정전이 나면 돈이 사라질까?
A 계좌에서 출금은 됐는데 B 계좌에 입금이 안 된 상황
부분 실행된 작업은 데이터 일관성을 파괴합니다
트랜잭션은 'All or Nothing' 원칙으로 이 문제를 해결하며, 필기 시험에서 ACID와 회복 기법은 매회 1~2문항 출제됩니다
핵심 내용
트랜잭션(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는 UndoACID 속성 중 '트랜잭션은 모두 실행되거나 모두 취소되어야 한다'에 해당하는 것은?
공유 잠금(S-Lock)에 대한 설명으로 옳은 것은?
지연 갱신(Deferred Update) 회복 기법의 특징으로 옳은 것은?
2단계 로킹 프로토콜(2PL)에 대한 설명으로 틀린 것은?
비교 정리
| 항목 | 속성 | 영문 | 설명 |
|---|---|---|---|
| 원자성 | Atomicity | All 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인터랙티브 레슨 시작