AP 과목 A 15: 트랜잭션, 동시성 제어와 장애 복구

응용정보기술자시험 과목 A에 필요한 ACID와 COMMIT/ROLLBACK, S/X 잠금과 교착 상태, 격리 수준별 이상 현상, WAL·체크포인트·UNDO/REDO 복구를 추적 예제와 오리지널 연습 문제 5문항으로 익힙니다.

応用情報技術者試験科目Aデータベーストランザクション排他制御障害回復

AP 과목 A 제15편 · 2026년도·실라버스 Ver.7.2 기준의 독립 학습 자료입니다. IPA와 제휴하지 않으며 합격을 보장하지 않습니다. 시리즈 허브 보기

학습 인덱스

  1. 출제 범위와 용어
  2. ACID와 트랜잭션 경계
  3. S/X 잠금과 교착 상태
  4. 세 가지 이상 현상과 격리 수준
  5. DBMS별 구현 차이
  6. WAL, 체크포인트, UNDO/REDO
  7. 오리지널 문제 5개
  8. 퀵 시트·함정·복습

1. 출제 범위와 용어

IPA 「응용정보기술자시험(레벨 3) 실라버스 Ver.7.2」의 대분류 3 → 중분류 9 데이터베이스 → 4. 트랜잭션 처리, (1) 동시 실행 제어, (2) 장애 복구, (3) 트랜잭션 관리에 대응한다. 위치는 **PDF 44–45쪽(인쇄 하단 40–41쪽)**이다. AP14의 SQL 조회는 다루지 않는다. 다음 회차 AP16은 네트워크 계층, TCP/UDP, 포트를 다루며, 인덱스, 데이터베이스 성능, 접근 제어는 AP32에서 다룬다.

한국어 日本語 English
트랜잭션 トランザクション transaction
원자성/일관성/격리성/지속성 原子性/一貫性/独立性/耐久性 atomicity/consistency/isolation/durability
공유(S)/배타(X) 잠금 共有(S)/排他(X)ロック shared (S)/exclusive (X) lock
교착 상태 デッドロック deadlock
더티/비반복/팬텀 읽기 ダーティ/反復不能/ファントムリード dirty/non-repeatable/phantom read
미완료/완료 트랜잭션 未完了/完了トランザクション loser/winner transaction
실행 취소/재실행 UNDO/REDO undo/redo

2. ACID와 트랜잭션 경계

  • Atomicity(원자성): 한 트랜잭션의 변경은 전부 반영되거나 전부 취소된다.
  • Consistency(일관성): 트랜잭션이 제약 조건과 불변식을 지키며 유효한 상태에서 유효한 상태로 옮긴다. DBMS가 잘못된 업무 로직까지 마법처럼 고쳐 준다는 뜻이 아니며 올바른 응용 로직도 필요하다.
  • Isolation(격리성): 동시 실행 결과가 약속한 격리 수준의 가시성 규칙을 따른다.
  • Durability(지속성): 성공한 COMMIT의 결과가 설정이 약속한 장애 모델과 내구성 조건에서 보존된다. 원격 백업을 자동으로 보장한다는 뜻은 아니다.
BEGIN;
-- 하나의 업무 단위에 속한 변경
COMMIT;   -- 성공: 변경 확정

BEGIN;
-- 오류 또는 취소 판단
ROLLBACK; -- 명시적 취소: 이 트랜잭션 변경을 되돌림

성공한 COMMIT, 사용자가 요청한 ROLLBACK, 갑작스러운 크래시는 서로 다르다. 크래시 뒤에는 DBMS가 로그와 저장 상태를 조사하여 완료 트랜잭션을 REDO하고 미완료 트랜잭션을 UNDO할 수 있다.

3. S/X 잠금과 교착 상태

잠금 기반 엔진에서는 읽기에 S, 변경에 X 잠금을 흔히 쓴다.

보유 \ 요청 S X
S 호환 비호환
X 비호환 비호환

