Optimistic Lock (낙관적 락)

Han Gyul Kang·2022년 10월 16일

동시성 문제

목록 보기
3/7

상위글 : 동시성 이슈 해결 고민

Optimistic Lock (낙관적 락)

은 버전 관리를 통해 Lock을 거는 방식이다.

장점
실제로 데이터베이스에 Lock을 거는 것이 아니기 때문에 데드락에 대한 부담이 없다

단점
업데이트 실패 시 로직을 개발자가 직접 만들어줘야 함
업데이트 실패 시 계속 재시도를 하기 때문에 충돌이 많은 경우에 비관적 락보다 성능이 떨어질 수 있음

방안
충돌이 빈번하게 일어난다면 ? 비관적 락 : 낙관적 락


사용 방법


// method에 Lock Annotation 선언
@Lock(value = LockModeType.OPTIMISTIC)

// 테이블에 version 생성
@Version
private Long version;

// 실패 시 재시도 로직 구성(예)
while(true) {
	try {
		// 에러가 발생하면 while문이 계속 돎
		// 정상적으로 마치면 break를 통해 탈출함
		optimisticLockStockService.decrease(id, quantity);

		break;
	} catch (Exception e) {
		Thread.sleep(50);
	}
}
profile
피아노 치는 개발자

0개의 댓글