# ThreadAuto Phase 4: 스케줄러 + 모니터링 + Slack 알림

## 개요
Phase 3까지 완성된 콘텐츠 파이프라인을 자동 실행하는 스케줄러와 모니터링/알림 시스템 구축.

## 프로젝트 경로
- **프로젝트**: `/home/jay/projects/ThreadAuto/`
- **Phase 3 보고서**: `/home/jay/workspace/memory/reports/task-225.1.md`

## Phase 4 목표
하루 10건 자동 발행 스케줄러 + 실패 알림 + 실행 로그 모니터링.

## 구현 범위

### 1. 스케줄러 (`scheduler/`)
- `scheduler/cron_runner.py` — APScheduler 기반 cron 스케줄러
  - 하루 10건 자동 실행 (08:00/09:30/11:00/12:30/14:00/15:30/17:00/18:30/20:00/21:30)
  - pipeline/scheduler_data.py의 스케줄 데이터 활용
  - 각 시간에 orchestrator.run_single() 호출
  - 발행 실패 시 1회 재시도 (5분 후)
- `scheduler/token_refresher.py` — Threads 토큰 자동 갱신
  - 만료 7일 전 자동 갱신 (매일 1회 체크)
  - auth/token_store.py 연동

### 2. Threads 발행 통합
- `publisher/threads_publisher.py` — 파이프라인 결과물을 Threads에 실제 발행
  - 이미지 업로드 (공개 URL 필요 → GCS 또는 로컬 HTTP 서빙)
  - 미디어 컨테이너 생성 → 30초 대기 → 발행
  - api/client.py 연동
  - 발행 성공 시 ta_history에 기록

### 3. 이미지 서빙 (`server/`)
- `server/image_server.py` — FastAPI 이미지 서빙 엔드포인트
  - 생성된 카드뉴스 이미지를 공개 URL로 제공
  - Threads API가 이미지를 가져갈 수 있도록 외부 접근 가능
  - `/images/{filename}` → 정적 파일 서빙

### 4. 모니터링 + 알림 (`monitor/`)
- `monitor/health_check.py` — 시스템 상태 체크
  - Threads API 연결 상태
  - 토큰 만료 잔여일
  - 오늘 발행 성공/실패 카운트
  - RSS 피드 마지막 수집 시각
- `monitor/notifier.py` — Telegram 알림 (cokacdir 활용)
  - 발행 실패 시 즉시 알림
  - 일일 요약 리포트 (발행 N건, 실패 N건, 토큰 잔여일)
  - 토큰 만료 7일 전 경고

### 5. CLI 확장
- `python cli.py scheduler start` — 스케줄러 시작 (foreground)
- `python cli.py scheduler status` — 다음 예정 발행 시각 표시
- `python cli.py publish --post-id <id>` — Firestore의 특정 게시물 수동 발행
- `python cli.py health` — 시스템 상태 체크

### 6. 메인 엔트리포인트
- `main.py` 확장: FastAPI에 이미지 서빙 + 스케줄러 통합
  - 서버 시작 시 스케줄러 자동 시작
  - `/health` — 헬스체크
  - `/images/{filename}` — 이미지 서빙
  - `/auth/callback` — OAuth 콜백 (기존)

### 7. 테스트
- 스케줄러 테스트 (mock APScheduler)
- 발행 테스트 (mock Threads API)
- 토큰 갱신 테스트
- 모니터링 테스트
- 이미지 서빙 테스트

## 디렉터리 구조 (Phase 3에 추가)
```
/home/jay/projects/ThreadAuto/
├── scheduler/
│   ├── __init__.py
│   ├── cron_runner.py
│   └── token_refresher.py
├── publisher/
│   ├── __init__.py
│   └── threads_publisher.py
├── server/
│   ├── __init__.py
│   └── image_server.py
├── monitor/
│   ├── __init__.py
│   ├── health_check.py
│   └── notifier.py
└── (기존 파일 유지)
```

## 주의사항
- 기존 Phase 1~3 코드 수정 최소화
- requirements.txt에 APScheduler 추가
- 알림은 Telegram (cokacdir --sendfile/--cron) 활용, Slack 불필요
- LLM 불필요 (스케줄러/모니터링만)

## 완료 조건
1. 스케줄러가 설정된 시간에 파이프라인 자동 실행
2. Threads 발행 로직 구현 (api/client.py 연동)
3. 이미지 서빙 엔드포인트 동작
4. 모니터링 + Telegram 알림 동작
5. CLI 명령 4개 동작 (scheduler start/status, publish, health)
6. 테스트 전체 PASS (기존 209개 + 신규)
