문서 읽는 데 38분 · 29강 · 3과목 · 데이터베이스 구축

트랜잭션·회복·병행 제어

목차 18
전체 59강 중 29강 · 3과목 · 데이터베이스 구축

트랜잭션은 DB 상태를 바꾸는 하나의 논리적 작업 단위이고, 그 안전을 떠받치는 세 기둥이 ACID·회복·병행 제어다. 3과목에서 거의 매 회차 ACID 정의·로킹 단위 트레이드오프·교착 4조건·회복 기법이 나오는 빈출 단원이다.

핵심 암기: ACID 4대 특성 원일고영(원자성·일관성·고립성=격리성·영속성) · 교착 4조건 상점비환(상호배제·점유와대기·비선점·환형대기) · 회복 두 동작 REDO/UNDO(COMMIT 발행 여부로 분별) · 로킹 단위 5종(DB·File·Relation·Page·Record·오버헤드↔병행성 반대) · 2단계 로킹 확장(획득만)+축소(해제만)


트랜잭션과 ACID

트랜잭션이란 ·트랜잭션·

[정의] 트랜잭션(Transaction) = 데이터베이스의 상태를 변환시키는 하나의 논리적 작업 단위. "한 번에 모두 실행되거나, 하나도 실행되지 않아야 하는 작업 묶음"이다.

대표 예 — 계좌 이체는 출금과 입금이 함께 성공하거나 함께 실패해야 한다. A만 출금되고 B에 입금이 안 되면 돈이 사라진다.

[표] 트랜잭션의 시작과 끝 (26강 COMMIT/ROLLBACK 회수).

시점 명령 의미
시작 BEGIN(또는 START TRANSACTION) 작업 단위 시작
성공 COMMIT 변경을 영구 저장(확정)
실패 ROLLBACK 변경을 취소·원상 복구

🔑 암기 트랜잭션 = 논리적 작업 단위 = All or Nothing 묶음. 💡 보충 26강에서 본 COMMIT·ROLLBACK이 바로 트랜잭션을 확정·취소하는 명령이다. 이 강은 그 두 명령이 무엇을 보장하는지를 ACID로 풀어낸다.

ACID 4대 특성 — 원일고영 ·트랜잭션·

[정의] ACID = 트랜잭션이 반드시 지켜야 하는 4대 특성. 정처기에서 거의 매 회차 정의를 묻거나 틀린 설명을 고르게 한다.

[표] ★원일고영★ — 특성·의미·보장 메커니즘을 한 표로.

특성 영문 핵심 의미 보장 메커니즘
자성 Atomicity All or Nothing(부분 실행 ❌) COMMIT·ROLLBACK·회복 기법(UNDO)
관성 Consistency 실행 전후 무결성 제약 보존 무결성 제약·트리거(24강 PK/FK/CHECK·28강 정규화)
립성=격리성 Isolation 동시 실행 시 서로 간섭 차단 병행 제어(로킹·격리 수준·MVCC)
속성 Durability 완료된 결과는 영구 반영 로그·체크포인트·WAL
  • 일관성 — 이체 전 합계 80,000원이면 이체 후에도 80,000원. 28강 정규화로 건 제약과 24강 PK·FK·CHECK가 트랜잭션 후에도 그대로 유지돼야 한다.
  • 영속성 — COMMIT한 뒤 시스템 장애가 나도 결과는 살아남는다. 로그에 먼저 적어 두기 때문이다.

🔑 암기 원·일·고·영 4글자에 매칭 안 되는 보기는 100% 함정. "원래 일관되게 고정 영속한다." ⚠️ 함정 ★1순위 — 격리성 ↔ 영속성 메커니즘 뒤바꿈★. "완료된 결과가 영구 반영"이라는 키워드가 보이면 무조건 영속성(격리성 ❌). 그 외 — "All or Nothing=일관성" ❌(→ 원자성) / "ROLLBACK이 일관성 보장" ❌(→ 원자성) / "DDL 자동 COMMIT으로 영속성이 약해진다" ❌(→ 오히려 영구 확정이라 강화·26강 회수). 🎯 빈출 ACID 중 하나의 설명을 고르거나 틀린 설명을 찾는 유형, "COMMIT/ROLLBACK이 보장하는 특성은"(→ 원자성)이 단골. 💡 보충 ACID는 1980년대 초 트랜잭션 연구자들이 정립했고, 두문자어 'ACID' 자체는 이후 정식 명명됐다. 정의가 변하지 않는 evergreen 개념이라 시험에도 표현이 거의 그대로 나온다.

