정보처리기사/데이터베이스 활용

병행제어(Concurrency Control)

glorypang 2025. 10. 14. 18:13
728x90
반응형
SMALL

병행제어(Concurrency Control) 핵심

  • 여러 사용자가 동시에 같은 데이터를 사용해도 정합성을 지키는 기술. (동시성 투명성)
  • 대표 기법: 로킹(잠금), 타임스탬프, 낙관적 병행제어(Optimistic), MVCC 등.

로킹(Locking)이란?

  • 누가 A 데이터를 쓰는 동안 다른 사람이 충돌나는 작업을 못 하게 잠그는 것.
  • 화장실 비유: 들어가면 문을 잠가서(LOCK) 다른 사람이 동시에 못 들어오게 함.

잠금 종류(기본)

  • S 락(공유, Shared): 읽기용 잠금. 여러 명이 같이 읽을 수 있음.
  • X 락(배타, Exclusive): 쓰기용 잠금. 한 명만 잡을 수 있고 읽기도 막는 경우가 많음.

로킹 단위(Granularity)

  • 어디에 락을 거느냐: 데이터베이스 전체 / 스키마 / 테이블 / 페이지(블록) / 행 / 열 / 개별 셀
  • 단위가 클수록
    • 오버헤드 ↓ (관리 쉬움, 락 수 적음)
    • 병행성 ↓ (남는 칸 많아도 못 씀)
    • 예: “27000칸 화장실 전체”를 잠그면 다른 사람은 빈 칸도 사용 불가
  • 단위가 작을수록
    • 병행성 ↑ (다른 칸은 사용 가능)
    • 오버헤드 ↑ (락이 많아 관리·체크 비용 증가)
    • 예: “한 칸(행)만” 잠그면 나머지 칸은 자유롭게 사용

요약: [큰 락] 오버헤드↓ / 병행성↓ ↔ [작은 락] 오버헤드↑ / 병행성↑\


추가적인 병행제어 기법

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

  • 확장 단계(Growing phase): 필요한 락들을 획득만 함.
  • 축소 단계(Shrinking phase): 락 해제만 하고 더 이상 신규 획득은 불가.
  • 규칙을 지키면 직렬가능성이 보장되지만, 교착상태(Deadlock) 발생 가능.
구분  락 획득 시점  락 해제 시점 특징  Deadlock
기본 2PL 수행 중 필요 시 일부 해제 가능 직렬성 보장 가능
엄격(Strict) 수행 중 필요 시 커밋 전까지 X-lock 유지 Undo/Redo 용이 가능
엄중(Rigorous) 수행 중 필요 시 커밋 전까지 모든 락 유지 가장 안전, 직렬성+회복성 가능
보수적(Conservative) 시작 시 모두 획득 종료 시 해제 Deadlock 예방, 병행성↓ 없음

타임스탬프 기법 (Timestamp Ordering)

  • 트랜잭션 시작 시점에 고유한 타임스탬프 부여.
  • 연산 순서를 타임스탬프 기준으로 강제 → 직렬화 보장.
  • 충돌 발생 시 늦게 온 트랜잭션은 롤백 처리.

낙관적 병행제어 (Optimistic Concurrency Control, OCC)

  • 트랜잭션 수행 중에는 락을 걸지 않고 자유롭게 실행.
  • 종료 시점에 검증 단계에서 충돌 여부 확인.
  • 충돌 있으면 롤백, 없으면 커밋.
  • 읽기 위주 환경(충돌 적음)에 적합.

다중 버전 병행제어 (MVCC: Multi-Version Concurrency Control)

  • 데이터 변경 시 기존 값을 지우지 않고 새 버전 생성.
  • 읽기 트랜잭션은 자기 시작 시점의 버전을 읽음 → 읽기와 쓰기 충돌 최소화.
  • 대표 사례: PostgreSQL, Oracle의 Snapshot Isolation.

병행제어를 하지 않으면 생기는 문제

갱신분실(Lost Update)

  • 두 트랜잭션이 같은 데이터를 수정할 때 마지막에 쓴 값이 앞선 수정값을 덮어써서 사라짐.
  • 예: T1이 수량 10→12, T2가 10→11로 갱신하면 최종 11이 되어 T1의 수정이 사라짐.

완료 의존성(Uncommitted Dependency, Dirty Read)

  • 다른 트랜잭션의 커밋 전 변경분을 읽어 사용. 이후 그 트랜잭션이 롤백하면 읽은 값이 허상이 됨.
  • 예: T1이 가격 100→200(미커밋), T2가 200을 보고 결제, T1 롤백 → T2는 잘못된 값 기반 처리.

모순성(Inconsistency)

  • 동시 갱신으로 무결성/제약이 깨진 상태가 관찰됨.
  • 예: 계좌 이체 중 출금은 반영되고 입금은 지연되어 총액 보존 규칙 위반 상태가 잠시 노출.

연쇄복귀(Cascading Rollback)

  • 한 트랜잭션이 롤백되면 그 미커밋 결과를 읽었던 다른 트랜잭션들도 줄줄이 롤백해야 하는 상황.
  • 예: T2가 T1의 미커밋 값을 읽어 갱신 → T1 롤백 시 T2도 롤백 필요.

 

728x90
반응형
LIST