concurrency-controlversionconflict
낙관적 락과 비관적 락의 차이를 설명해 주세요
- 예상 시간
- 7분
30초 답변
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
낙관적 락에서 version 컬럼은 왜 필요한가요?
비관적 락의 단점은 무엇인가요?
낙관적 락 실패는 어떻게 처리하나요?
둘 중 어떤 것이 더 빠른가요?
락을 써도 트랜잭션 범위가 중요한 이유는 무엇인가요?
부가 설명
마지막 재고 1개를 여러 사용자가 동시에 구매하는 상황을 떠올리면 락의 차이가 보입니다. 비관적 락은 먼저 접근한 트랜잭션이 재고 행을 잠그고 나머지를 기다리게 합니다. 충돌은 줄지만 대기가 늘고, 락을 오래 잡으면 전체 처리량이 떨어질 수 있습니다.
낙관적 락은 일단 각자 읽고 수정하려다가 저장 시점에 버전이 맞는지 확인합니다. 누군가 먼저 저장했다면 뒤늦게 저장한 요청은 실패하고 재시도나 사용자 안내가 필요합니다. 충돌이 드문 게시글 수정 같은 곳에는 자연스럽지만, 재고 차감처럼 충돌이 잦고 실패 비용이 큰 곳에서는 조심해서 써야 합니다.
한 줄 정리
낙관적 락은 나중에 충돌을 확인하고, 비관적 락은 먼저 막고 처리합니다.