- 집계 기준을 "채팅방 전체 메시지 수"로 변경하여 캐릭터별 인기 순위 산정
- 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 부하 최소화, 경계 전환 후 자연 무효화
		
	
		
			
				
	
	
		
			12 lines
		
	
	
		
			183 B
		
	
	
	
		
			INI
		
	
	
	
	
	
			
		
		
	
	
			12 lines
		
	
	
		
			183 B
		
	
	
	
		
			INI
		
	
	
	
	
	
| root = true
 | |
| 
 | |
| [*]
 | |
| charset = utf-8
 | |
| end_of_line = lf
 | |
| indent_size = 4
 | |
| indent_style = space
 | |
| trim_trailing_whitespace = true
 | |
| insert_final_newline = true
 | |
| max_line_length = 130
 | |
| tab_width = 4
 |