트랜잭션 상태 전이 ·트랜잭션·

[정의] 트랜잭션은 생성부터 종료까지 여러 상태(State)를 거친다. "부분 완료"와 "완료"를 가르는 기준이 COMMIT이라는 점이 핵심이다.

텍스트
 정상 흐름
   활동(Active) ─실행─> 부분 완료(Partially Committed) ─COMMIT─> 완료(Committed)   ★영구 저장

 실패 흐름
   활동(Active) ─오류 발생─> 실패(Failed) ─ROLLBACK─> 철회(Aborted)   ★원상 복구

[표] 5개 상태.

상태 설명
활동(Active) 트랜잭션 실행 중
부분 완료(Partially Committed) 마지막 연산까지 끝났으나 COMMIT 전
완료(Committed) COMMIT 성공·영구 저장 완료
실패(Failed) 오류로 실행 중단
철회(Aborted) ROLLBACK 완료·원상 복구

🔑 암기 COMMIT 전 = 부분 완료 / COMMIT 후 = 완료. ⚠️ 함정 "부분 완료 = 영구 저장된 상태" ❌(→ 아직 COMMIT 전). 부분 완료에서 오류가 나면 실패→철회로 간다. 🎯 빈출 부분 완료와 완료의 구분, 철회(Aborted)가 ROLLBACK 결과라는 매칭.


회복 (Recovery)

회복과 장애 유형 ·회복·

[정의] 회복(Recovery) = 장애가 발생했을 때 DB를 장애 직전의 정상 상태로 복구하는 기법. 영속성·원자성을 실제로 떠받치는 장치다.

[표] 장애 3종.

장애 유형 원인 예시
트랜잭션 장애 트랜잭션 자체의 논리 오류 잘못된 입력·연산 오류
시스템 장애 하드웨어·소프트웨어 오류 전원 중단·OS 오류(메모리 내용 소실)
미디어 장애 저장 장치 고장 디스크 헤드 손상(디스크 내용 소실)

🔑 암기 장애 = 트랜잭션·시스템·미디어 3종. 🎯 빈출 장애 유형 분류보다, 회복의 두 동작(REDO/UNDO)과 회복 기법 종류가 더 자주 나온다.

REDO · UNDO ·회복·

[정의] 회복의 두 핵심 동작. 분별 1순위 기준은 "COMMIT 발행 여부" — 끝났으면 다시(REDO), 안 끝났으면 취소(UNDO)다.

[표] REDO vs UNDO.

구분 REDO(재실행·전진 복구) UNDO(취소·후진 복구)
대상 COMMIT 발행 O · DB 미반영 COMMIT 발행 X(활동/실패에서 멈춤)
동작 로그의 이후값으로 다시 기록 로그의 이전값으로 되돌리기
보장 영속성(Durability) 원자성(Atomicity)
  • 로그 선행 기록(WAL, Write-Ahead Logging) — 데이터를 바꾸기 전에 로그를 디스크에 먼저 기록한다. 그래야 장애 시 로그만으로 복구가 가능하다.
  • 로그 레코드 4요소 — 트랜잭션ID · 연산 · 이전값(Before Image) · 이후값(After Image).

🔑 암기 COMMIT O + 이후값 + 영속성 = REDO / COMMIT X + 이전값 + 원자성 = UNDO. ⚠️ 함정 "REDO는 이전값 사용" ❌(→ 이후값) / "UNDO는 COMMIT된 트랜잭션 대상" ❌(→ COMMIT 안 된) / "REDO가 원자성 보장" ❌(→ 영속성·원자성은 UNDO) / "ROLLBACK = REDO" ❌(→ ROLLBACK은 취소이므로 UNDO 쪽). 🎯 빈출 REDO/UNDO의 대상·동작·보장 특성을 서로 뒤바꿔 출제. 표 한 줄만 정확히 외우면 즉답.

회복 기법 4종 ·회복·

