docs: Daily Summary 중복 실행 문제 해결 문서화
- Gateway 크론잡과 APScheduler 중복 제거
- 환경변수 DAILY_SUMMARY_SCHEDULE 설정
- 9시 단일 실행으로 통일
- 보안 취약점 개선사항 포함
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
d82404229b
commit
5963fc0d62
@ -0,0 +1,88 @@
|
||||
# Daily Summary 중복 실행 문제 해결
|
||||
|
||||
**작성일**: 2025-09-13
|
||||
**작성자**: happybell80 & Claude
|
||||
**영향 서비스**: robeing-gateway, rb8001
|
||||
**해결 상태**: 완료
|
||||
|
||||
## 1. 문제 상황
|
||||
|
||||
### 증상
|
||||
- Daily Summary가 매일 아침 **두 번 실행**
|
||||
- 9시 0분: Gateway 크론잡 실행
|
||||
- 9시 1분: APScheduler 실행
|
||||
- 사용자들이 동일한 브리핑을 2번 수신
|
||||
|
||||
### 원인
|
||||
1. **Gateway 크론잡**: crontab에서 rb8001 API 호출
|
||||
2. **APScheduler**: rb8001 내부에서 직접 실행
|
||||
3. 두 시스템이 독립적으로 동작하여 중복 발생
|
||||
|
||||
## 2. 해결 방법
|
||||
|
||||
### 코드 수정
|
||||
|
||||
#### robeing-gateway/app/crontab.py
|
||||
```python
|
||||
# 삭제된 내용:
|
||||
# - 22줄: await briefing(logger)
|
||||
# - 23줄: logger.info("cronjob enrollment completed")
|
||||
# - 25-100줄: async def briefing() 함수 전체
|
||||
```
|
||||
|
||||
#### rb8001/main.py
|
||||
```python
|
||||
# 삭제된 내용:
|
||||
# - 549-583줄: @app.post("/api/cron/daily-summary") 엔드포인트 전체
|
||||
```
|
||||
|
||||
### 환경변수 설정 (.env)
|
||||
```bash
|
||||
# Daily Summary 스케줄 설정
|
||||
DAILY_SUMMARY_ENABLED=true
|
||||
DAILY_SUMMARY_SCHEDULE=0 9 * * 1-5 # 평일 9시 0분 실행
|
||||
```
|
||||
|
||||
## 3. 변경 후 구조
|
||||
|
||||
### Before (중복 실행)
|
||||
```
|
||||
Gateway Crontab (9:00) → rb8001 API → dm_skill.send_daily_summary_dm()
|
||||
APScheduler (9:01) → dm_skill.send_daily_summary_dm()
|
||||
```
|
||||
|
||||
### After (단일 실행)
|
||||
```
|
||||
APScheduler (9:00) → dm_skill.send_daily_summary_dm()
|
||||
```
|
||||
|
||||
## 4. 확인 방법
|
||||
|
||||
```bash
|
||||
# 1. Gateway 크론탭 확인 (briefing 항목이 없어야 함)
|
||||
docker exec robeing-gateway crontab -l
|
||||
|
||||
# 2. rb8001 로그 확인
|
||||
docker logs rb8001 | grep "Daily Summary"
|
||||
|
||||
# 3. 수동 테스트 (필요시)
|
||||
curl -X POST http://localhost:8001/api/dm/send-daily-summary
|
||||
```
|
||||
|
||||
## 5. 추가 개선사항
|
||||
|
||||
### 해결된 보안 취약점
|
||||
- Cron 토큰 하드코딩 제거 (`cron-secret-2024`)
|
||||
- 인증 실패시 요청 처리 계속되던 문제 해결
|
||||
|
||||
### APScheduler 장점
|
||||
- 환경변수로 스케줄 관리
|
||||
- 내부 실행으로 네트워크 오버헤드 없음
|
||||
- 더 정확한 실행 시간 관리
|
||||
|
||||
## 6. 교훈
|
||||
|
||||
1. **단일 책임 원칙**: 스케줄링은 한 곳에서만 관리
|
||||
2. **환경변수 활용**: 하드코딩 대신 설정 가능하게
|
||||
3. **중복 제거**: Gateway와 내부 스케줄러 역할 명확히 구분
|
||||
4. **문서화**: 시스템 변경사항 즉시 기록
|
||||
Loading…
x
Reference in New Issue
Block a user