Inflearn brand logo image

인프런 커뮤니티 질문&답변

최선웅님의 프로필 이미지
최선웅

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

좋아요 수 구현

좋아요 수 구현 PessimisticLock1 질문

해결된 질문

작성

·

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개의 요청은 유실될 수 있는 것입니다!

최선웅님의 프로필 이미지
최선웅

작성한 질문수

질문하기