서론
프로젝트를 진행하던 와중 한 도메인의 데이터에 대해 여러 유저가 적용하는 경우 AI가 추천하는 대로 pessimistic lock 즉 비관적 락을 걸어 lock을 제어했더니 강사님이
비관적 락은 은행과 같이 보안이 치명적인 곳에서 주로 사용하고 적용한 데이터에 대한 읽기도 막혀서 되게 추천하지 않는 lock 방식이었다고 하였다.
실제로 맨처음에는 race condition 문제를 해결했다고 좋아했으나 이후 테스트에서 관련 기능의 속도가 되게 느려짐을 확인하게 되었다.
동시성 제어의 필요성?
왜 서버를 설계할 때 동시성 제어를 하는 것이 그토록 중요할까?
동시성 제어란 여러 개의 트랜잭션이 데이터 무결성을 보장한 상태로 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법을 의미합니다.
여러 프로세스나 스레드가 동일한 데이터에 접근을 할 때 시점에 따라 충돌이 발생하게 되고 이러한 경우에 충돌을 막고 데이터의 일관성 및 무결성을 보장하기 위해서는 필수적인 요소라고 생각됩니다.
그리고 동시성을 올릴수록 일관성이 낮아지고 동시성을 제한할 수록 일관성을 높아진다고 생각해도 무방합니다.
이러한 정합성과 성능을 보장하기 위해 적절한 lock 정책으로 동시성 제어를 잘할 필요성이 생긴다고 볼 수가 있다.
낙관적 락(Optimistic Lock)
충돌이 발생하지 않는다고 낙관적으로 가정하는 방식이다. DB 락을 걸지 않고 수정 시점에 충돌 여부를 확인하게 된다.
비관적 락(Perssimistic Lock)
충돌이 발생한다고 비관적으로 가정하는 방식이다.