트랜잭션·로킹·회복 기법 판단법
ACID, 동시성 이상, 2단계 로킹과 로그 회복을 하나의 실행 흐름으로 연결합니다.
관련 시험·과목정보처리기사 필기 · 3과목 데이터베이스 구축정보처리기사 실기 · 데이터 입출력·SQLSQLD · 데이터 모델과 SQLSQLD · SQL 활용·관리 구문9급 컴퓨터일반 · 데이터베이스
ACID와 동시성 이상
원자성은 전부 수행하거나 전부 취소하는 성질, 일관성은 트랜잭션 전후 제약조건 유지, 고립성은 동시 실행 결과가 직렬 실행처럼 보이는 성질, 지속성은 커밋 결과의 영구 보존을 뜻합니다.
- 갱신 분실은 두 트랜잭션의 변경 중 하나가 덮이는 현상이다.
- 오손 읽기는 커밋되지 않은 값을 읽는 현상이다.
- 반복 불가능 읽기와 팬텀 읽기는 같은 행의 값 변화와 조건 범위의 행 집합 변화를 구분한다.
로킹과 직렬 가능성
공유 잠금은 읽기, 배타 잠금은 쓰기에 사용합니다. 2단계 로킹은 잠금을 얻는 확장 단계와 잠금을 해제하는 축소 단계를 겹치지 않게 해 충돌 직렬 가능성을 보장합니다.
- 로킹 단위를 크게 하면 관리 비용은 줄지만 동시성도 줄어든다.
- 교착상태는 대기 그래프 탐지나 타임아웃 등으로 처리한다.
- 엄격한 2단계 로킹은 커밋·롤백까지 배타 잠금을 유지해 연쇄 복귀를 줄인다.
로그와 회복
WAL은 데이터 페이지보다 관련 로그를 먼저 안정 저장장치에 기록하는 원칙입니다. 즉시 갱신은 커밋 전 변경이 디스크에 반영될 수 있어 REDO와 UNDO를 모두 고려하고, 지연 갱신은 커밋 후 반영하므로 주로 REDO가 필요합니다.
- 체크포인트는 회복 시 확인할 로그 범위를 줄인다.
- UNDO는 미완료 트랜잭션의 변경을 되돌린다.
- REDO는 커밋된 변경이 빠졌을 때 다시 적용한다.
동시성 이상과 격리 수준을 연결하기
트랜잭션 문제는 두 실행 흐름을 시간순으로 나란히 적어 아직 커밋되지 않은 값을 읽었는지, 같은 조건을 다시 조회했을 때 결과가 달라졌는지 확인합니다. 잠금 범위와 유지 시간이 커질수록 일관성은 높아질 수 있지만 동시성은 낮아집니다.
- Dirty Read는 미커밋 값, Non-repeatable Read는 같은 행 값의 변화, Phantom Read는 조건 결과 행 집합의 변화다.
- 2단계 잠금은 확장 단계에서 획득하고 축소 단계에서 해제한다.
- 교착상태 탐지 시 대기 그래프의 사이클과 희생 트랜잭션 선택을 확인한다.
격리 수준·MVCC·인덱스 동시성
격리 수준이 높아질수록 허용되는 동시성 이상은 줄지만 잠금 대기나 버전 관리 비용이 커질 수 있습니다. MVCC는 여러 버전의 행을 이용해 읽기와 쓰기의 충돌을 줄이지만, 구현별 스냅샷 시점과 갱신 충돌 규칙은 다를 수 있습니다.
- READ UNCOMMITTED는 오손 읽기를 허용할 수 있고 READ COMMITTED는 이를 막는다.
- REPEATABLE READ는 같은 행의 반복 읽기를 보호하지만 팬텀 처리 방식은 DBMS 구현을 확인해야 한다.
- SERIALIZABLE은 직렬 실행과 같은 결과를 목표로 하며 재시도 가능한 직렬화 실패가 발생할 수 있다.
- 인덱스 범위 잠금이나 predicate locking은 조건 범위에 새 행이 들어오는 팬텀을 막는 데 사용될 수 있다.
시험에 바로 쓰는 비교표
| 항목 | 커밋 전 데이터 반영 | 회복 핵심 | 출제 포인트 |
|---|---|---|---|
| 즉시 갱신 | 가능 | UNDO + REDO | WAL 준수 |
| 지연 갱신 | 하지 않음 | REDO 중심 | 커밋 후 데이터 반영 |
| 검사점 | 방식과 무관 | 탐색 범위 축소 | 로그 전체를 처음부터 읽지 않음 |
지문 표현을 판단 기준으로 바꾸기
- 잠금 획득 후 해제, 다시 획득하지 않음 → 2단계 로킹
- 로그를 데이터보다 먼저 기록 → WAL
- 커밋하지 않은 값 읽기 → 오손 읽기
자주 틀리는 판단
- 원자성과 지속성을 같은 의미로 판단
- 로킹 단위가 작을수록 관리 비용도 작다고 판단
- 즉시 갱신과 지연 갱신의 UNDO·REDO 필요성을 반대로 기억
개념을 확인했다면 실제 문제에서 판단 기준을 적용해보세요.
첫 관련 문제 풀기