핵심 요약
반려생활은 JPA/Hibernate의 1차 캐시와 비관적 락의 상호 작용으로 발생하는 동시성 이슈를 분석하고, 엔티티를 refresh로 강제 갱신하는 해결책을 제시했습니다.
구현 방법
- Spring Boot + JPA(Hibernate) + MySQL 환경에서 PESSIMISTIC_WRITE 락을 적용한 재고 차감 흐름 구성
- 락을 걸고 재고를 조회하더라도 1차 캐시로 이미 로드된 엔티티가 DB의 최신 값을 자동으로 반영하지 않는 문제를 분석
- 해결책으로 em.refresh(entity, LockModeType.PESSIMISTIC_WRITE) 사용 및 테스트 시나리오 제시
주요 결과
- refresh를 통해 기존 엔티티를 DB의 최신 값으로 갱신하면 중복 차감을 방지하고 SoldOutException이 발생하는 것을 확인
- 향후 아키텍처 방향으로 식별자 참조 및 조건부 업데이트 등의 설계 아이디어를 제시

