병행 제어
기술노트
🔄 병행 제어 (Concurrency Control)
병행 제어는 다중 사용자 환경에서 여러 트랜잭션이 동시에 데이터베이스에 접근하여 데이터를 조작할 때, 데이터의 일관성과 무결성을 유지하기 위한 제어 기법입니다. 여러 트랜잭션이 동시에 실행되더라도, 마치 순차적으로 실행되는 것처럼 보이게 하여 데이터의 정확성을 보장합니다.
🤔 병행 제어는 왜 필요한가?
병행 제어가 없다면, 여러 트랜잭션이 동시에 데이터를 변경할 때 다음과 같은 문제가 발생할 수 있습니다.
- 갱신 손실 (Lost Update) : 하나의 트랜잭션이 데이터를 변경한 후 커밋하기 전에, 다른 트랜잭션이 같은 데이터를 변경하여 먼저 커밋하면, 첫 번째 트랜잭션의 변경 내용이 사라지는 현상.
- 현황 파악 오류 (Dirty Read / Uncommitted Dependency) : 하나의 트랜잭션이 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 현상. 만약 첫 번째 트랜잭션이 롤백되면, 두 번째 트랜잭션은 존재하지 않는 데이터를 읽은 것이 됩니다.
- 모순성 (Inconsistency) : 여러 트랜잭션이 동시에 실행되면서 데이터의 일관성이 깨지는 현상.
- 연쇄 복귀 (Cascading Rollback) : 하나의 트랜잭션이 롤백될 때, 그 트랜잭션이 변경한 데이터를 읽었던 다른 트랜잭션들까지 연쇄적으로 롤백되는 현상.
병행 제어는 이러한 문제들을 방지하여 데이터베이스의 신뢰성을 높입니다.
📚 병행 제어 기법
- 로킹 (Locking) : 트랜잭션이 특정 데이터에 접근할 때, 다른 트랜잭션이 그 데이터에 접근하지 못하도록 잠금(Lock)을 설정하는 방식입니다. 가장 대표적인 병행 제어 기법입니다.
- 타임스탬프 순서 (Timestamp Ordering) : 각 트랜잭션에 고유한 타임스탬프를 부여하고, 이 타임스탬프 순서에 따라 트랜잭션의 실행 순서를 결정합니다.
- 다중 버전 동시성 제어 (MVCC, Multi-Version Concurrency Control) : 데이터의 여러 버전을 유지하여, 읽기 작업이 쓰기 작업을 방해하지 않도록 합니다. (예: PostgreSQL, Oracle)
💡 정보처리기사 핵심 Point
- 병행 제어는 다중 사용자 환경에서 데이터베이스의 일관성과 무결성을 보장하는 핵심 기술입니다.
- 정보처리기사 시험에서는 병행 제어의 목적, 발생 가능한 문제점(갱신 손실, 현황 파악 오류 등), 그리고 주요 기법(로킹, 타임스탬프)의 개념을 묻는 문제가 자주 출제됩니다.
- 특히 로킹 기법의 종류(공유 락, 배타 락)와 교착 상태(Deadlock)의 발생 조건 및 해결 방법을 이해하는 것이 중요합니다.