Moait
홈인기 피드모든 블로그모든 태그
홈인기 피드모든 블로그모든 태그
락(Lock)을 걸었는데 왜 오버부킹이 날까? — JPA 1차 캐시의 함정 탈출기 섬네일

락(Lock)을 걸었는데 왜 오버부킹이 날까? — JPA 1차 캐시의 함정 탈출기

반려생활 favicon반려생활·Backend·
JavaMySQL
2026년 04월 30일0

AI 요약

이 글은 AI가 요약했어요. 정확한 내용은 꼭 원문을 확인해 주세요!

핵심 요약

반려생활은 JPA/Hibernate의 1차 캐시와 비관적 락의 상호 작용으로 발생하는 동시성 이슈를 분석하고, 엔티티를 refresh로 강제 갱신하는 해결책을 제시했습니다.

구현 방법

  • Spring Boot + JPA(Hibernate) + MySQL 환경에서 PESSIMISTIC_WRITE 락을 적용한 재고 차감 흐름 구성
  • 락을 걸고 재고를 조회하더라도 1차 캐시로 이미 로드된 엔티티가 DB의 최신 값을 자동으로 반영하지 않는 문제를 분석
  • 해결책으로 em.refresh(entity, LockModeType.PESSIMISTIC_WRITE) 사용 및 테스트 시나리오 제시

주요 결과

  • refresh를 통해 기존 엔티티를 DB의 최신 값으로 갱신하면 중복 차감을 방지하고 SoldOutException이 발생하는 것을 확인
  • 향후 아키텍처 방향으로 식별자 참조 및 조건부 업데이트 등의 설계 아이디어를 제시

연관 피드

%가 높을수록 이 글과 비슷할 가능성이 높아요!
No Image
69%

이구위크 전시 장애 대응기: Redis에는 무슨 일이 있었나

무신사 favicon무신사·2026년 01월 06일
트렌비 리뷰 서비스의 성능 개선기 섬네일
68%

트렌비 리뷰 서비스의 성능 개선기

트렌비 favicon트렌비·2022년 09월 14일
현대자동차그룹 글로벌 차량 가입·개통 시스템 개편하기 (feat. MSA) 섬네일
67%

현대자동차그룹 글로벌 차량 가입·개통 시스템 개편하기 (feat. MSA)

현대자동차 favicon현대자동차·2025년 01월 06일