154 lines
3.4 KiB
Markdown
154 lines
3.4 KiB
Markdown
# News Pipeline System
|
|
|
|
비동기 큐 기반 뉴스 생성 파이프라인 시스템
|
|
|
|
## 아키텍처
|
|
|
|
```
|
|
Scheduler → RSS Collector → Google Search → AI Summarizer → Article Assembly → MongoDB
|
|
↓ ↓ ↓ ↓ ↓
|
|
Redis Queue Redis Queue Redis Queue Redis Queue Redis Queue
|
|
```
|
|
|
|
## 서비스 구성
|
|
|
|
### 1. Scheduler
|
|
- 30분마다 등록된 키워드 처리
|
|
- 오전 7시, 낮 12시, 저녁 6시 우선 처리
|
|
- MongoDB에서 키워드 로드 후 큐에 작업 생성
|
|
|
|
### 2. RSS Collector
|
|
- RSS 피드 수집 (Google News RSS)
|
|
- 7일간 중복 방지 (Redis Set)
|
|
- 키워드 관련성 필터링
|
|
|
|
### 3. Google Search
|
|
- RSS 아이템별 추가 검색 결과 수집
|
|
- 아이템당 최대 3개 결과
|
|
- 작업당 최대 5개 아이템 처리
|
|
|
|
### 4. AI Summarizer
|
|
- Claude Haiku로 빠른 요약 생성
|
|
- 200자 이내 한국어 요약
|
|
- 병렬 처리 지원 (3 workers)
|
|
|
|
### 5. Article Assembly
|
|
- Claude Sonnet으로 종합 기사 작성
|
|
- 1500자 이내 전문 기사
|
|
- MongoDB 저장 및 통계 업데이트
|
|
|
|
### 6. Monitor
|
|
- 실시간 파이프라인 모니터링
|
|
- 큐 상태, 워커 상태 확인
|
|
- REST API 제공 (포트 8100)
|
|
|
|
## 시작하기
|
|
|
|
### 1. 환경 변수 설정
|
|
```bash
|
|
# .env 파일 확인
|
|
CLAUDE_API_KEY=your_claude_api_key
|
|
GOOGLE_API_KEY=your_google_api_key
|
|
GOOGLE_SEARCH_ENGINE_ID=your_search_engine_id
|
|
```
|
|
|
|
### 2. 서비스 시작
|
|
```bash
|
|
cd pipeline
|
|
docker-compose up -d
|
|
```
|
|
|
|
### 3. 모니터링
|
|
```bash
|
|
# 로그 확인
|
|
docker-compose logs -f
|
|
|
|
# 특정 서비스 로그
|
|
docker-compose logs -f scheduler
|
|
|
|
# 모니터 API
|
|
curl http://localhost:8100/api/stats
|
|
```
|
|
|
|
## API 엔드포인트
|
|
|
|
### Monitor API (포트 8100)
|
|
|
|
- `GET /api/stats` - 전체 통계
|
|
- `GET /api/queues/{queue_name}` - 큐 상세 정보
|
|
- `GET /api/keywords` - 키워드 목록
|
|
- `POST /api/keywords` - 키워드 등록
|
|
- `DELETE /api/keywords/{id}` - 키워드 삭제
|
|
- `GET /api/articles` - 기사 목록
|
|
- `GET /api/articles/{id}` - 기사 상세
|
|
- `GET /api/workers` - 워커 상태
|
|
- `POST /api/trigger/{keyword}` - 수동 처리 트리거
|
|
- `GET /api/health` - 헬스 체크
|
|
|
|
## 키워드 등록 예시
|
|
|
|
```bash
|
|
# 새 키워드 등록
|
|
curl -X POST http://localhost:8100/api/keywords \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"keyword": "인공지능", "schedule": "30min"}'
|
|
|
|
# 수동 처리 트리거
|
|
curl -X POST http://localhost:8100/api/trigger/인공지능
|
|
```
|
|
|
|
## 데이터베이스
|
|
|
|
### MongoDB Collections
|
|
- `keywords` - 등록된 키워드
|
|
- `articles` - 생성된 기사
|
|
- `keyword_stats` - 키워드별 통계
|
|
|
|
### Redis Keys
|
|
- `queue:*` - 작업 큐
|
|
- `processing:*` - 처리 중 작업
|
|
- `failed:*` - 실패한 작업
|
|
- `dedup:rss:*` - RSS 중복 방지
|
|
- `workers:*:active` - 활성 워커
|
|
|
|
## 트러블슈팅
|
|
|
|
### 큐 초기화
|
|
```bash
|
|
docker-compose exec redis redis-cli FLUSHDB
|
|
```
|
|
|
|
### 워커 재시작
|
|
```bash
|
|
docker-compose restart rss-collector
|
|
```
|
|
|
|
### 데이터베이스 접속
|
|
```bash
|
|
# MongoDB
|
|
docker-compose exec mongodb mongosh -u admin -p password123
|
|
|
|
# Redis
|
|
docker-compose exec redis redis-cli
|
|
```
|
|
|
|
## 스케일링
|
|
|
|
워커 수 조정:
|
|
```yaml
|
|
# docker-compose.yml
|
|
ai-summarizer:
|
|
deploy:
|
|
replicas: 5 # 워커 수 증가
|
|
```
|
|
|
|
## 모니터링 대시보드
|
|
|
|
브라우저에서 http://localhost:8100 접속하여 파이프라인 상태 확인
|
|
|
|
## 로그 레벨 설정
|
|
|
|
`.env` 파일에서 조정:
|
|
```
|
|
LOG_LEVEL=DEBUG # INFO, WARNING, ERROR
|
|
``` |