- 집계 기준을 "채팅방 전체 메시지 수"로 변경하여 캐릭터별 인기 순위 산정 - Querydsl `PopularCharacterQuery` 추가: chat_message → chat_participant(CHARACTER) → chat_character 조인 - 시간 경계: UTC 20:00 기준 [windowStart, nextBoundary) 구간 사용(배타적 종료 `<`) - `ChatCharacterService.getPopularCharacters`에 @Cacheable 적용 - cacheNames: `popularCharacters_24h` - key: `RankingWindowCalculator.now('popular-chat-character').cacheKey` - 상위 20개 기본, `loadCharactersInOrder`로 랭킹 순서 보존 - `RankingWindowCalculator`: 경계별 동적 키 생성(`popular-chat-character:{windowStartEpoch}`) 및 윈도우 계산 - `RedisConfig`: 24시간 TTL 캐시 `popularCharacters_24h` 추가(문자열/JSON 직렬화 지정) - `ChatCharacterController`: 메인 API에 인기 캐릭터 섹션 연동 WHY - 20시(UTC) 경계 변경 시 키가 달라져 첫 조회에서 자동 재집계/재캐싱 - 방 전체 참여도를 반영해 보다 직관적인 인기 지표 제공 - 캐시(24h TTL)로 DB 부하 최소화, 경계 전환 후 자연 무효화 |
||
---|---|---|
gradle/wrapper | ||
scripts | ||
src | ||
.editorconfig | ||
.gitignore | ||
README.md | ||
appspec.yml | ||
build.gradle.kts | ||
gradlew | ||
gradlew.bat | ||
settings.gradle.kts |