refactor: 트러블슈팅 파일명 형식 통일

- 8자리 날짜(20251013) → 6자리 날짜(251013)
- 16개 파일 rename 완료
- 형식: yymmdd_주제.md로 통일

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
happybell80 2025-10-13 21:09:56 +09:00
parent 131dab5e28
commit b18b7f1143
16 changed files with 90 additions and 0 deletions

View File

@ -0,0 +1,90 @@
# 네이버웍스 메일 브리핑 2단계 구조 개선
**날짜**: 2025-10-13
**작성자**: happybell80
**관련 파일**: `rb8001/app/skills/naverworks_briefing.py`
---
## 문제 상황
### 현재 구조 (OR 로직)
- `naverworks_briefing.py:58-63` - 중요 메일 필터링 후 없으면 전체 메일로 폴백
- 중요 메일이 1건이라도 있으면 **전체 메일 요약은 표시 안됨**
- 중요 메일이 없을 때만 전체 메일 요약 표시
### 요구사항
사용자가 원하는 것은 **중요 메일 + 전체 메일 동시 표시 (AND 로직)**:
1. 중요 메일 섹션: 긴급/계약/결제/공지 필터링 결과
2. 전체 메일 섹션: 72시간(월요일) 또는 24시간(평일) 전체 메일 요약
---
## 해결 방안
### 1. process_briefing() 메인 로직 변경 (58-71줄)
**수정 내용:**
- 58-63줄: 폴백 로직(`if not important_emails`) 제거
- 66줄: `_generate_summary()` 호출을 2번으로 분리
- `important_summary = await self._generate_summary(important_emails, is_important=True)`
- `all_summary = await self._generate_summary(emails, is_important=False)`
- 71줄: `_format_slack_message()` 호출 파라미터 변경
- 기존: `(summary, important_emails)`
- 변경: `(important_summary, len(important_emails), all_summary, len(emails))`
### 2. _generate_summary() 시그니처 및 프롬프트 변경 (135줄, 159-174줄)
**시그니처 변경:**
- 135줄: `async def _generate_summary(self, emails: List[Dict], is_important: bool = False) -> str:`
**프롬프트 변경 (159-174줄):**
- `is_important=True`: "긴급/계약/결제 등 즉시 확인 필요한 중요 메일 요약" 강조
- `is_important=False`: "전체 수신 메일 간단 요약, 발신자/주제별 정리"
- 기존 165-167줄 프롬프트를 `is_important` 분기로 변경
### 3. _format_slack_message() 시그니처 및 blocks 변경 (190줄, 194-231줄)
**시그니처 변경 (190줄):**
- `def _format_slack_message(self, important_summary: str, important_count: int, all_summary: str, all_count: int) -> Dict[str, Any]:`
**blocks 구조 변경 (194-231줄):**
- 기존 215-220줄 section을 2개로 분리:
1. 중요 메일 섹션: `important_summary` (N건)
2. 전체 메일 섹션: `all_summary` (M건)
- 두 섹션 사이 divider 추가
- 222-227줄 context: "중요 메일 N건, 전체 M건" 표시
---
## 수정 위치 요약
| 위치 | 변경 내용 |
|------|----------|
| `naverworks_briefing.py:58-68` | 폴백 제거, 요약 2번 생성 |
| `naverworks_briefing.py:229` | 함수 시그니처 변경 (파라미터 4개) |
| `naverworks_briefing.py:233-270` | blocks 구조 2단계로 분리 |
---
## 교훈
### 설계 단계에서 명확한 요구사항 정의 필요
- "중요 메일만" vs "중요 메일 + 전체 메일" 구분이 초기 설계에서 모호했음
- OR 로직을 AND 로직으로 전환하려면 요약 생성 비용 2배 발생 (Gemini API 호출 2회)
- 비용/성능 고려 없이 UX만 고려하면 나중에 문제 발생 가능
### 폴백 로직의 함정
- "없으면 전체 사용"은 간단해 보이지만, 실제로는 "둘 중 하나만 보여줌"
- 사용자는 "두 가지를 다른 관점으로 동시에 보고 싶음"을 명시적으로 요청해야 했음
### 프롬프트 엔지니어링
- 중요 메일 요약 프롬프트: "즉시 확인 필요한 사항 강조"
- 전체 메일 요약 프롬프트: "발신자/주제별 간단 요약"
- 같은 `_generate_summary()` 함수를 사용하되, 프롬프트 템플릿 파라미터 추가 필요
### 파일 크기 관리
- 현재 `naverworks_briefing.py`가 301줄로 FastAPI 300줄 한도 초과
- 제안 반영 시 추가 10-20줄 증가로 320줄 예상
- 포맷팅 로직(`_format_slack_message`)을 별도 모듈 분리 검토 필요
- 또는 요약 생성 로직을 서비스 계층 모듈로 분리 고려