[면접 대비/DB] 동시성 제어(Concurrency Control)

AmeriKano·2023년 11월 5일

시작하며

이번 주제는 DB의 트랜잭션 (transaction) 에서 중요하게 생각하는 동시성 제어 (Concurrency Control) 이다.


동시성 제어(Concurrency Control)

동시성 제어(Concurrency Control)란 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법이다.

동시성 제어의 정의

다중 사용자 환경을 지원하는 데이터 베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능이다. 다중 사용자 환경을 지원하는 DB system의 경우 필수적으로 지원해야 하는 기능으로 병행제어 라고도 한다. 동시성 제어를 통해 트랜잭션의 직렬화 수행(여러 작업이 동시에 일어나지 않고 일정한 순서를 지키며 한 번에 하나의 트랜잭션을 수행하는 것)을 보장할 수 있게 된다.

동시성 제어의 목적

  • 트랜잭션의 직렬성 보장
  • 공유도 최대, 응답 시간 최소, 시스템 활동의 최대 보장
  • 데이터의 무결성 및 일관성 보장

동시성 제어를 하지 않을 경우 발생하는 문제

갱신 손실 (Lost Update)

  • 하나의 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어씀으로써 갱신이 무효화가 되는 것을 의미
  • 두 개이상 트랜잭션이 한 개의 데이터를 동시에 갱신(Update)할 때 발생

현황파악오류 (Dirty Read)

  • 읽기 작업을 하는 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽기 때문에 발생하는 문제
  • 작업중인 트랜잭션 2가 작업을 Rollback한 경우 트랜잭션 1은 무효가 된 데이터를 읽게 되고 잘못된 결과를 도출한다.

모순성 (Inconsistency)

  • 다른 트랜잭션들이 해당 항목 값을 갱신하는 동안 한 트랜잭션이 두 개의 항목 값 중 어떤 것은 갱신되기 전의 값을 읽고 다른 것은 갱신된 후의 값을 읽게 되어 데이터의 불일치가 발생하는 상황

연쇄복귀 (Cascading Rollback)

  • 두 트랜잭션이 동일한 데이터 내용을 접근할 때 발생
  • 한 트랜잭션이 데이터를 갱신한 다음 실패하여 Rollback 연산을 수행하는 과정에서, 갱신과 Rollback 연산을 실행하고 있는 사이에 해당 데이터를 읽어서 사용할 때 발생할 수 있는 문제

예상질문

동시성을 제어할 수 있는 기법에는 어떤 것들이 있나요?

트랜잭션이 데이터에 락을 거는 락킹(locking) 기법, 시스템에서 생성하는 고유 시간 번호인 타임스탬프를 트랜잭션에 부여하여 접근 순서를 보장하는 타임스탬프(timestamp) 기법, 트랜잭션을 수행하고 종료할 때 적합성을 검증하여 최종 반영하는 적합성 검증(validation) 이 있습니다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글