- 먼저 사용하는 사람 다 쓸때까지 다른 사람은 못 건드리게 막는 것
- 동시에 많은 문제 몰리는 상황에서 동시성 문제는 필연적
- 트랜잭션만으로는 해결 불가
- 락 필요성
락 방식의 기본 철학
- 비관적 락:
- 동시 접근 트랜잭션간 충돌 당연히 발생한다고 가정
- 데이터 변경 전에 락 먼저 획득
- 낙관적 락
- 동시 접근 하더라도 충돌이 자주 발생하지 않을 것 이란 가정
- 우선 읽기와 처리 자유롭게 하고 최종 커밋(또는 업데이트) 시점에 충돌확인하여 문제 있으면 다시 처리(재시도) 함
SELECT 와 공유락은 다르다!!!
- MySQL InnoDB는 SELECT시 공유락 안걸고 조회함!
- 배타락을 그 레코드에 걸든 안걸든 SELECT 시 공유락 걸지 않으니 조회가 가능한 것
- S Lock은 읽는 동안 수정 발생않게 잠그는 것
- X Lock은 쓰는 동안 수정이 발생않게 잠그는 것
- 별 차이 없어 보이지만, 이 둘의 결정적 차이는 락 사이의 호환 여부!