즉 S/S만 함께 허용된다. 다만 MVCC의 일반 읽기는 동일한 방식의 차단 S 잠금을 잡지 않을 수 있으므로 이 표를 모든 읽기 구현에 그대로 투영하면 안 된다.

순서 T1 T2
1 X(A) 획득 —
2 — X(B) 획득
3 X(B) 요청 → 대기 X(B) 보유
4 X(A) 보유 X(A) 요청 → 대기
5 T1→T2→T1 대기 순환 교착 상태

DBMS는 보통 순환을 검출하고 희생자를 골라 롤백한다. 응용은 실패한 트랜잭션을 재시도할 수 있다. 교착은 순환 대기이며, 단순 장시간 대기는 순환이 없을 수 있고, 기아는 한 작업이 계속 기회를 얻지 못하는 현상이다.

4. 세 가지 이상 현상과 격리 수준

더티 읽기

순서 상태/T1 T2 관찰
0 초기 X=100 —
1 X를 70으로 변경, 미커밋 —
2 — X=70을 읽음
3 ROLLBACK, X=100 T2가 사라질 값을 이미 읽음

비반복 읽기

순서 T1 관찰 T2
0 초기 X=100 —
1 X=100을 읽음 —
2 — X=120으로 변경 후 COMMIT
3 다시 읽어 X=120 —

팬텀 읽기

순서 T1 관찰 T2
0 조건 충족 ID 초기값 {1,2} —
1 조건 검색 결과 {1,2} —
2 — 조건 충족 ID 3 삽입 후 COMMIT
3 같은 조건 재검색 결과 {1,2,3} —

다음은 SQL 표준 현상 기준의 최소 보장 모델이다. 제품마다 더 강하게 동작할 수 있으므로 모든 DBMS의 실제 실행을 예언하는 표가 아니다.

격리 수준 더티 읽기 비반복 읽기 팬텀 읽기
READ UNCOMMITTED 허용 허용 허용
READ COMMITTED 방지 허용 허용
REPEATABLE READ 방지 방지 허용
SERIALIZABLE 방지 방지 방지

5. DBMS별 구현 차이

다음은 2026-10-21에 확인한 공식 문서 기반의 요약이며 전 버전·설정·문장을 망라하거나 영구 불변임을 뜻하지 않는다. 실제 운영에서는 해당 버전 문서를 다시 확인한다.

  • PostgreSQL current: READ UNCOMMITTED는 READ COMMITTED처럼 동작한다. REPEATABLE READ는 트랜잭션 스냅샷으로 표준 최소 보장보다 강하여 팬텀도 방지한다. Serializable은 SSI를 사용하며 직렬화 실패 시 재시도가 필요할 수 있다.
  • MySQL InnoDB 8.4: 기본값은 REPEATABLE READ이고 consistent read는 트랜잭션 스냅샷을 쓴다. locking read/문장과 next-key·gap lock은 문장 및 설정에 따라 팬텀과 차단 동작에 영향을 준다. 공식 URL이 자동 클라이언트에 403을 반환해도 인용 대상은 이 1차 매뉴얼이다.
  • SQL Server: READ COMMITTED 동작은 READ_COMMITTED_SNAPSHOT에 좌우된다. SNAPSHOT은 별도 수준이며 잠금/버전 관리 설정이 차단과 가시성을 바꾼다.
  • Oracle Database: READ COMMITTED와 SERIALIZABLE 트랜잭션 격리(및 read-only 모드)를 지원한다. 읽기는 문장/트랜잭션 일관성을 사용하며 네 표준 수준 이름을 모두 노출하지 않는다.
  • SQLite: 쓰기를 직렬화한다. rollback journal과 WAL 모드의 동작이 다르고 WAL 독자는 snapshot isolation을 본다. read_uncommitted는 예외이며 shared-cache 조건에서만 관련된다.

