3.1 KiB
3.1 KiB
date, author, tags
| date | author | tags | ||||
|---|---|---|---|---|---|---|
| 2025-09-29 | happybell80 |
|
NaverWorks 브리핑 주말 이메일 누락 문제
문제 상황
월요일 오전 9시 NaverWorks 일일 브리핑에서 주말(토,일) 이메일이 누락됨
- 현재: 24시간만 조회 → 월요일 9시 기준 일요일 9시 이후 메일만 포함
- 필요: 월요일은 72시간(금 9시
월 9시), 화금은 24시간 조회
원인 분석
현재 코드 문제점
rb8001/app/skills/naverworks_briefing.py:78:now = datetime.now()KST 없음rb8001/app/skills/naverworks_briefing.py:79:yesterday = now - timedelta(hours=24)고정값rb8001/app/skills/naverworks_briefing.py:109-110,142:receivedTime필드 사용rb8001/app/skills/naverworks_briefing.py:130,161:from딕셔너리로만 처리rb8001/app/skills/naverworks_briefing.py:209: Slack 날짜 표시도 KST 없음
수정 필요 사항
1. 시간대 및 조회 기간
- 78번 라인: ZoneInfo("Asia/Seoul") 적용
- 79번 라인: 월요일(weekday()==0) 72시간, 화~금 24시간
- 85-86번 라인: startSearchDate, endSearchDate는 ISO 형식 유지
2. 필드명 및 타입 처리
- skill-email 응답:
date필드 사용 (receivedTime아님) from필드: 문자열 또는 객체 혼재 가능 (isinstance 체크 필요)
3. 현재 환경 정보
51123 서버 (인증/DB)
- NaverWorks 토큰 정상 작동
- OAuth 토큰 자동 갱신 기능 있음
- PostgreSQL naverworks_token 테이블 정상
51124 서버 (실행)
- 실행: rb8001 컨테이너에서 매일 오전 9:10 (외부 크론)
- 내부 APScheduler: rb8001/app/main.py:49에서 이미 실행 중
- DB 연결: PostgreSQL (DATABASE_URL 환경변수)
- 중복 실행 방지: NAVERWORKS_BRIEFING_ENABLED=false 설정 가능
LangGraph 적용 방안
구현 계획
-
StateGraph 구조
- 노드: get_uuid → fetch_emails → filter_important → generate_summary → format_message → send_slack
- 상태 키: user_uuid, emails, important_emails, summary, slack_message
- 체크포인터: SqliteSaver('/mnt/hdd/logs/langgraph.db')
-
필요 패키지 및 호환성
- rb8001/requirements.txt에 추가:
langgraph,langgraph-checkpoint-sqlite - 주의: SQLAlchemy 2.0.35 사용 중, SQLAlchemyJobStore 호환성 검증 필요
- Python 3.11 내장 zoneinfo 사용 가능
- rb8001/requirements.txt에 추가:
-
주요 개선점
- skill-email API 타임아웃 시 fetch_emails 노드만 재실행
- Slack 전송 실패 시 send_slack 노드만 재시도
- thread_id='naverworks_daily_YYYYMMDD'로 일별 추적
-
파일 구조 변경
- 기존 process_briefing 메서드를 StateGraph.compile()로 교체
- 각 단계를 개별 노드 함수로 분리
- graph.invoke({"email": "info@company-x.partners"}, config={"configurable": {"thread_id": thread_id}})
교훈
- 타임존 명시: naive datetime 대신 KST 명시적 사용
- 요일별 조회 기간: 월요일은 주말 포함 72시간 필요
- API 응답 필드: 실제 응답 필드명 확인 필수
- 타입 안전성: 문자열/객체 혼재 가능성 고려