728x90
낙관적인 락(Optimistic Locking):
서버에서 락을 제어 한다.
- JPA -> @Version 속성 사용
- Mybatis -> update_reg_date 같은 컬럼으로 제어 (JPA @Version 과 비슷하다.)
- 사용 예시
- 은행 계좌 잔액 변경: 여러 사용자가 동시에 계좌 잔액을 변경할 수 있지만 충돌이 발생할 가능성이 낮은 경우
- 특징:
- 데이터를 읽을 때 락을 걸지 않고 읽은 후 업데이트 시에 일관성을 확인
- 충돌이 발생할 경우 재시도(retry)를 통해 해결
- 데이터의 버전 관리 필요 (버전 번호 또는 타임스탬프)
- 장점:
- 읽기 성능 향상
- 데이터를 읽을 때 락을 걸지 않아 동시성이 높아짐
- 충돌 발생 시 재시도를 통해 해결 가능
- 읽기 성능 향상
- 단점:
- 재시도 로직 필요
- 데이터의 일관성을 확인하기 위한 버전 관리 추가 필요
- 충돌 시 롤백 또는 예외 처리
비관적인 락(Pessimistic Locking):
DB 내에서 읽기/쓰기를 잠근다.
읽기 -> 공유 락(Shared Lock)/ 읽기 락(Read Lock)
쓰기 -> 배타 락 (Exclusive Lock) / 쓰기 락(Write Lock)
- 사용 예시:
- 호텔 예약: 여러 사용자가 동시에 호텔 예약을 시도할 때 충돌이 발생할 가능성이 높은 경우
- 특징:
- 데이터를 읽을 때 락을 걸어 다른 트랜잭션이 해당 데이터를 수정하지 못하도록 제어
- 트랜잭션이 종료될 때까지 데이터를 독점적으로 사용
- 장점:
- 데이터 일관성 보장: 동시 접근 시 충돌 방지하여 데이터 무결성 유지
- 특정 데이터에 대한 독점적인 접근 가능
- 단점:
- 성능 저하: 락을 사용하므로 동시성이 낮아짐
- 데이터 접근 제어 관리 필요
728x90
'Server' 카테고리의 다른 글
[디자인 패턴] 추상 팩토리 패턴 (0) | 2024.02.03 |
---|---|
CAP 이론 (0) | 2024.02.03 |
[Jmeter]부하 테스트_Window 기준 (0) | 2023.05.11 |
Docker 공부 하면서 주로 사용하는 명령어 (0) | 2023.04.16 |
도커 사용법[2] (0) | 2023.04.16 |