핵심 정리
- pessimistic lock : exclusive lock으로 데이터 정합성 보장. 성능이 감소할 우려가 있고, 데드락이 걸릴 위험이 있다.
- optimistic lock : 버전 필드로 정합성을 맞추는 방법. 락을 잡지 않으므로 빠르지만, 업데이트 실패할 경우 재시도 로직을 직접 작성해야하는 번거로움
- named lock : 이름을 가진 lock을 획득한 후 해제할때까지 다른 세션은 이 lock을 획득할 수 없음. transaction이 종료될 때 별도의 명령어로 해제를 수행해주거나 선점시간이 끝나야 해제됨. 분산 락, 타임아웃 구현에 적합하고 데이터 쓰기 작업의 정합성을 맞출 때 좋음. 세션 관리 조심해야하고, 구현이 복잡함
- Facade : 비즈니스 메소드가 실패했을 경우 처리하는 로직을 포함한다. 사용하는 쪽은 Facade를 통해서 비즈니스 메소드를 호출한다. 같은 인터페이스로 만들어 프록시로 활용하면 좋을 듯
Pessimistic Lock

- 실제로 데이터에 Lock 을 걸어서 정합성을 맞추는 방법 (exclusive lock)
- 다른 트랜잭션에서는 lock이 해제되기전에 데이터를 가져갈 수 없음
- 데드락이 걸릴 수 있음!
장단점
- 장점 : 충돌이 빈번하다면 성능 좋음, 데이터 정합성 보장
- 단점 : 락으로 잠그기 때문에 성능 감소 우려
구현