6. WAL, 체크포인트, UNDO/REDO

WAL의 write-ahead 규칙은 대응하는 dirty data page보다 로그 레코드가 먼저 안정 저장소에 도달해야 한다는 뜻이다. 성공한 COMMIT에는 설정된 내구성 약속에 따라 durable commit record가 필요하다. 체크포인트는 복구 탐색을 줄이는 기준점이지 백업이 아니며, fuzzy checkpoint가 모든 페이지를 즉시 플러시할 필요도 없다.

완전 추적 예제

가정: WAL, STEAL(미커밋 페이지가 디스크에 갈 수 있음), NO-FORCE(커밋 시 모든 데이터 페이지를 강제 기록하지 않음).

LSN 로그/사건 디스크 관련 상태
— 초기 A=100, B=200, C=300
10 T0: C 300→330 —
20 T0 COMMIT —
30 CHECKPOINT active={} 메타데이터가 T0의 이전 작업을 안전하게 반영하며 C=330은 필요 시 생존/재실행한다고 가정
40 T1 BEGIN —
50 T1: A 100→80, 미커밋 A 페이지가 STEAL로 일찍 디스크에 기록됨
60 T2 BEGIN —
70 T2: B 200→260 B 페이지는 NO-FORCE로 아직 디스크에 없음
80 T2 COMMIT, 이후 크래시 크래시 직전 디스크 A=80, B=200, C=330

T1은 loser이므로 UNDO: A 80→100. T2는 winner이므로 REDO: B 200→260. T0는 체크포인트 가정으로 안전하게 반영되어 C=330이다. 최종값은 A=100, B=260, C=330이다. 이는 명시한 WAL/STEAL/NO-FORCE 가정에서 쓰는 시험 수준 winner/loser 규칙이다. 실제 ARIES의 pageLSN, 보상 로그 레코드, 체크포인트 방식은 구현마다 다르고 모든 저장 설계가 모든 크래시에서 UNDO와 REDO를 둘 다 필요로 하지는 않는다.

7. 오리지널 문제 5개

Q1

ACID와 트랜잭션 경계에 관한 설명으로 옳은 것은?

  • ア. 일관성은 DBMS가 잘못된 업무 로직까지 자동으로 수정한다는 뜻이다.
  • イ. 지속성은 COMMIT 즉시 원격 백업이 반드시 생성된다는 뜻이다.
  • ウ. 원자성은 트랜잭션 변경이 전부 반영되거나 전부 취소됨을 뜻하며 ROLLBACK은 명시적으로 취소한다.
  • エ. 성공한 COMMIT과 크래시 복구는 같은 사건이다.

정답: ウ (3). ア는 제약/불변식과 올바른 로직이 필요하므로 틀리다. イ는 약속된 장애 모델의 내구성과 원격 백업을 혼동했다. ウ가 정확하다. エ는 COMMIT, 명시적 ROLLBACK, 크래시 복구가 서로 다른 경계이므로 틀리다.

Q2

T1이 X(A), T2가 X(B)를 보유한 뒤 T1이 X(B), T2가 X(A)를 요청한다. 가장 정확한 설명은?

  • ア. S/S 충돌로 인한 더티 읽기이다.
  • イ. X 잠금의 순환 대기이며 DBMS가 희생자를 롤백한 뒤 응용이 재시도할 수 있다.
  • ウ. 어느 요청도 충돌하지 않으므로 둘 다 즉시 진행한다.
  • エ. 장시간 대기라면 항상 교착이며 순환 확인은 필요 없다.

정답: イ (2). ア는 사용한 잠금과 현상이 모두 다르다. イ가 교착의 정확한 설명이다. ウ는 X/X가 비호환이라 틀리다. エ는 단순 대기와 순환 교착을 혼동했다.

Q3

