Skip to content

fix: 인기도 정규화 기준과 동점 정렬 보정 - #814

Merged
Whale0928 merged 1 commit into
mainfrom
fix/popularity-reference-tiebreak
Oct 27, 2026
Merged

Whale0928 merged 1 commit into
mainfrom
fix/popularity-reference-tiebreak

Conversation

@Whale0928

Copy link
Copy Markdown
Collaborator

배경

/api/v1/popular/view/week에서 242번(글렌피딕 21년 윈터 스톰 배치 3)이 두 주 연속 1위로 노출되어 운영 DB를 확인했다. 관측 데이터 누적과 배치 실행은 정상이었고, 원인은 순위 산정 방식에 있었다.

  • 10월 18일 하루에 조회 81회가 몰려(10월 12일 주차 95회, 10월 19일 주차 54회) 주간 관심도 분모 50을 넘겼다.
  • 분모에 닿으면 점수가 1.0으로 묶이고, 동점은 alcohol.id 오름차순이라 조회수가 더 많은 주류(8972번, 105회)보다 id가 작은 242번이 앞에 섰다.
  • 나머지 축은 분모가 실제 분포보다 훨씬 커서(별점 최대 19 대비 100, 찜 최대 5 대비 200, 참여 최대 94 대비 300) 종합 점수에 거의 반영되지 않았다.

2026-10-27 기준 주간 스냅샷 분포는 다음과 같다.

축 기존 분모 주간 실제 최댓값 변경 분모
관심도(조회, 기간 합산) 50 63~146 hour 50 / week 200 / month 600
평가도(별점, 누적) 100 10~19 25
선호도(찜, 누적) 200 4~5 10
참여도(리뷰·좋아요·댓글, 누적) 300 16~94 120

변경

  • bottlenote-batch/src/main/resources/application.yml: 단위별 정규화 분모를 운영 분포 기준으로 재설정했다. 다음 롤업부터 반영되며 과거 스냅샷은 바꾸지 않는다.
  • CustomPopularQueryRepositoryImpl: 주간 인기, 주간·월간 관심도 목록의 정렬을 점수 내림차순 → 원시 조회수 내림차순 → id 오름차순으로 바꿨다. 봄 추천(랜덤)은 그대로다.
  • AlcoholTestFactory: 원시 조회수를 직접 지정하는 persistPopularitySnapshot 오버로드를 추가했다. 기존 시그니처는 그대로 위임한다.
  • PopularitySnapshotConsumerIntegrationTest: 점수가 같을 때 조회수가 많은 주류가 먼저 나오는지 확인하는 테스트 2건을 추가했다.

같은 방문자의 반복 조회 중복 제거는 Redis 구조 변경이 필요해 이 PR 범위에서 제외했다. 이번 변경 후 몇 주 분포를 보고 별도로 진행한다.

검증

  • ./gradlew :bottlenote-batch:test --tests PopularityObservationPropertiesTest: 통과
  • ./gradlew :bottlenote-product-api:integration_test --tests PopularitySnapshotConsumerIntegrationTest: 5건 통과 (신규 2건 포함, TestContainers)
  • 전체 빌드·전체 테스트는 로컬에서 실행하지 않았고 CI 결과로 확인한다.

주간 조회수 분모가 50이라 한 주에 50회만 넘으면 관심도 점수가 만점으로
묶이고, 동점은 id 오름차순으로 풀려서 조회수가 더 많은 주류보다 id가 작은
주류가 앞에 섰다. 10월 18일 하루 급증한 242번이 두 주 연속 1위로 노출된
원인이다.

- 운영 분포(2026-10-27)를 기준으로 단위별 분모를 재설정한다
- 인기 목록 정렬에 원시 조회수 내림차순을 두 번째 기준으로 넣는다
- 테스트 팩토리에 원시 조회수를 지정하는 Snapshot 생성 오버로드를 추가한다
@Whale0928
Whale0928 enabled auto-merge (rebase) October 27, 2026 08:36
@Whale0928
Whale0928 merged commit eed8659 into main Oct 27, 2026
10 checks passed
@Whale0928
Whale0928 deleted the fix/popularity-reference-tiebreak branch October 27, 2026 08:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant