비관적 잠금은 충돌 가능성을 고려해 데이터에 접근할 때 잠금을 획득하고 다른 작업의 접근을 조정하는 방식이다.
데이터베이스 내부 |
|---|
WAL · 체크포인트 · MVCC · 트랜잭션 격리 수준 · 읽기 커밋 |
데이터베이스 교착 상태 · 비관적 잠금 · 파티셔닝 · 시점 복구 · 데이터베이스 백업 |
원리
읽고 갱신할 행에 SELECT FOR UPDATE 같은 잠금을 사용하는 구현이 대표적이다. 잠금 종류와 유지 기간은 데이터베이스 및 트랜잭션 경계에 따른다.
예시
좌석 예약에서 한 행을 잠근 뒤 예약 가능 여부를 검사하고 갱신하면 같은 행의 경쟁 처리를 조정할 수 있다.
데이터베이스 | |
|---|---|
관계형 | MySQL · PostgreSQL · MariaDB · SQLite |
NoSQL | |
스토리지 엔진 | |
주의할 점
오래 잠근 채 사용자 입력이나 외부 통신을 기다리면 대기와 교착 위험이 커진다. 잠금은 조건에 맞는 모든 업무 제약을 자동으로 보장하지 않는다.