목차
인기 키워드 중복 문제
문제 상황


- 인기 키워드가 중복되어 노출되는 문제가 발생함
- 로컬, 개발, 스테이지 환경에서 재현 불가
- 망분리 PC의 로컬에서 직접 운영 DB에 붙어서 확인했으나 재현 불가
- 동일한 쿼리를 실행해도 중복되는 키워드가 없음을 확인
모르겠어서 GPT에게 문의

- “동시성 문제”에서 힌트를 얻고, 문제 상황이 발생한 API의 코드를 살펴보았음
코드 분석
@Cacheable(cacheNames = "키워드캐시이름", key = "'키워드캐시키'")
@Override
public List<KeywordGroup> findAllKeywordGroup(/* parameters */) {
//...
}
KeywordGroup
이라는 도메인 객체를 캐싱 (여기까진 문제가 없다)
문제 원인이 되는 부분 조사
로컬 캐시를 사용한 것 까지는 문제가 없었다. 하지만, 문제가 되는 부분이 있었으니…
- 캐시가 된 객체는 모든 스레드가 접근이 가능한 공유 자원이다.
- 공유 자원을 비즈니스 로직에서 그대로 사용한다 ← 여기까진 문제가 없다.
- 그러나, 공유 자원을 비즈니스 로직과 프레젠테이션 로직에 걸쳐
Collections.shuffle()
을 통해 셔플링을 하고 있었던 것이다.