Files
site11/docs/PIPELINE_SCHEDULER_GUIDE.md
2025-09-28 20:41:57 +09:00

238 lines
6.4 KiB
Markdown

# Pipeline Scheduler Guide
## 개요
Pipeline Scheduler는 등록된 키워드를 주기적으로 실행하여 자동으로 뉴스를 수집하고 AI 기사를 생성하는 시스템입니다.
## 아키텍처
### 1. 구성 요소
#### 1.1 Multi-Thread Scheduler (pipeline-scheduler)
- **역할**: 키워드별 스레드 관리 및 주기적 실행
- **특징**:
- 단일 Docker 컨테이너에서 여러 스레드 동시 실행
- 각 키워드당 하나의 독립 스레드
- 30초마다 새 키워드 체크 및 스레드 관리
- **위치**: `services/pipeline/scheduler/multi_thread_scheduler.py`
#### 1.2 Keyword Manager API (keyword-manager)
- **역할**: 키워드 CRUD 및 스레드 모니터링
- **포트**: 8100
- **주요 엔드포인트**:
- `GET /threads/status` - 모든 스레드 상태 조회
- `GET /keywords` - 모든 키워드 목록
- `POST /keywords` - 새 키워드 추가
- `PUT /keywords/{keyword}` - 키워드 수정
- `DELETE /keywords/{keyword}` - 키워드 삭제
- `POST /keywords/{keyword}/activate` - 키워드 활성화
- `POST /keywords/{keyword}/deactivate` - 키워드 비활성화
- `POST /keywords/{keyword}/trigger` - 즉시 실행
- **위치**: `services/pipeline/scheduler/keyword_manager.py`
### 2. 데이터 모델
```python
class Keyword:
keyword_id: str # UUID
keyword: str # 검색 키워드
interval_minutes: int # 실행 주기 (분)
is_active: bool # 활성 상태
priority: int # 우선순위 (높을수록 우선)
rss_feeds: List[str] # RSS 피드 URL 목록
max_articles_per_run: int # 실행당 최대 기사 수
last_run: datetime # 마지막 실행 시간
next_run: datetime # 다음 실행 예정 시간
```
## 사용 방법
### 1. 서비스 시작
```bash
# 스케줄러와 매니저 시작
docker-compose up -d pipeline-scheduler keyword-manager
# 로그 확인
docker-compose logs -f pipeline-scheduler
```
### 2. 키워드 관리
#### 2.1 키워드 추가
```bash
curl -X POST http://localhost:8100/keywords \
-H "Content-Type: application/json" \
-d '{
"keyword": "딥러닝",
"interval_minutes": 60,
"priority": 1,
"rss_feeds": [],
"max_articles_per_run": 100,
"is_active": true
}'
```
#### 2.2 키워드 수정
```bash
curl -X PUT http://localhost:8100/keywords/딥러닝 \
-H "Content-Type: application/json" \
-d '{
"interval_minutes": 30,
"priority": 2
}'
```
#### 2.3 키워드 활성화/비활성화
```bash
# 활성화
curl -X POST http://localhost:8100/keywords/딥러닝/activate
# 비활성화
curl -X POST http://localhost:8100/keywords/딥러닝/deactivate
```
#### 2.4 즉시 실행
```bash
curl -X POST http://localhost:8100/keywords/딥러닝/trigger
```
#### 2.5 키워드 삭제
```bash
curl -X DELETE http://localhost:8100/keywords/딥러닝
```
### 3. 모니터링
#### 3.1 스레드 상태 확인
```bash
curl http://localhost:8100/threads/status | python3 -m json.tool
```
응답 예시:
```json
{
"total_threads": 4,
"active_threads": 4,
"threads": [
{
"keyword": "블록체인",
"keyword_id": "5c7ac9a9-c56f-4878-94ec-adb13f105c8a",
"is_active": true,
"interval_minutes": 30,
"priority": 2,
"last_run": "2025-09-15T08:05:58.807000",
"next_run": "2025-09-15T08:35:58.807000",
"thread_status": "active",
"minutes_until_next_run": 25.3
}
]
}
```
#### 3.2 키워드 목록 조회
```bash
curl http://localhost:8100/keywords | python3 -m json.tool
```
## 작동 방식
### 1. 실행 흐름
1. **키워드 스레드 시작**
- 스케줄러 시작 시 활성 키워드 로드
- 각 키워드별 독립 스레드 생성
2. **주기적 실행**
- 각 스레드는 설정된 주기마다 실행
- 실행 시 PipelineJob 생성 후 Redis 큐에 추가
- RSS 수집 → Google 검색 → AI 기사 생성 → 번역 파이프라인 자동 진행
3. **동적 스레드 관리**
- 30초마다 새 키워드 확인
- 새 키워드 추가 시 자동으로 스레드 생성
- 비활성화/삭제 시 스레드 자동 중지
### 2. 우선순위 처리
- 높은 우선순위(priority) 키워드가 먼저 처리
- Redis 큐에서 우선순위별 정렬
### 3. 오류 처리
- 각 스레드는 독립적으로 오류 처리
- 오류 발생 시 1분 대기 후 재시도
- 스레드별 error_count, last_error 추적
## 현재 설정된 키워드
| 키워드 | 실행 주기 | 우선순위 | 상태 |
|--------|-----------|----------|------|
| 블록체인 | 30분 | 2 | 활성 |
| AI | 60분 | 1 | 활성 |
| 테크놀로지 | 60분 | 1 | 활성 |
| 경제 | 60분 | 0 | 활성 |
## 주의사항
1. **스레드 관리**
- 키워드 추가/삭제는 30초 이내 자동 반영
- 스레드 상태는 keyword-manager API로 실시간 확인 가능
2. **실행 주기**
- 최소 실행 주기: 제한 없음 (권장: 30분 이상)
- interval_minutes 변경 시 다음 실행 시간 자동 재계산
3. **중복 방지**
- 동일 키워드 중복 등록 불가
- RSS 수집 시 중복 URL 자동 필터링
## 트러블슈팅
### 스레드가 시작되지 않을 때
```bash
# 스케줄러 재시작
docker-compose restart pipeline-scheduler
# 로그 확인
docker-compose logs --tail=50 pipeline-scheduler
```
### 키워드가 실행되지 않을 때
```bash
# 키워드 상태 확인
curl http://localhost:8100/keywords/키워드명 | python3 -m json.tool
# 즉시 실행 트리거
curl -X POST http://localhost:8100/keywords/키워드명/trigger
```
### MongoDB 연결 오류
```bash
# MongoDB 상태 확인
docker-compose ps mongodb
# MongoDB 재시작
docker-compose restart mongodb
```
## 파일 구조
```
services/pipeline/scheduler/
├── multi_thread_scheduler.py # 멀티스레드 스케줄러
├── keyword_manager.py # 키워드 관리 API
├── single_keyword_scheduler.py # (deprecated) 단일 키워드 스케줄러
├── requirements.txt # Python 의존성
└── Dockerfile # Docker 이미지 정의
services/pipeline/shared/
└── models.py # Keyword, PipelineJob 모델 정의
```
## 향후 개선사항
1. **웹 대시보드**: 실시간 모니터링 UI
2. **알림 시스템**: 오류 발생 시 이메일/Slack 알림
3. **통계 기능**: 키워드별 수집 통계 및 분석
4. **스케줄 템플릿**: 자주 사용하는 설정 저장/불러오기
5. **백업/복구**: 키워드 설정 백업 및 복구 기능