Skip to content

Domain HotTopic

wjkim9 edited this page Jul 23, 2025 · 15 revisions

🔸HotTopic

개요

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 도메인 전용 예외 처리 로직을 담당합니다.

역할 및 책임 (Responsibility)

기능 설명
뉴스 키워드 집계 뉴스 본문에서 명사 중심의 키워드를 추출하여 빈도수 계산
일간 핫토픽 랭킹 생성 하루 동안 가장 많이 등장한 키워드 상위 10개를 저장 및 제공
Redis 캐싱 동일 요청에 대해 성능 최적화를 위해 하루 단위 캐시 사용
API 제공 /api/hottopic 엔드포인트를 통해 일일 핫토픽 데이터 제공

기능 설명

1. 일간 핫토픽 키워드 조회

  • 어제 수집된 뉴스 데이터를 기반으로, 가장 많이 등장한 키워드 상위 10개를 선정하여 제공합니다.
  • 단어는 명사 기준으로 분석되며, 불용어는 제외됩니다.

관련 API

GET /api/hottopic

API 응답 예시

[
  {
    "topicRank": 1,
    "keyword": "총선",
    "keywordCount": 452,
    "topicDate": "2025-07-22"
  },
  {
    "topicRank": 2,
    "keyword": "폭염",
    "keywordCount": 389,
    "topicDate": "2025-07-22"
  }
]

2. 캐시 기반 응답 속도 최적화

  • Redis를 활용하여 매일 1회 생성된 핫토픽 데이터를 캐싱합니다.
  • 캐시 키 예시: hottopic:daily
  • 동일한 날에 대한 중복 요청은 Redis에서 바로 반환하여 성능을 개선합니다.

3. 관리자용 핫토픽 수집 트리거

  • 수집 배치가 실패했거나 테스트가 필요한 경우, 관리자가 수동으로 핫토픽 생성을 트리거할 수 있습니다.

관련 API

POST /api/admin/hottopic

4. 예외 상황 처리

  • DB 조회 실패, 캐시 미존재, 날짜 파라미터 오류 등에 대해 커스텀 예외(HotTopicException)로 명확히 처리합니다.
  • 에러는 일관된 포맷의 Response로 반환됩니다.

기타 특징

  • 키워드 추출에 형태소 분석기(Nori Analyzer 또는 커스텀 필터)를 적용하여 의미 없는 단어 제거
  • 일간 단위의 분석으로 날짜 기준의 정확성 유지

Clone this wiki locally