낙관적 락 & 비관적 락

Yeeun_Kim·2024년 8월 12일
0

1. 낙관적 락

DB에 Lock을 즉시 설정하지 않고, 데이터의 커밋 전 충돌을 감자하는 방식

특징

  • DB 레벨이 아닌 어플리케이션 레벨에서 Lock을 핸들링 함으로써 동시에 여러 트랜잭션이 데이터를 읽을 수 있다.
  • 버전 관리를 통해 동작한다. Entity의 상태가 변경될 때마다 증가하며 Entity의 버전을 통해 충돌을 감지하고 처리한다.
  • 충돌이 감지 되었을 때, 특정 예외가 발생하며 예외에 대한 후 처리가 가능하다.

2. 비관적 락

데이터를 읽을 때 즉시 DB Table 또는 Record에 Lock을 설정
즉, 다른 트랜잭션이 해당 데이터를 읽거나 수정되어 락키를 획득할 때까지 대기합니다.

특징

  • 데이터를 읽는 시점부터 락을 설정하기 때문에 다른 트랜잭션이 동시에 해당 데이터를 수정하는 것을 방지
  • 비관적 락에는 공유 락과 베타 락으로 나뉘어져 있다.
  • 일반적으로 트랜잭션이 종료될 때까지 락을 유지하며 다른 트랜잭션이 해당 데이터에 접근이 불가하다.
공유락

데이터를 읽을 때 사용되며, 다른 트랜잭션도 해당 데이터를 읽기 가능

베타 락

데이터를 수정할 때 사용되며 해당 데이터에 대한 다른 트랜잭션 접근을 차단

3. 장단점

1) 낙관적락

1-1 ) 장점
  • 충돌이 거의 나지 않는 환경에서 처리 성능이 비관적 락에 비해 좋다.
  • 다른 트랜잭션이 데이터에 접근한느 것을 제어하지 않기 때문에 동시성이 높다.
1-2 ) 단점
  • 충돌을 방지하지 못한다.
  • 충돌시 롤백처리를 해야한다.
  • 충돌이 빈번할 경우 오히려 처리 비용이 크다.

2) 비관적락

2-1 ) 장점
  • 데이터의 일관성을 보장할 수 있다.
  • 데이터베이스 격리 수준을 보장하고 높일 수 있다.
2-2 ) 단점
  • 다른 트랜잭션이 데이터를 사용하지 못해 동시성이 낮아진다.
  • 대규모 트래픽에서의 성능 저하 가능성이 있다.
  • 트랜잭션끼리 서로의 자원을 선점시 데드락이 걸릴 위험성이 존재한다.

참고

https://sjh9708.tistory.com/66
https://velog.io/@whdgh9595/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%B9%84%EA%B4%80%EC%A0%81-%EB%9D%BD-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%82%99%EA%B4%80%EC%A0%81-%EB%9D%BDfeat.MySQL#%EB%B9%84%EA%B4%80%EC%A0%81-%EB%9D%BD

데이터 베이스 격리 수준 참고문서

https://sjh9708.tistory.com/40

0개의 댓글