본문 바로가기
데이터베이스

DB 동시성 제어의 절대 규칙: 2PL의 확장/수축 단계와 연쇄 복귀 방지(Strict 2PL)

by 매일기술사 2026. 4. 16.
기술사 학습노트 데이터베이스 트랜잭션 및 동시성 제어
DATABASE ARCHITECTURE · 정보관리기술사 / 컴퓨터시스템응용기술사

트랜잭션 직렬가능성의 절대 원칙: 2-Phase Locking (2PL) 규약 완벽 해부

다중 사용자 환경에서 데이터베이스의 무결성을 보장하기 위한 락(Lock) 기반 동시성 제어의 핵심 알고리즘. 확장 단계(Growing)와 수축 단계(Shrinking)의 분리 메커니즘을 통해 직렬가능성(Serializability)을 수학적으로 보장하는 2PL의 구조와 다양한 변형(Strict, Rigorous)을 심층 분석한다.

정보관리기술사 컴퓨터시스템응용기술사 데이터베이스 동시성제어 2PL TwoPhaseLocking 직렬가능성 트랜잭션 Deadlock 연쇄복귀
Ⅰ. 동시성 제어(Concurrency Control)와 2PL의 등장 배경

가. 단순 락(Locking) 기법의 치명적 한계

DBMS에서 여러 트랜잭션이 동시에 실행될 때, 상호 간섭으로 인해 발생하는 데이터 갱신 손실(Lost Update), 모순성(Inconsistency), 연쇄 복귀(Cascading Rollback)를 막기 위해 데이터에 락(Lock, 잠금)을 건다. 하지만 트랜잭션 도중에 락을 임의로 걸고 풀기를 반복하면, 락을 사용함에도 불구하고 트랜잭션이 순차적으로 실행된 것과 같은 결과를 보장하는 직렬가능성(Serializability)이 깨지는 문제가 발생한다.

나. 2-Phase Locking (2PL, 2단계 잠금 규약)의 본질

  • 정의: 트랜잭션 내의 모든 락(Lock) 연산과 언락(Unlock) 연산을 2개의 분리된 단계(Phase)로 명확히 나누어 수행하도록 강제하는 규약이다.
  • 목적: 2PL 규약을 준수하는 모든 트랜잭션 스케줄은 반드시 충돌 직렬가능(Conflict Serializable)함이 수학적으로 증명되어 있다. 즉, 2PL은 데이터베이스 일관성 유지의 핵심 메커니즘이다.
Ⅱ. 2PL 아키텍처: 확장(Growing)과 수축(Shrinking) 메커니즘

가. 2단계 잠금 규약의 라이프사이클 도해도

트랜잭션은 실행됨에 따라 필요한 락을 점진적으로 획득하며 정점(Lock Point)에 도달한 후, 일제히 혹은 점진적으로 락을 해제한다. 중요한 원칙은 '한 번이라도 락을 해제(Unlock)하기 시작하면, 더 이상 새로운 락(Lock)을 획득할 수 없다'는 것이다.

시간 (Time) Lock 개수 Lock Point (정점) Lock(A) 더 이상 Lock 불가 Unlock(A) 1단계: 확장 단계 Growing Phase Lock 획득 (O) Unlock 해제 (X) 2단계: 수축 단계 Shrinking Phase Lock 획득 (X) Unlock 해제 (O) 트랜잭션 시작 트랜잭션 종료

나. 2PL의 교착 상태(Deadlock) 한계점

기본 2PL 규약은 트랜잭션의 직렬가능성은 100% 보장하지만, 교착 상태(Deadlock)를 원천적으로 예방하지는 못한다.
트랜잭션 T1이 데이터 A에 락을 걸고 데이터 B의 락을 대기하는 동안, 트랜잭션 T2가 B에 락을 걸고 A의 락을 대기한다면 두 트랜잭션은 영원히 수축 단계(Shrinking)로 넘어가지 못하고 교착 상태에 빠지게 된다. 이를 해결하기 위해 DB 엔진 내부에 별도의 타임아웃이나 Wait-Die/Wound-Wait 알고리즘이 병행되어야 한다.

Ⅲ. 2PL의 고도화: 회복성 확보를 위한 4가지 변형 규약

기본 2PL은 트랜잭션이 완전히 종료(Commit)되기 전에 일부 락을 수축 단계에서 일찍 풀어버린다. 만약 다른 트랜잭션이 이 풀린 데이터를 읽고 연산을 수행했는데, 앞선 트랜잭션이 Rollback된다면 뒤따르던 트랜잭션들도 줄줄이 취소되어야 하는 연쇄 복귀(Cascading Rollback) 문제가 발생한다. 이를 막기 위해 2PL은 점차 엄격해지는 방향으로 발전했다.

분류 명칭 및 약어 락(Lock) 해제 시점 및 아키텍처 특성 해결하는 주요 문제
Basic 2PL 기본 2단계 잠금
(Basic 2PL)
Lock Point 이후 필요 없는 락을 점진적으로 해제한다. 자원 활용도는 좋지만, 커밋 전 풀린 락으로 인해 연쇄 복귀 위험이 크다. 직렬가능성 보장
Strict 2PL 엄격한 2단계 잠금
(S2PL)
공유 락(Read Lock)은 수축 단계에서 점진적으로 풀지만, 배타 락(Write Lock)은 트랜잭션이 Commit/Rollback 될 때까지 모두 유지하다가 한 번에 푼다. (가장 대중적인 DBMS 구현) 연쇄 복귀
(Cascading Rollback) 방지
Rigorous 2PL 강건한 2단계 잠금
(SS2PL)
배타 락(Write Lock)뿐만 아니라, 공유 락(Read Lock)을 포함한 모든 락을 Commit/Rollback 시점까지 유지한다. 구현이 단순하고 안정적이나 동시성이 크게 저하된다. 완벽한 고립성 보장
(구현 단순화)
Static 2PL 보수적 2단계 잠금
(Conservative 2PL)
트랜잭션 시작 시, 자신이 필요로 하는 모든 데이터의 락을 한꺼번에 획득(확장)해야만 실행을 시작한다. 하나라도 획득을 못하면 대기한다. 교착 상태
(Deadlock) 완벽 예방
Ⅳ. 혼동주의: 2PL (2-Phase Locking) vs 2PC (2-Phase Commit)

이름이 유사하여 실무자나 기술사 수험생들이 가장 자주 혼동하는 두 가지 데이터베이스 코어 알고리즘이다. 두 규약은 목적 자체가 완전히 다르다.

비교 관점 2-Phase Locking (2PL) 2-Phase Commit (2PC)
핵심 목적 단일 또는 다중 노드에서 동시성 제어(Concurrency Control)를 통한 고립성(Isolation) 보장. 여러 트랜잭션이 엉키지 않게 직렬가능성을 유지함. 분산 데이터베이스(MSA 등) 환경에서 글로벌 트랜잭션의 원자성(Atomicity) 보장. 모든 노드가 함께 성공하거나 함께 실패(All-or-Nothing)하도록 제어함.
2 Phase 의미 1단계: Growing (락 획득만 가능)
2단계: Shrinking (락 해제만 가능)
1단계: Prepare (모두 커밋 준비 완료 확인)
2단계: Commit / Rollback (실제 실행)
관리 주체 DBMS 내부의 Lock Manager (락 매니저) 글로벌 분산 트랜잭션을 지휘하는 Transaction Manager (코디네이터)
블로그: 기술사 학습노트 · imt-log.tistory.com