[정의] 회복 기법은 로그 기반(즉시 갱신·지연 갱신) + 체크포인트 + 그림자 페이지로 나뉜다. "로그를 필요로 하는 회복 기법"을 고르는 문제가 단골이다.

[표] 4종 비교.

기법 특징 로그 회복 동작
즉시 갱신(Immediate) COMMIT 전에도 DB 즉시 변경 ✅ 필요 UNDO + REDO
지연 갱신(Deferred) COMMIT 후에만 DB 반영 ✅ 필요 REDO만(UNDO 불필요)
체크포인트(Checkpoint) 주기적 저장점 생성 ✅ 필요 회복 범위 축소
그림자 페이지(Shadow Paging) 페이지 테이블 사본 유지 ❌ 불필요 REDO/UNDO 둘 다 불필요
  • 즉시 갱신 — COMMIT 전에도 변경하니 실패 시 되돌릴 UNDO가 필요하고, 그래서 로그가 반드시 있어야 한다.
  • 지연 갱신 — COMMIT 전엔 로그에만 적고 DB는 안 건드리니 실패해도 되돌릴 게 없다(UNDO 불필요·REDO만).
  • 체크포인트 — 일정 시점에 버퍼를 디스크에 강제 기록해 두면, 장애 시 그 지점 이후만 분석하면 된다.
  • 그림자 페이지 — COMMIT 실패 시 사본(그림자) 페이지 테이블로 되돌리면 끝이라 로그가 필요 없다.

🔑 암기 "로그를 필요로 하는 회복 기법" = 즉시 갱신(대표) / "로그가 필요 없는 기법" = 그림자 페이지. ⚠️ 함정 "그림자 페이지는 로그가 필요하다" ❌ / "지연 갱신은 UNDO가 필요하다" ❌(→ REDO만) / "체크포인트는 회복 범위를 늘린다" ❌(→ 축소). 🎯 빈출 "로그를 필요로 하는 회복 기법은?"(→ 즉시 갱신), 보기에 대수적 코딩·폴딩·타임스탬프 같은 무관한 용어를 섞는다.


병행 제어 (Concurrency Control)

병행 제어와 직렬 가능성 ·병행 제어·

[정의] 병행 제어(Concurrency Control) = 여러 트랜잭션이 동시에 실행될 때 생기는 문제를 막아, 동시 실행 결과가 순차 실행한 것과 같아지도록 보장하는 기법.

[표] 목적과 기법.

구분 내용
목적 ① 직렬 가능성(Serializability) 보장 ② 데이터 일관성 유지 ③ 시스템 효율 최대화
기법 로킹(Locking) · 타임스탬프 · 낙관적 검증 · 다중 버전(MVCC)
  • 직렬 가능성 — 여러 트랜잭션을 동시에 돌려도, 그 결과가 어떤 순차 실행 결과와 동등하면 올바른 병행 수행이다.

🔑 암기 병행 제어의 1번 목적 = 직렬 가능성 보장. 대표 기법 = 로킹. 💡 보충 격리성(ACID의 'I')을 실제로 구현하는 게 바로 이 병행 제어다. ACID와 따로 노는 개념이 아니다.

병행 수행의 3대 문제 ·병행 제어·

[정의] 병행 제어가 없을 때 생기는 세 가지 대표 문제. 이름과 현상의 매칭이 시험 포인트다.

[표] 3대 문제.

문제 다른 이름 현상
갱신 분실(Lost Update) 같은 데이터를 동시에 수정 → 나중 값이 먼저 값을 덮어써 한쪽 수정이 사라짐
비완료 의존성 Dirty Read COMMIT 안 된(곧 ROLLBACK될) 데이터를 다른 트랜잭션이 읽음
불일치 분석 Unrepeatable Read 같은 데이터를 두 번 읽는데 중간에 다른 트랜잭션이 바꿔 결과가 달라짐

🔑 암기 덮어씀=갱신 분실 / 미완료 읽기=Dirty Read / 두 번 읽기 차이=Unrepeatable Read. ⚠️ 함정 "Dirty Read = 같은 데이터 두 번 읽기" ❌(→ 그건 Unrepeatable Read) / "갱신 분실 = COMMIT 전 데이터 읽기" ❌(→ 그건 Dirty Read). 🎯 빈출 현상을 주고 어떤 문제인지, 또는 "COMMIT되지 않은 데이터를 읽는 현상"(→ Dirty Read)을 직접 매칭.

