← 질문 목록
#380깊이 0
낙관적 락과 비관적 락은 무엇으로 고르는가?
데이터 충돌로 인한 갱신 손실을 막기 위해 충돌 빈도와 시스템 부하를 기준으로 고른다.
| 기준 | 낙관적 락 | 비관적 락 |
|---|---|---|
| 충돌 빈도 | 드물 때 | 잦을 때 |
| 락킹 비용 | 낮음 (버전 체크) | 높음 (물리적 잠금) |
| 대기 시간 | 없음 (실패 시 재시도) | 발생 (락 획득 대기) |
낙관적 락은 데이터 수정 시점에 버전 번호를 확인해 충돌을 감지한다. 충돌이 없으면 반영하고, 버전이 다르면 예외를 던져 사용자가 다시 시도하게 만든다.
비관적 락은 읽거나 고칠 때 미리 잠금을 잡아 부딪히는 작업을 막는다. 무엇까지 막는지는 잠금 종류와 격리 수준에 달렸다. 데이터 무결성을 강하게 보장하지만, 대기 시간이 늘어나 성능 저하가 발생할 수 있다.
읽기 비중이 높고 충돌이 적은 서비스에 낙관적 락을 쓴다. 반면, 결제나 재고 관리처럼 충돌이 잦고 데이터 정확성이 절대적인 곳에 비관적 락을 쓴다.