데이터베이스 락
- 데이터베이스 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 실행을 보장할 수 있는 직렬화 장치
- 동시에 접근해서 수정하려고 할 때 데이터의 일관성이 깨질 수 있다
- 데이터의 일관성을 지키기 위해
lock
을 걸고 이를 관리하는 것이 locking
이다
동시성
일관성
잠금
필요 업무
- 돈 관련 송금 시스템
- 도서 관리 시스템 (대여)
- 수강 신청
- 멀티 트랜잭션 환경
Lock의 종류
1. Optimistic Lock
- 낙관적인
- 기본적으로 데이터 갱신시 충돌이 일어나지 않을 것이라고 낙관적으로 바라 보는 것
- 비선점적인
- 데이터 갱신시 충돌이 발생하지 않을 것이라고 예상하기 때문에, 기본적으로 락을 걸지 않음
특징
1. 버전을 이용해 관리 (Version)
2. 어플리케이션 락
3. 충돌 방지
같은 데이터베이스에 접근하여 데이터 갱신시 먼저 커밋을 진행하면 DB의 버전을 업한다. 다음으로 갱신하려고 할 때 버전이 바뀌었기 때문에 Optimistic Lock이 발생한다
2. Pessimistic Lock
- 비관적인
- 기본적으로 데이터 갱신시 충돌할 것이라고 비관적으로 보고 미리 잠금하는 것
- 선점적인
- 데이터 갱신시 충돌이 발생할 것이라고 예상하기 때문에 우선적으로 락을 건다 (조회할 때 부터 락)
특징
1. 가져올 때 DB에 락을 건다
2. 데이터베이스 락
3. 무결성의 장점
4. 데드락의 위험성
Pessimistic Lock의 종류
Shared Lock
- 다른 사용자가 동시에 읽을 수 있지만, Update, Delete 방지
Exclusive Lock
- 다른 사용자가 읽기, 수정, 삭제 모두를 불가능하게 함
Optimistic vs Pessimistic
어떤 상황에 어떤 락을 사용하는게 용이할까? (락은 비쌈)
- 충돌이 자주 발생한다
- 읽기와 수정의 비율은 어디에 가까운가
- 일반적으로 웹은 Optimistic Lock을 사용
Reference
카일의 데이터베이스 락