2PL (Two-Phase Locking, 2단계 로킹)

개요
2PL(Two-Phase Locking)은 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때 데이터의 일관성과 직렬 가능성(Serializability)을 보장하기 위한 대표적인 동시성 제어 기법이다. 트랜잭션이 데이터를 읽거나 수정할 때 Lock을 획득하고 해제하는 과정을 두 단계로 나누어 관리하며, DBMS의 핵심 트랜잭션 처리 방식으로 널리 사용된다.
1. 개념 및 정의
2PL은 트랜잭션 수행 중 Lock을 획득하는 단계(Growing Phase)와 Lock을 해제하는 단계(Shrinking Phase)를 명확히 구분하는 동시성 제어 기법이다.
트랜잭션은 Lock을 획득하는 동안에는 해제할 수 없고, 한 번 Lock을 해제하면 더 이상 새로운 Lock을 획득할 수 없다. 이러한 규칙을 통해 트랜잭션 간 충돌을 방지하고 데이터의 일관성을 유지한다.
2. 특징
| 구분 | 설명 | 비고 |
| 2단계 구조 | Lock 획득/해제 단계 분리 | Growing/Shrinking |
| 직렬 가능성 보장 | 트랜잭션 순서 유지 | 데이터 일관성 |
| 충돌 제어 | 동시 접근 제한 | Lock 기반 |
| 교착 상태 가능 | Deadlock 발생 가능 | 관리 필요 |
| DBMS 핵심 기법 | 표준 동시성 제어 | RDBMS 활용 |
한줄 요약: 2PL은 Lock의 획득과 해제를 분리하여 데이터 일관성을 보장한다.
3. 구성 요소
| 구성 요소 | 설명 | 기술 요소 |
| Lock | 데이터 접근 제어 | Shared/Exclusive |
| Growing Phase | Lock 획득 단계 | Lock 추가 가능 |
| Shrinking Phase | Lock 해제 단계 | Lock 추가 불가 |
| Transaction | 작업 단위 | ACID 보장 |
| Data Item | 대상 데이터 | 테이블/레코드 |
한줄 요약: 2PL은 Lock과 트랜잭션의 단계적 관리로 구성된다.
4. 기술 요소
| 기술 | 설명 | 활용 |
| Shared Lock | 읽기 Lock | 동시에 허용 |
| Exclusive Lock | 쓰기 Lock | 단독 접근 |
| Strict 2PL | Commit 후 Lock 해제 | 회복성 강화 |
| Conservative 2PL | 사전 Lock 확보 | Deadlock 방지 |
| Deadlock Detection | 교착 상태 탐지 | 시스템 안정성 |
한줄 요약: 다양한 2PL 변형을 통해 성능과 안정성을 조정할 수 있다.
5. 장점 및 이점
| 항목 | 효과 | 상세 설명 |
| 데이터 일관성 | 충돌 방지 | 정확성 확보 |
| 직렬 가능성 | 트랜잭션 순서 보장 | 안정성 |
| 표준화 | 널리 사용되는 기법 | 적용 용이 |
| 유연성 | 다양한 변형 존재 | 환경 대응 |
| 안정성 | 오류 최소화 | 신뢰성 향상 |
한줄 요약: 2PL은 데이터 정확성과 시스템 안정성을 보장한다.
6. 주요 활용 사례 및 고려사항
| 활용 사례 | 설명 | 고려사항 |
| 금융 시스템 | 계좌 거래 처리 | Deadlock 관리 |
| 온라인 쇼핑 | 주문/결제 처리 | 성능 고려 |
| ERP 시스템 | 데이터 동시 처리 | Lock 경합 |
| 데이터베이스 엔진 | 트랜잭션 관리 | 최적화 필요 |
| 분산 시스템 | 데이터 일관성 유지 | 네트워크 지연 |
한줄 요약: 2PL은 다양한 시스템에서 활용되지만 교착 상태와 성능을 고려해야 한다.
7. 결론
2PL은 데이터베이스 트랜잭션 처리에서 핵심적인 동시성 제어 기법으로, 데이터 일관성과 직렬 가능성을 보장하는 데 중요한 역할을 한다. 특히 금융 및 대규모 시스템에서 필수적으로 사용되며, Strict 2PL과 같은 변형을 통해 안정성을 강화할 수 있다. 다만 Deadlock 문제를 해결하기 위한 추가적인 관리 전략이 필요하며, 현대 시스템에서는 MVCC 등과 함께 사용되어 성능과 안정성을 균형 있게 확보한다.