로킹 — 공유 락 · 배타 락 ·병행 제어·

[정의] 로킹(Locking) = 트랜잭션이 데이터에 접근하기 전에 잠금(Lock)을 걸어 다른 트랜잭션의 접근을 제어하는 기법. 잠금에는 읽기용 공유 락, 읽기·쓰기용 배타 락이 있다.

[표] 두 잠금.

잠금 용도 동시 허용
공유 락(S-Lock, Shared) 읽기(READ) 여러 트랜잭션이 동시에 가능(읽기는 공유)
배타 락(X-Lock, Exclusive) 읽기·쓰기(READ+WRITE) 단 하나의 트랜잭션만

[표] 잠금 호환 매트릭스 — S끼리만 공유, X는 독점.

보유 중 \ 요청 S-Lock 요청 X-Lock 요청
S-Lock 보유 ✅ 허용 ❌ 대기
X-Lock 보유 ❌ 대기 ❌ 대기

🔑 암기 S+S = 허용, 나머지(S+X·X+X) = 대기. "읽기는 공유, 쓰기는 독점." ⚠️ 함정 "X-Lock끼리 동시에 가능" ❌(→ 대기) / "S-Lock 상태에서 다른 트랜잭션이 X-Lock 가능" ❌(→ 대기). 🎯 빈출 호환 매트릭스 한 칸을 뒤집어 출제. 읽기 조회는 S락(동시 가능), 쓰기·차감은 X락(직렬화)이라는 매칭.

로킹 단위 5종 트레이드오프 ·병행 제어·

[정의] 로킹 단위(Locking Granularity) = 잠금을 거는 데이터의 크기 단위. 큰 것부터 DB · File · Relation · Page · Record 5종이다.

텍스트
 [큰 단위]  DB  File  Relation  Page  Record  [작은 단위]

[표] ★시험 1순위 — 오버헤드와 병행성은 항상 반대 방향★.

단위 락의 수 로킹 오버헤드 병행성(동시성)
크면 적음 감소 ↓ 감소 ↓
작으면 많음 증가 ↑ 증가 ↑
  • 대부분의 상용 DBMS는 레코드(행) 락을 기본으로 쓰고, 필요하면 페이지·테이블 락으로 승급(Lock Escalation)한다.

🔑 암기 단위 ↓ = 오버헤드 ↑ · 병행성 ↑ (오버헤드와 병행성은 항상 반대). ⚠️ 함정 "단위가 작을수록 오버헤드가 작다" ❌(→ 크다·병행성은 높다) / "단위가 클수록 동시성이 높아진다" ❌(→ 낮아진다·공유도 감소). 🎯 빈출 "로킹에 대한 설명으로 옳지 않은 것"에서 "단위가 커지면 공유도(병행성)가 증가한다"를 끼워 넣는 게 단골 오답.

교착 상태 — 상점비환 ·병행 제어·

[정의] 교착 상태(Deadlock) = 둘 이상의 트랜잭션이 서로 상대가 보유한 락을 기다리며 무한정 대기하는 상태. 로킹의 대표적 부작용이다.

텍스트
 T1: A에 X락 보유 ── B에 X락 요청 (대기)
 T2: B에 X락 보유 ── A에 X락 요청 (대기)
       서로 상대의 락을 기다림  순환 대기  영원히 멈춤

[표] ★상점비환★ — 4조건이 전부 만족해야 교착 발생(하나만 깨도 사라짐).

조건 영문 내용
호 배제 Mutual Exclusion 자원을 한 번에 한 트랜잭션만 사용
유와 대기 Hold and Wait 자원을 쥔 채 다른 자원을 또 기다림
선점 No Preemption 락을 강제로 빼앗을 수 없음
형 대기 Circular Wait 대기 관계가 원(T1→T2→…→T1)을 이룸

[표] 해결 4전략 — 예회탐복.

전략 내용
방(Prevention) 4조건 중 하나를 원천 차단(예: 자원에 순서를 매겨 환형 대기 차단)
피(Avoidance) 안전 상태를 유지하도록 할당 — 은행원 알고리즘
지(Detection) 발생을 허용하되 자원 할당 그래프로 주기적 탐지
구(Recovery) 탐지 후 트랜잭션 하나를 희생(ROLLBACK)시켜 해소

