동시성 제어란


동시성 제어가 왜 필요할까?

image.png

위 이미지 처럼 2개의 트랜잭션이 실행되었다고 가정하자

트랜잭션 A 는 x와 y를 더해 y값을 수정하고

트랜잭션 B는 x와 y를 더해 x값을 수정한다.

위 예시는 정상적인 흐름의 실행 예시이다.

하지만 트랜잭션이 동시에 실행됐다고 가정해보자.

image.png

위 이미지 과정처럼 트랜잭션 A가 실행하다가 다른 트랜잭션에 switching 될 수도 있고 꼭 트랜잭션이 동시에 시작하지 않더라도 동시에 실행되는 트랜잭션은 어떻게 switching되어 어떤 실행 결과가 나올지 예상할 수 없다.(이러한 동시성 문제를 운영체제에선 경쟁조건:race condition 이라고 부른다)

데이터베이스에서 동시성 문제를 어떻게 해결할까?

image.png

데이터베이스에서 이러한 동시성 문제를 락으로 해결한다(운영체제에서도 존재하는 그 락이다)

데이터베이스에서 락은 크게 2가지 종류가 있는데,

읽기를 위한 락과 읽고 쓰기를 위한 락이 있다.