Lock


DB락 - 개념이해

세션A가 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데,

세션B에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다.

바로 트랜잭션의 원자성(Atomicity)이 깨지는 것이다. 추가적인 문제로는 세션A가 중간에

롤백을 하게 되면 세션B는 잘못된 데이터를 수정하는 문제가 발생한다.

이러한 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는

커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다.

데이터베이스는 이러한 문제를 해결하기 위해 Lock 이라는 개념을 제공한다.


세션A와 세션B가 있다. 세션A가 먼저 트랜잭션을 시작하게 되면 세션A가 가장 먼저

‘첫 번째 로우’의 락을 먼저 획득해야 한다. 그리고 나서 세션B가 트랜잭션을 시도한다.

이때 이미 락은 세션A에게 넘어가 있기 때문에 세션B는 락이 돌아올 때 까지 기다린다.

참고로 세션B가 락을 무한정 대기하는 것은 아니고,

락 대기 시간을 넘어가면 락 타임아웃 오류가 발생한다. (락 대기시간은 설정 가능하다.)

이제 세션A가 락을 반납했다고 하면, 세션B가 락을 받고 쿼리를 실행한다.