🔑 암기 4조건 = 상·점·비·환 / 해결 = 예·회·탐·복 / 은행원 알고리즘 = 회피. ⚠️ 함정 "선점(Preemption)이 교착 조건" ❌(→ 4조건은 선점·선점 허용은 깨는 방법) / "교착 해결법은 5가지" ❌(→ 예회탐복 4가지) / "은행원 알고리즘 = 예방" ❌(→ 회피). 🎯 빈출 4조건이 아닌 것 고르기(가짜 보기=선점), 은행원 알고리즘의 분류(→ 회피). 운영체제 교착 4조건과 완전히 같아 4과목에서도 회수된다(은행원 알고리즘 자체는 35강 본격).

2단계 로킹 프로토콜 (2PL) ·병행 제어·

[정의] 2단계 로킹(2PL, Two-Phase Locking) = 트랜잭션의 락 운영을 확장 단계수축 단계 둘로 분리하는 규칙. 직렬 가능성을 보장하지만 교착 상태는 여전히 생길 수 있다.

[표] 두 단계.

단계 이름 허용 작업
1단계 확장(Growing) 획득만 가능(해제 ❌)
2단계 수축(Shrinking) 해제만 가능(획득 ❌)
텍스트
 [확장]                    [수축]
 Lock A  Lock B  ──정점──> Unlock A  Unlock B
 (획득만)                   (해제만)
  • 두 단계의 전환점 = 락 정점(Lock Point). 변형으로 모든 배타 락을 트랜잭션 종료 시 한꺼번에 푸는 엄격 2PL(Strict 2PL)이 있다(연쇄 복귀 차단).

🔑 암기 2PL = 확장(획득만) + 수축(해제만) → 직렬 가능성 보장 · 교착은 여전히 가능. ⚠️ 함정 "확장 단계에서 락 해제" ❌(→ 수축) / "2PL이 교착 상태를 방지한다" ❌(→ 직렬 가능성만 보장·교착은 별개) / "2PL = 격리 수준 2단계" ❌(→ 격리 수준은 4단계로 별개 개념). 🎯 빈출 2PL이 보장하는 것(→ 직렬 가능성)과 보장하지 못하는 것(→ 교착 방지)을 가르는 문제.

타임스탬프 기법 ·병행 제어·

[정의] 타임스탬프(Timestamp) 기법 = 각 트랜잭션에 고유한 시작 시각(타임스탬프)을 부여하고, 그 순서대로 직렬화하는 병행 제어. 잠금을 쓰지 않는다.

[표] 로킹 vs 타임스탬프.

구분 로킹(Locking) 타임스탬프(Timestamp)
잠금 사용 사용 안 함
교착 상태 발생 가능 발생 안 함
충돌 해결 대기 ROLLBACK(순서 위반 시 되돌림)
구현 복잡도 낮음 높음

🔑 암기 타임스탬프 = 잠금 없음 = 교착 없음 = 충돌은 ROLLBACK으로 해결. ⚠️ 함정 "타임스탬프는 교착 상태가 발생한다" ❌(→ 핵심 장점이 교착 없음) / "타임스탬프는 잠금을 사용한다" ❌(→ 사용 안 함) / "로킹보다 구현이 간단하다" ❌(→ 복잡). 🌟 합격 한 끗 타임스탬프는 "교착 없음 · 잠금 없음 · ROLLBACK 충돌 해결" 세 가지만 잡으면 충분. 기아 상태(Starvation)가 생길 수 있다는 정도까지.


기출 다지기

[기출 1 출제] Commit과 Rollback 명령어에 의해 보장받는 트랜잭션의 특성은? (ACID 특성)

  • ① 병행성
  • ② 보안성
  • ③ 원자성
  • ④ 로그
정답 및 해설 보기

정답 ③

COMMIT(전부 확정)·ROLLBACK(전부 취소)은 "모두 실행되거나 모두 실행되지 않음"을 보장 → 원자성(Atomicity).

보기 판정 이유
① 병행성 병행 제어(로킹) 영역
② 보안성 ACID 특성 아님
③ 원자성 COMMIT/ROLLBACK = All or Nothing → 정답
④ 로그 회복 기법의 수단일 뿐

