DB 다루다가 동시에 같은 행(row)을 수정할 때 충돌 처리를 어떻게 해야 하나 찾아보니 낙관적 락(optimistic lock)이랑 비관적 락(pessimistic lock)이라는 개념이 나오더라고요. 이름만 봐선 뭐가 뭔지 잘 모르겠어요.
지금은 그냥 이렇게 조회하고 수정하는데, 두 사람이 거의 동시에 같은 재고를 수정하면 한쪽 변경이 덮어써지는 문제가 있어요.
SELECT stock FROM item WHERE id = 1;
UPDATE item SET stock = ? WHERE id = 1;
낙관적 락은 version 컬럼 같은 걸 두고 업데이트할 때 버전 안 맞으면 실패시키는 방식이라던데, 이런 식인가요?
UPDATE item SET stock = ?, version = version + 1
WHERE id = 1 AND version = ?;
비관적 락은 아예 조회할 때부터 잠가버리는(SELECT ... FOR UPDATE) 거라고 이해했는데 맞나요? 그리고 실무에서 충돌이 자주 나는 상황이면 뭘 쓰고, 드물게 나는 상황이면 뭘 쓰는 게 좋은지 판단 기준을 알고 싶습니다. 아직 이런 락 개념이 익숙하지 않아서 쉽게 설명해주시면 감사하겠습니다.