← 질문 목록
#253깊이 0
낙관적 락과 비관적 락은 무엇으로 고르는가?
데이터 충돌로 인한 갱신 손실을 막기 위해 충돌 빈도와 시스템 부하를 기준으로 고른다.
| 기준 | 낙관적 락 | 비관적 락 |
|---|---|---|
| 충돌 빈도 | 드물 때 | 잦을 때 |
| 락킹 비용 | 낮음 (버전 체크) | 높음 (물리적 잠금) |
| 대기 시간 | 없음 (실패 시 재시도) | 발생 (락 획득 대기) |
낙관적 락은 데이터 수정 시점에 버전 번호를 확인해 충돌을 감지한다. 충돌이 없으면 반영하고, 버전이 다르면 예외를 던져 사용자가 다시 시도하게 만든다.
비관적 락은 읽거나 고칠 때 미리 잠금을 잡아 부딪히는 작업을 막는다. 무엇까지 막는지는 잠금 종류와 격리 수준에 달렸다. 데이터 무결성을 강하게 보장하지만, 대기 시간이 늘어나 성능 저하가 발생할 수 있다.
읽기 비중이 높고 충돌이 적은 서비스에 낙관적 락을 쓴다. 반면, 결제나 재고 관리처럼 충돌이 잦고 데이터 정확성이 절대적인 곳에 비관적 락을 쓴다.
추천 꼬리질문
관련 질문
- 격리 수준을 올리면 무엇을 잃는가?데이터베이스락을 통한 동시성 제어 방식의 선택은 트랜잭션 격리 수준에 따른 일관성 및 성능 트레이드오프와 밀접하게 연관된다.
- 락보다 높은 수준의 도구를 먼저 고르는 이유는?언어 · 런타임동시성 도구를 고르는 기준이라는 같은 물음이다 — 한쪽은 수준을, 한쪽은 방식을 고른다.
- 트랜잭션 격리 수준을 결정하는 기준은 무엇인가?데이터베이스낙관적/비관적 락과 트랜잭션 격리 수준은 모두 동시성 제어와 데이터 일관성 유지 전략에 관한 개념이다.
- 낙관적 락과 비관적 락은 무엇으로 고르는가?데이터베이스
- 체크 예외와 언체크 예외의 선택 기준은 무엇인가?프레임워크