🔑 암기 COMMIT/ROLLBACK = 원자성.

[기출 2 출제] 트랜잭션의 특성 중 완료된 연산 결과가 시스템에 영구 반영된다는 의미의 특성은? (ACID 특성)

  • ① 원자성(Atomicity)
  • ② 일관성(Consistency)
  • ③ 격리성(Isolation)
  • ④ 영속성(Durability)
정답 및 해설 보기

정답 ④

"완료된 연산 결과가 시스템에 영구 반영" = 영속성(Durability). 이 문장이 거의 그대로 출제된다.

보기 판정 핵심
① 원자성 All or Nothing
② 일관성 무결성 제약 유지
③ 격리성 다른 트랜잭션 간섭 차단
④ 영속성 COMMIT 후 영구 저장 → 정답

🔑 암기 "영구 반영" 키워드 = 영속성(격리성과 뒤바꿈 함정 주의).

[기출 3 출제] 병행 제어 기법 중 로킹(Locking)에 대한 설명으로 옳지 않은 것은? (로킹 단위)

  • ① 로킹의 대상이 되는 객체의 크기를 로킹 단위라고 한다.
  • ② 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있다.
  • ③ 로킹 단위가 작아지면 로킹 오버헤드가 증가한다.
  • ④ 로킹 단위가 커지면 데이터베이스 공유도(병행성)가 증가한다.
정답 및 해설 보기

정답 ④

로킹 단위가 커지면 공유도(병행성)는 감소한다(오버헤드만 감소). 방향이 정반대라 틀린 설명.

보기 판정 이유
로킹 단위 = 잠금 대상 객체 크기
DB·파일·레코드 모두 로킹 단위 가능
단위 작으면 락 수↑ → 오버헤드 증가
단위 커지면 공유도 감소 → 정답(틀림)

🔑 암기 단위 ↑ = 오버헤드 ↓ · 병행성 ↓ (항상 반대).

[기출 4 출제] 데이터베이스 로그(log)를 필요로 하는 회복 기법은? (회복 기법)

  • ① 즉각 갱신 기법
  • ② 대수적 코딩 방법
  • ③ 타임 스탬프 기법
  • ④ 폴딩 기법
정답 및 해설 보기

정답 ①

즉시(즉각) 갱신 기법은 COMMIT 전에도 DB를 바꾸므로 UNDO를 위한 로그가 반드시 필요하다.

보기 판정 이유
① 즉각 갱신 로그 필요(UNDO용) → 정답
② 대수적 코딩 회복 기법 아님
③ 타임 스탬프 병행 제어 기법
④ 폴딩 해싱 관련

🔑 암기 "로그 필요 회복" = 즉시 갱신 / "로그 불필요" = 그림자 페이지.

