콘텐츠로 이동

DB 스키마 명세

  • MySQL 인스턴스: 192.168.56.104:13306
  • Database: trend_collector
  • 문자셋: utf8mb4 / utf8mb4_unicode_ci

ERD

trend_sources (1) ─── (N) trend_snapshots (1) ─── (N) trend_keywords

테이블 상세

trend_sources

수집 소스 마스터 테이블. 소스를 추가할 때 자동으로 레코드가 생성된다.

컬럼 타입 제약조건 설명
id BIGINT PK, AUTO_INCREMENT
name VARCHAR(50) UNIQUE, NOT NULL 소스 식별자 (DAUM, NAVER, ...)
base_url VARCHAR(255) NOT NULL 스크래핑 대상 URL
collect_interval_minutes INT NOT NULL, DEFAULT 60 수집 주기 (분)
is_active BOOLEAN NOT NULL, DEFAULT 1 활성 여부 (0=수집 중단)
created_at DATETIME(tz) NOT NULL, DEFAULT NOW()
updated_at DATETIME(tz) NOT NULL, DEFAULT NOW()

trend_snapshots

수집 시점별 스냅샷. 매 수집마다 소스당 1개씩 생성된다.

컬럼 타입 제약조건 설명
id BIGINT PK, AUTO_INCREMENT
source_id BIGINT FK → trend_sources.id, NOT NULL
collected_at DATETIME(tz) NOT NULL 수집 시각 (KST)
raw_path VARCHAR(500) NULLABLE RustFS Bronze 저장 경로
status VARCHAR(20) NOT NULL SUCCESS / EMPTY / FAILED
error_message TEXT NULLABLE 실패 시 에러 메시지
created_at DATETIME(tz) NOT NULL, DEFAULT NOW()
updated_at DATETIME(tz) NOT NULL, DEFAULT NOW()

인덱스: - idx_snapshot_source_time — (source_id, collected_at): 소스별 시간순 조회

status 값: - SUCCESS: 정상 수집 (1개 이상 키워드) - EMPTY: 수집은 성공했으나 키워드 0건 (새벽 시간 등) - FAILED: 수집 실패 (네트워크 에러, 사이트 장애 등)

trend_keywords

스냅샷별 트렌드 키워드 목록. 스냅샷당 최대 10개.

컬럼 타입 제약조건 설명
id BIGINT PK, AUTO_INCREMENT
snapshot_id BIGINT FK → trend_snapshots.id, NOT NULL
rank_position INT NOT NULL 순위 (1~10)
keyword VARCHAR(200) NOT NULL 트렌드 키워드
status VARCHAR(20) NULLABLE 신규 / 상승 / 하락
created_at DATETIME(tz) NOT NULL, DEFAULT NOW()
updated_at DATETIME(tz) NOT NULL, DEFAULT NOW()

인덱스: - idx_keyword_text — (keyword): 키워드 검색 - idx_keyword_snapshot — (snapshot_id, rank_position): 스냅샷별 순위 조회


RustFS Bronze 스키마

경로 규칙

data/bronze/trend/source={소스명}/{yyyyMMdd}/{HHmmss}/raw.html
data/bronze/trend/source={소스명}/{yyyyMMdd}/{HHmmss}/parsed.json

parsed.json 스키마

{
  "source": "DAUM",
  "collected_at": "2026-04-07T13:44:55+00:00",
  "keywords": [
    {
      "rank": 1,
      "keyword": "김부자 가수",
      "status": "상승"
    }
  ]
}
필드 타입 설명
source string 소스 식별자
collected_at string (ISO 8601) 수집 시각 (UTC)
keywords array 키워드 목록
keywords[].rank int 순위
keywords[].keyword string 키워드
keywords[].status string | null 변동 상태

스키마 변경 이력

버전 날짜 변경 내용
v1 2026-04-06 초기 스키마 생성 (trend_sources, trend_snapshots, trend_keywords)
v2 2026-04-08 trend_sources에 collect_interval_minutes, is_active 컬럼 추가 (DB 기반 스케줄링)