해결된 질문
작성
·
40
0
안녕하세요 강사님 강의 잘 듣고 있습니다.
아래 내용이 궁금하여 질문 드립니다.
질문:
PessimisticLock1에서 주석 달아놓으신
"트래픽이 몰리는 상황에서 유실될 수 있으니
게시글 생성 시점에 미리 0으로 초기화해둘 수 있다"
는 부분에서 어떤 이유로 데이터가 유실이 될 수 있는지 궁금한데 예시나 상황에 대해서 추가 설명해주실 수 있을까요?!
감사합니다.
답변 2
1
1
선웅님, 안녕하세요!
int result = articleLikeCountRepository.increase(articleId);
if (result == 0) {
// 최초 요청 시에는 update 되는 레코드가 없으므로, 1로 초기화한다.
// 트래픽이 순식간에 몰릴 수 있는 상황에는 유실될 수 있으므로, 게시글 생성 시점에 미리 0으로 초기화 해둘 수도 있다.
articleLikeCountRepository.save(
ArticleLikeCount.init(articleId, 1L)
);
}
위 코드에서 2개의 요청이
int result = articleLikeCountRepository.increase(articleId);
위 코드를 "동시"에 호출한 상황을 가정해보겠습니다.
아직 ArticleLikeCount가 생성된 적이 없다면, 두 요청은 모두 result가 0으로 응답됩니다.
if (result == 0)
두 요청은 위 조건이 모두 true로 들어가면서 ArticleLikeCount 1로 초기화하는 코드를 두 번 수행하게 됩니다.
그러면 1개의 요청은 유실될 수 있는 것입니다!