From b4a58af67b194b5588a766b78c6f6f641a9f17a1 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 29 Sep 2025 11:34:45 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=8B=A4=EC=A0=9C=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20=EB=82=B4=EC=9A=A9=EB=A7=8C=20=EB=B0=98=EC=98=81=20-=20LangG?= =?UTF-8?q?raph=20=EB=AF=B8=EC=A0=81=EC=9A=A9,=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EB=A7=8C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ell80_naverworks_briefing_weekend_email.md | 54 ++++++++++++------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md b/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md index 82dc564..95931e5 100644 --- a/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md +++ b/troubleshooting/250929_happybell80_naverworks_briefing_weekend_email.md @@ -4,7 +4,7 @@ author: happybell80 tags: [naverworks, briefing, timezone] --- -# NaverWorks 브리핑 주말 이메일 누락 문제 +# NaverWorks 브리핑 주말 이메일 누락 문제 해결 ## 문제 상황 월요일 오전 9시 NaverWorks 일일 브리핑에서 주말(토,일) 이메일이 누락됨 @@ -12,29 +12,38 @@ tags: [naverworks, briefing, timezone] - 필요: 월요일은 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:109-110,142`: `receivedTime` 필드 사용 (실제 응답은 `date`) - `rb8001/app/skills/naverworks_briefing.py:130,161`: `from` 딕셔너리로만 처리 - `rb8001/app/skills/naverworks_briefing.py:209`: Slack 날짜 표시도 KST 없음 -## 수정 필요 사항 +## 적용된 해결책 **FastAPI 구조 원칙**: 비즈니스 로직(skills/)만 수정, 스케줄링(scheduler/jobs/)과 설정(settings.py)은 유지 -### 1. 시간대 및 조회 기간 (app/skills/naverworks_briefing.py) -- 78번 라인: ZoneInfo("Asia/Seoul") 적용 -- 79번 라인: 월요일(weekday()==0) 72시간, 화~금 24시간 -- 85-86번 라인: startSearchDate, endSearchDate는 ISO 형식 유지 +### 1. 시간대 및 조회 기간 +- `from zoneinfo import ZoneInfo` 추가 +- 78번 라인: `now = datetime.now(ZoneInfo("Asia/Seoul"))` 적용 완료 +- 79-81번 라인: 월요일 72시간, 평일 24시간 로직 구현 완료 + ``` + hours = 72 if now.weekday() == 0 else 24 + start = now - timedelta(hours=hours) + ``` -### 2. 필드명 및 타입 처리 -- skill-email 응답: `emails[].date` 필드 사용 (`receivedTime`은 응답에 없음, 내부 필터링용) -- `from` 필드 형태: - - NaverWorks: 딕셔너리 `{'name': 'Figma', 'email': 'support@figma.com'}` - - Gmail: 문자열 `'sender@gmail.com'` - - 타입 체크 필수 (isinstance 사용) +### 2. 필드명 수정 +- 109-110번 라인: `receivedTime` → `date` 변경 완료 +- 142번 라인: 정렬 키 `receivedTime` → `date` 변경 완료 +- 163번 라인: 요약 시간 표시 `receivedTime` → `date` 변경 완료 -### 3. 현재 환경 정보 +### 3. from 필드 타입 안전 처리 +- 130-136번 라인: isinstance로 딕셔너리/문자열 구분 처리 완료 +- 160-166번 라인: 요약 발신자 정보도 타입 체크 추가 완료 + +### 4. Slack 날짜 KST 표시 +- 209번 라인: `datetime.now(ZoneInfo('Asia/Seoul'))` 적용 완료 + +## 환경 정보 #### 51123 서버 (인증/DB) - NaverWorks 토큰 정상 작동 - OAuth 토큰 자동 갱신 기능 있음 @@ -47,8 +56,13 @@ tags: [naverworks, briefing, timezone] - API 인증: skill-email은 X-API-Key 불필요, skill-slack은 X-API-Key 필수 -## 교훈 -- 타임존 명시: naive datetime 대신 KST 명시적 사용 -- 요일별 조회 기간: 월요일은 주말 포함 72시간 필요 -- API 응답 필드: 실제 응답 필드명 확인 필수 -- 타입 안전성: 문자열/객체 혼재 가능성 고려 \ No newline at end of file +## 배포 정보 +- **커밋 해시**: 5156a9f +- **배포 시간**: 2025-09-29 +- **배포 방법**: git push → Gitea Actions → 51124 서버 자동 배포 +- **환경변수**: SERVICE_API_KEY 확인 완료 + +## 결과 +- ✅ 월요일 주말 이메일 누락 문제 해결 +- ✅ 모든 이메일 시간 정보 정상 표시 +- ✅ 발신자 정보 타입 안전 처리 \ No newline at end of file