From 4badc8f8d547ba8f97e7892fef047ef58d7b3baf Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 29 Sep 2025 10:27:26 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20NaverWorks=20=EB=B8=8C=EB=A6=AC?= =?UTF-8?q?=ED=95=91=20=EB=AC=B8=EC=84=9C=20=EC=88=98=EC=A0=95=20-=20?= =?UTF-8?q?=EC=9D=98=EC=82=AC=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0,=20?= =?UTF-8?q?=EC=82=AC=EC=8B=A4=EB=A7=8C=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ell80_naverworks_briefing_weekend_email.md | 49 +++++++++---------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md b/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md index aab0445..eb65d60 100644 --- a/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md +++ b/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md @@ -12,36 +12,31 @@ tags: [naverworks, briefing, timezone, langgraph] - 필요: 월요일은 72시간(금 9시~월 9시), 화~금은 24시간 조회 ## 원인 분석 -`rb8001/app/skills/naverworks_briefing.py:79`에서 고정 24시간만 사용: -```python -yesterday = now - timedelta(hours=24) # 항상 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. 즉시 수정 (KST 타임존 + 월요일 판단) -```python -from zoneinfo import ZoneInfo -KST = ZoneInfo("Asia/Seoul") +### 1. 시간대 및 조회 기간 +- 78번 라인: ZoneInfo("Asia/Seoul") 적용 +- 79번 라인: 월요일(weekday()==0) 72시간, 화~금 24시간 +- 85-86번 라인: startSearchDate, endSearchDate는 ISO 형식 유지 -# 78-79번 라인 수정 -now = datetime.now(KST) -hours = 72 if now.weekday() == 0 else 24 # 월요일(0)은 72시간 -start = now - timedelta(hours=hours) -``` +### 2. 필드명 및 타입 처리 +- skill-email 응답: `date` 필드 사용 (`receivedTime` 아님) +- `from` 필드: 문자열 또는 객체 혼재 가능 (isinstance 체크 필요) -### 2. 추가 개선사항 -- `receivedTime` → `date` 필드명 수정 (skill-email 실제 응답 필드) -- `from` 필드 문자열/객체 혼재 처리 (타입 체크 필수) -- Slack 메시지 날짜도 KST 명시 - -### 3. LangGraph 적용 검토 -**목적**: 실패 복구와 확장성 개선 -- StateGraph로 각 단계를 노드화 (UUID조회→메일조회→필터링→요약→Slack전송) -- 체크포인트로 부분 실패 시 해당 단계만 재실행 -- 향후 병렬 처리, Human-in-the-loop, 다계정 동시 처리 가능 +### 3. 현재 스케줄러 정보 +- 실행: 매일 오전 9:10 (크론) +- 위치: rb8001 컨테이너 내부 +- DB 연결: PostgreSQL (DATABASE_URL 환경변수) ## 교훈 -- **타임존 명시 필수**: `datetime.now()` 대신 `datetime.now(KST)` 사용 -- **요일별 로직 차별화**: 업무 특성상 월요일은 주말 포함 조회 필요 -- **복잡한 워크플로우는 오케스트레이션 도구 고려**: 단순 함수 체인보다 LangGraph가 실패 복구에 유리 \ No newline at end of file +- 타임존 명시: naive datetime 대신 KST 명시적 사용 +- 요일별 조회 기간: 월요일은 주말 포함 72시간 필요 +- API 응답 필드: 실제 응답 필드명 확인 필수 +- 타입 안전성: 문자열/객체 혼재 가능성 고려 \ No newline at end of file