[기출 5 출제] 교착 상태(Deadlock)의 해결 방법 중 은행원 알고리즘(Banker's Algorithm)이 해당하는 것은? (교착 해결)

  • ① 교착 상태 예방(Prevention)
  • ② 교착 상태 회피(Avoidance)
  • ③ 교착 상태 탐지(Detection)
  • ④ 교착 상태 복구(Recovery)
정답 및 해설 보기

정답 ②

은행원 알고리즘은 항상 안전 상태를 유지하도록 자원을 할당해 교착을 미리 피한다 → 회피(Avoidance).

전략 핵심
예방 4조건 중 하나 원천 차단
회피 안전 상태 유지(은행원 알고리즘) → 정답
탐지 발생 허용 후 그래프로 탐지
복구 탐지 후 트랜잭션 희생

🔑 암기 은행원 = 회피 / 해결 4전략 = 예회탐복.

[기출 6 출제] 병행 제어 기법에서 타임스탬프(Timestamp) 기법에 대한 설명으로 옳은 것은? (타임스탬프)

  • ① 교착 상태가 발생할 수 있다.
  • ② 트랜잭션 간의 충돌은 ROLLBACK 방식으로 해결한다.
  • ③ 잠금(Lock)을 사용하여 직렬 가능성을 보장한다.
  • ④ 로킹 기법보다 구현이 간단하다.
정답 및 해설 보기

정답 ②

타임스탬프는 순서 위반(충돌) 시 해당 트랜잭션을 ROLLBACK으로 되돌려 해결한다.

보기 판정 이유
타임스탬프는 교착 발생 안 함(핵심 장점)
충돌을 ROLLBACK으로 해결 → 정답
잠금을 사용 안 함
로킹보다 구현 복잡

🔑 암기 타임스탬프 = 잠금 없음 · 교착 없음 · 충돌은 ROLLBACK.

[기출 7 출제] 교착 상태(Deadlock)의 발생 조건(4가지)에 해당하지 않는 것은? (교착 4조건)

  • ① 상호 배제(Mutual Exclusion)
  • ② 점유와 대기(Hold and Wait)
  • ③ 선점(Preemption)
  • ④ 환형 대기(Circular Wait)
정답 및 해설 보기

정답 ③

교착 4조건은 상호 배제·점유와 대기·선점·환형 대기다. 선점은 오히려 교착을 깨는 방법이므로 조건이 아니다.

보기 판정 이유
① 상호 배제 4조건
② 점유와 대기 4조건
③ 선점 4조건은 비선점 → 정답(틀림)
④ 환형 대기 4조건

🔑 암기 상·점·비·환 — '비'선점이지 선점이 아니다.

[기출 8 출제] COMMIT되지 않은 데이터를 다른 트랜잭션이 읽음으로써 발생하는 병행 수행의 문제는? (병행 수행 문제)

  • ① 갱신 분실(Lost Update)
  • ② 비완료 의존성(Dirty Read)
  • ③ 불일치 분석(Unrepeatable Read)
  • ④ 직렬 가능성(Serializability)
정답 및 해설 보기

정답 ②

미완료(곧 ROLLBACK될 수 있는) 데이터를 읽는 현상 = 비완료 의존성(Dirty Read).

보기 판정 이유
① 갱신 분실 동시 수정으로 한쪽 값이 덮어써짐
② 비완료 의존성 COMMIT 전 데이터 읽기 → 정답
③ 불일치 분석 같은 데이터 두 번 읽어 결과가 다름
④ 직렬 가능성 병행 제어의 목적(문제 아님)

🔑 암기 미완료 읽기 = Dirty Read / 두 번 읽기 차이 = Unrepeatable Read.


한 장 요약

ACID 4대 특성 — 원일고영

원자성 일관성 고립성(격리성) 영속성
Atomicity Consistency Isolation Durability
All or Nothing 무결성 제약 유지 간섭 차단 영구 반영
COMMIT·ROLLBACK·회복 무결성 제약·트리거 병행 제어(로킹·MVCC) 로그·체크포인트·WAL
  • 1순위 함정 — "영구 반영" 키워드 = 영속성(격리성과 뒤바꿈 주의)

회복 — REDO / UNDO (분별 기준 = COMMIT 발행 여부)

  • REDO — COMMIT O · 이후값 · 영속성 보장
  • UNDO — COMMIT X · 이전값 · 원자성 보장
  • 회복 기법 4종 — 즉시 갱신(로그✅·UNDO+REDO) / 지연 갱신(로그✅·REDO만) / 체크포인트(범위 축소) / 그림자 페이지(로그❌·둘 다 불필요)

병행 수행 3대 문제 — 갱신 분실 / 비완료 의존성(Dirty Read) / 불일치 분석(Unrepeatable Read)

로킹

  • S락(읽기·공유) / X락(쓰기·독점) — 호환은 S+S만 허용
  • 로킹 단위 5종 — DB · File · Relation · Page · Record (단위 ↓ = 오버헤드 ↑ · 병행성 ↑, 항상 반대)

교착 상태 — 상점비환 / 해결 예회탐복

  • 4조건 — 상호 배제 · 점유와 대기 · 선점 · 환형 대기 (전부 만족해야 발생)
  • 해결 — 예방 · 회피(은행원 알고리즘) · 탐지 · 복구

기타 병행 제어

  • 2PL — 확장(획득만) + 수축(해제만) → 직렬 가능성 보장 · 교착은 여전히 가능
  • 타임스탬프 — 잠금 없음 · 교착 없음 · 충돌은 ROLLBACK으로 해결
전체 목록 필기 이론

합격까지

정처기, 혼자 막막하다면

초개인화 학습앱 Klue와 에듀윌 온라인강의로 합격까지 이어가세요.