> ## Documentation Index
> Fetch the complete documentation index at: https://0x38a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# SSAFIT NEWS

> 실시간 뉴스 수집, 검색, 추천, 일간 리포트까지 이어지는 Data Engineering 프로젝트.

실시간 뉴스 데이터를 수집하고, 텍스트 임베딩 기반으로 유사 뉴스 추천 및 인사이트 분석이 가능한 플랫폼을 구축했습니다.

<Frame>
  <img src="https://mintcdn.com/0x38a/g-1hLDU267VcSxbl/images/ssafit/web.png?fit=max&auto=format&n=g-1hLDU267VcSxbl&q=85&s=d19f6f91cececebee9e09d36582b986b" alt="SSAFIT NEWS web page" width="1243" height="879" data-path="images/ssafit/web.png" />
</Frame>

## Overview

| Field      | Value                                                              |
| ---------- | ------------------------------------------------------------------ |
| Period     | 2025.01 - 2025.05                                                  |
| Domain     | Data Engineering                                                   |
| Repository | [news-data-project](https://github.com/choihjin/news-data-project) |
| Result     | 삼성전자 1학기 프로젝트 우수상                                                  |

## My role

* Kafka/Flink 기반 실시간 수집 및 정제 흐름 설계
* Elasticsearch와 pgvector 기반 검색/추천 저장 구조 구성
* Airflow/Spark 기반 일간 리포트 자동화
* 데이터 파이프라인 설계, 스트리밍 처리, 검색/분석 저장소 구성, 워크플로우 운영 담당

## Architecture

<Frame>
  <img src="https://mintcdn.com/0x38a/g-1hLDU267VcSxbl/images/ssafit/pipeline.png?fit=max&auto=format&n=g-1hLDU267VcSxbl&q=85&s=9a39618fd6fb11bd96aeea8c0343f835" alt="SSAFIT NEWS data pipeline" width="2261" height="1262" data-path="images/ssafit/pipeline.png" />
</Frame>

뉴스 데이터는 RSS producer에서 Kafka로 들어오고, Flink가 실시간 정제와 중복 필터링을 수행합니다. 저장 계층은 PostgreSQL(pgvector), Elasticsearch, HDFS를 함께 사용하고, Airflow와 Spark가 일간 리포트를 생성합니다.

## Core stack

| Area                      | Stack                                    |
| ------------------------- | ---------------------------------------- |
| Collection and processing | Apache Kafka, Apache Flink, Apache Spark |
| Storage                   | PostgreSQL, Elasticsearch, Apache Hadoop |
| Embedding and NLP         | OpenAI, KoNLPy                           |
| Orchestration             | Apache Airflow, Docker                   |
| Monitoring                | Prometheus, Kibana, Grafana              |

## Key work

### Real-time collection

한국경제, AI타임스, 전자신문 등 주요 IT 언론사 RSS 데이터를 수집하고 Kafka 토픽으로 전달했습니다.

### Stream processing

Kafka에서 들어온 뉴스 본문을 Flink로 전처리하고, 중복 뉴스 필터링과 데이터 정합성 검증을 수행했습니다.

### Search and recommendation

OpenAI Embedding API로 뉴스 본문을 벡터화하고 PostgreSQL(pgvector)과 Elasticsearch에 이중 저장했습니다. 이를 통해 실시간 검색과 유사 뉴스 추천을 지원했습니다.

### Daily report

Spark 기반으로 일간 뉴스 키워드, 카테고리별 기사 분포, 트렌드 시각화를 생성하고 PDF 리포트로 아카이빙했습니다.

## Monitoring

<Columns cols={2}>
  <Card title="Kibana" img="https://mintcdn.com/0x38a/g-1hLDU267VcSxbl/images/ssafit/kibana.png?fit=max&auto=format&n=g-1hLDU267VcSxbl&q=85&s=0ec9b34e4bbe83801de4fe4232a7d7ac" width="1270" height="836" data-path="images/ssafit/kibana.png">
    Elasticsearch 색인 상태와 검색 데이터를 확인했습니다.
  </Card>

  <Card title="Grafana" img="https://mintcdn.com/0x38a/g-1hLDU267VcSxbl/images/ssafit/grafana.png?fit=max&auto=format&n=g-1hLDU267VcSxbl&q=85&s=a3ced32ed7d87bf0b5cd7b28b606972d" width="1733" height="945" data-path="images/ssafit/grafana.png">
    파이프라인 상태와 운영 메트릭을 시각화했습니다.
  </Card>
</Columns>

## Presentation

[SSAFIT NEWS 발표 자료](/pdfs/SSAFIT_NEWS.pdf)
