concurrency-controlversionconflict

낙관적 락과 비관적 락의 차이를 설명해 주세요

예상 시간
7
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

낙관적 락에서 version 컬럼은 왜 필요한가요?

부가 설명

마지막 재고 1개를 여러 사용자가 동시에 구매하는 상황을 떠올리면 락의 차이가 보입니다. 비관적 락은 먼저 접근한 트랜잭션이 재고 행을 잠그고 나머지를 기다리게 합니다. 충돌은 줄지만 대기가 늘고, 락을 오래 잡으면 전체 처리량이 떨어질 수 있습니다.

낙관적 락은 일단 각자 읽고 수정하려다가 저장 시점에 버전이 맞는지 확인합니다. 누군가 먼저 저장했다면 뒤늦게 저장한 요청은 실패하고 재시도나 사용자 안내가 필요합니다. 충돌이 드문 게시글 수정 같은 곳에는 자연스럽지만, 재고 차감처럼 충돌이 잦고 실패 비용이 큰 곳에서는 조심해서 써야 합니다.

한 줄 정리

낙관적 락은 나중에 충돌을 확인하고, 비관적 락은 먼저 막고 처리합니다.