데이터베이스 락
DB의 트랜잭션 처리의 순차성을 보장하기 위해 데이터 변경을 일시적으로 중지하는 것.
일반적으로 일관성과 무결성을 유지하기 위해 DB에서 사용하는 공통적인 방법이다.
락은 데이터베이스 뿐만 아니라 어플리케이션에서도 걸 수 있는데, 어플리케이션단에서 거는 락은 optimistic DB에서 거는 것은 perssimisitic락이다.
optimistic
@Version
을 사용하면 사용가능)perssimistic
락에대해 고민할 때 고려사항
충돌이 빈번한지
읽기 / 쓰기 연산의 비율
-> 일반적인 웹 어플리케이션은 읽기가 대부분이므로 웹 어플리케이션은 낙관적 lock을 사용한다.
그럼 DB에서 처리하는 락은 어떤 것들이 있을까?
perssimistic lock은 데이터베이스, 엔진마다 상이하기 때문에 MySQL의 InnoDB의 락에 대해 알아보자.
perssimistic 락에 대한 설명(InnoDB)
공통적으로
X락(exclusive)
S락(shared)
외에도 update lock, intent lock이 있다.
InnoDB는 어떤 락 방식을 사용할까?
레코드락
gap lock
데드락이 생기는 경우
→ deadlock detection (작은 트랜잭션을 롤백)
→ lock wait timeout (일정시간 지나면 감지)
etc