두 락의 정의를 구분할 수 있는지가 아니라, 충돌률·재시도 비용·교착 위험 같은 운영 변수를 가지고 어느 쪽을 골라야 하는지 끊을 수 있는지 가르려는 질문이다.
낙관적 락은 '충돌은 흔치 않다'고 가정하고 읽을 때는 락을 잡지 않는다. 대신 수정 시점에 버전 컬럼이나 타임스탬프로 다른 트랜잭션이 먼저 바꾸진 않았는지 검증하고, 어긋났으면 애플리케이션이 재시도하거나 사용자에게 실패를 돌려준다. 비관적 락은 '충돌은 잦다'고 보고 트랜잭션을 시작하면서 공유·배타 락을 잡아 다른 세션의 접근을 막는다. 그래서 낙관적 쪽은 동시성·처리량은 좋지만 충돌이 많아질수록 재시도 비용이 폭주하고, 비관적 쪽은 무결성은 단단하지만 대기·교착·처리량 저하를 떠안는다. 결국 워크로드의 실제 충돌률과 실패를 사용자에게 어떻게 보여줄지가 선택을 가른다.
충돌률을 측정해 낙관적·비관적 락을 전환해 본 경험이 있다면 데이터 기반 선택 사례로 연결할 수 있다
재시도 백오프·실패 정책을 다듬어 실패율을 낮춰 본 적이 있다면 낙관적 락 운영 관점에서 말할 수 있다
교착 로그를 보고 쿼리 순서·인덱스를 조정해 본 경험이 있다면 비관적 락 운영 측면으로 엮을 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.