비관적 락(Pessimistic Lock)
낙관적 락(Optimistic Lock)
- 정의
낙관적 락은 동시에 두 트랜잭션이 동일한 데이터에 접근해도 충돌이 드물게 발생할 것이라고 가정합니다. 따라서, 트랜잭션이 데이터를 읽을 때 락을 걸지 않지만, 데이터를 변경하려 할 때 충돌 여부를 확인합니다.
- 종류
- 버전 락(Version Lock)
- 타임스탬프락(Timestamp Lock)
데드락 (Dead Lock)
데드락은 두개 이상의 프로세스나 스레드가 서로의 작업을 기다리며 자원에 대해 무한정 대기하고 있는 상황을 뜻합니다.
![*출처 : https://www.javatpoint.com/deadlock-in-dbms*](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9b752708-f813-4b39-8e17-ba10201fd204/Untitled.png)
*출처 : https://www.javatpoint.com/deadlock-in-dbms*
선택 : 비관적 락
- 주문과 같이 동시에 여러 사용자의 쓰기 작업이 집중적으로 이루어지는 상황에선 많은 충돌이 일어난다.
- 낙관적 락을 사용하면 충돌 발생 시 지속적으로 버전을 확인하며 재 시도 로직이 너무 자주 발생하여 성능이 오히려 저하 됨.
- 비관적 락을 통해 접근을 제어해 데이터의 일관성을 효과적으로 관리할 수 있고 트랜잭션의 실행이나 처리 순서를 예측해 락을 획득하고 해제하는 과정이 명확해 서비스를 더욱 안정적으로 관리할 수 있다고 판단함.
사용할 비관적 락 종류