SQL 표준 현상 표와 제품 구현의 관계로 옳은 것은?

  • ア. 표에 따르면 READ COMMITTED는 세 현상을 모두 방지한다.
  • イ. 모든 DBMS의 REPEATABLE READ는 반드시 팬텀을 허용한다.
  • ウ. SQL Server READ COMMITTED는 설정과 무관하게 언제나 같은 잠금 동작을 한다.
  • エ. 표는 최소 보장 모델이며 PostgreSQL 같은 제품은 특정 수준에서 더 강할 수 있으므로 버전·설정 문서를 확인한다.

정답: エ (4). ア에서 READ COMMITTED는 비반복·팬텀을 허용한다. イ는 PostgreSQL 등 더 강한 구현을 무시한다. ウ는 READ_COMMITTED_SNAPSHOT 영향을 무시한다. エ가 표와 구현의 관계를 정확히 구분한다.

Q4

초기 X=100이다. T1이 X를 70으로 바꾸고 아직 COMMIT하지 않았는데 T2가 70을 읽었다. 이후 T1이 ROLLBACK하여 X=100이 되었다. T2가 겪은 현상은?

  • ア. 더티 읽기
  • イ. 비반복 읽기
  • ウ. 팬텀 읽기
  • エ. 교착 상태

정답: ア (1). ア는 미커밋 값을 읽었으므로 맞다. イ는 같은 항목을 두 번 읽어 커밋된 변경 때문에 값이 달라지는 경우다. ウ는 조건 결과 행 집합이 달라지는 경우다. エ는 순환 대기이며 이 일정에는 없다.

Q5

위 복구 예제에서 크래시 직전 디스크가 A=80, B=200, C=330일 때 복구 후 값은?

  • ア. A=80, B=200, C=330
  • イ. A=80, B=260, C=300
  • ウ. A=100, B=260, C=330
  • エ. A=100, B=200, C=300

정답: ウ (3). ア는 loser UNDO와 winner REDO를 모두 빠뜨렸다. イ는 T1을 남기고 안전한 T0 결과를 잃는다. ウ는 T1을 UNDO하고 T2를 REDO하며 T0 결과를 보존한다. エ는 T2 REDO와 T0 결과를 잃으므로 틀리다.

8. 퀵 시트·함정·복습

퀵 시트: ACID는 all-or-nothing, 유효 상태, 약속된 가시성, 약속된 내구성이다. 잠금은 S/S만 호환. 교착은 대기 순환. 표준 표는 RU=모두 허용, RC=dirty 방지, RR=dirty+non-repeatable 방지, SERIALIZABLE=셋 모두 방지. STEAL은 UNDO 가능성, NO-FORCE는 REDO 가능성을 만든다.

함정: consistency를 “항상 올바른 데이터”로 과장하지 말 것. durability를 백업과 동일시하지 말 것. MVCC 읽기에 잠금 표를 기계적으로 적용하지 말 것. 긴 대기와 교착, 체크포인트와 백업, 표준 최소 보장과 제품 실제 동작을 혼동하지 말 것.

셀프 체크: (1) S/X 표를 빈 종이에 재현할 수 있는가? (2) 세 현상을 값/행 집합으로 구분할 수 있는가? (3) winner/loser와 디스크 선반영 여부로 UNDO/REDO를 설명할 수 있는가? 하나라도 아니면 해당 표를 다시 추적한다.

1/3/7일 복습: 1일째 ACID·잠금표·격리표를 기억으로 작성한다. 3일째 세 일정과 크래시 예제를 숫자까지 재계산한다. 7일째 다섯 문제를 선택지별 오답 이유까지 말하고 제품별 차이는 공식 문서에서 재확인한다.

공식 출처

모두 2026-10-21 확인. 제품 동작은 아래 1차 자료만 사용했으며 제3자 해설은 사용하지 않았다.

이 자료는 독자 제작 학습 자료이며 IPA 또는 각 DBMS 업체와 제휴하지 않는다. 합격이나 특정 제품 동작을 보장하지 않는다.

블로그로