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

AmeriKano·2023년 11월 5일
0

시작하며

이번 주제는 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개의 댓글