-
Notifications
You must be signed in to change notification settings - Fork 3
Domain HotTopic
wjkim9 edited this page Jul 23, 2025
·
15 revisions
HotTopic 도메인은 매일 수집된 뉴스 데이터를 분석하여, 특정 날짜에 가장 많이 언급된 키워드 순위를 도출합니다.
사용자는 이를 통해 현재 사회에서 주목받는 이슈와 트렌드를 한눈에 확인할 수 있습니다.
본 도메인은 통계 기반 분석, 캐시 최적화, 비정형 텍스트 처리를 핵심으로 합니다.
📁 HotTopic
├── controller
│ ├── HotTopicAdminController.java
│ └── HotTopicController.java
├── dto
│ └── HotTopicResponseDTO.java
├── entity
│ └── HotTopic.java
├── exception
│ └── HotTopicException.java
├── repository
│ └── HotTopicRepository.java
└── service
└── HotTopicService.java
| 계층 | 책임 설명 |
|---|---|
| controller | 사용자/관리자 API 요청을 받고 응답을 처리합니다. |
| service | 핵심 로직 (핫토픽 계산, 캐싱 처리 등)을 담당합니다. |
| repository | DB 조회 및 저장을 처리하는 JPA 인터페이스입니다. |
| entity | DB 테이블과 매핑되는 핵심 모델입니다. |
| dto | API 응답 전용 데이터 전송 객체입니다. |
| exception | 도메인 전용 예외 처리 로직을 담당합니다. |
| 기능 | 설명 |
|---|---|
| 뉴스 키워드 집계 | 뉴스 본문에서 명사 중심의 키워드를 추출하여 빈도수 계산 |
| 일간 핫토픽 랭킹 생성 | 하루 동안 가장 많이 등장한 키워드 상위 10개를 저장 및 제공 |
| Redis 캐싱 | 동일 요청에 대해 성능 최적화를 위해 하루 단위 캐시 사용 |
| API 제공 |
/api/hottopic 엔드포인트를 통해 일일 핫토픽 데이터 제공 |
- 어제 수집된 뉴스 데이터를 기반으로, 가장 많이 등장한 키워드 상위 10개를 선정하여 제공합니다.
- 단어는 명사 기준으로 분석되며, 불용어는 제외됩니다.
관련 API
GET /api/hottopicAPI 응답 예시
[
{
"topicRank": 1,
"keyword": "총선",
"keywordCount": 452,
"topicDate": "2025-07-22"
},
{
"topicRank": 2,
"keyword": "폭염",
"keywordCount": 389,
"topicDate": "2025-07-22"
}
]
- Redis를 활용하여 매일 1회 생성된 핫토픽 데이터를 캐싱합니다.
- 캐시 키 예시:
hottopic:daily - 동일한 날에 대한 중복 요청은 Redis에서 바로 반환하여 성능을 개선합니다.
- 수집 배치가 실패했거나 테스트가 필요한 경우, 관리자가 수동으로 핫토픽 생성을 트리거할 수 있습니다.
관련 API
POST /api/admin/hottopic- DB 조회 실패, 캐시 미존재, 날짜 파라미터 오류 등에 대해 커스텀 예외(
HotTopicException)로 명확히 처리합니다. - 에러는 일관된 포맷의 Response로 반환됩니다.
- 키워드 추출에 형태소 분석기(Nori Analyzer 또는 커스텀 필터)를 적용하여 의미 없는 단어 제거
- 일간 단위의 분석으로 날짜 기준의 정확성 유지