diff --git a/troubleshooting/250826_happybell80_사용자별설정_구현.md b/troubleshooting/250826_happybell80_사용자별설정_구현.md deleted file mode 100644 index 2085dbd..0000000 --- a/troubleshooting/250826_happybell80_사용자별설정_구현.md +++ /dev/null @@ -1,222 +0,0 @@ -# 사용자별 설정 시스템 구현 (뉴스 키워드, Slack ID 통일) - -## 작성일: 2025-08-26 -## 작성자: happybell80 -## 상태: ✅ 완료 -## 영향: 사용자별 맞춤 뉴스 제공, DB 컬럼명 일관성 -## 최종 업데이트: 2025-08-26 21:00 - ---- - -## 1. 문제 상황 - -### 1.1 Slack ID 컬럼명 불일치 -- **문제**: 테이블마다 다른 컬럼명 사용 (slack_id vs slack_user_id) -- **영향**: 코드 복잡도 증가, 유지보수 어려움 -- **발견**: gmail_tokens만 `slack_id` 사용, 나머지는 `slack_user_id` - -### 1.2 뉴스 키워드 하드코딩 -- **문제**: rb8001이 ["AI", "기술", "IT"]만 사용 (dm_skill.py:309) -- **영향**: 모든 사용자에게 동일한 뉴스 제공 -- **요구**: 사용자별 맞춤 키워드 설정 필요 - ---- - -## 2. 현황 분석 - -### 2.1 Slack ID 컬럼 현황 -| 테이블 | 컬럼명 | 타입 | 상태 | -|--------|--------|------|------| -| slack_user_mapping | slack_user_id | VARCHAR(100) | ✅ 정상 | -| gmail_tokens | slack_id | VARCHAR(100) | ❌ 불일치 | -| conversation_logs | slack_user_id | VARCHAR(100) | ✅ 정상 | -| user_preferences | slack_user_id | VARCHAR(100) | ✅ 신규 추가 | - -### 2.2 뉴스 키워드 사용 현황 -- **기존**: 하드코딩된 키워드 ["AI", "기술", "IT"] -- **문제**: 사용자 관심사 반영 불가 -- **해결**: user_preferences 테이블 활용 - ---- - -## 3. 해결 방안 - -### 3.1 DB 스키마 수정 - -#### gmail_tokens 컬럼명 변경 (추후 작업) -```sql --- 안전한 변경을 위한 단계적 접근 -ALTER TABLE gmail_tokens ADD COLUMN slack_user_id VARCHAR(100); -UPDATE gmail_tokens SET slack_user_id = slack_id; --- 코드 수정 후 -ALTER TABLE gmail_tokens DROP COLUMN slack_id; -``` - -#### user_preferences 테이블 생성 -```sql -CREATE TABLE IF NOT EXISTS user_preferences ( - id SERIAL PRIMARY KEY, - user_id UUID REFERENCES users(id), - slack_user_id VARCHAR(100), - news_keywords TEXT[], -- PostgreSQL 배열 타입 - email_filter TEXT[], - briefing_enabled BOOLEAN DEFAULT true, - briefing_time TIME DEFAULT '09:00', - created_at TIMESTAMP DEFAULT NOW(), - updated_at TIMESTAMP DEFAULT NOW() -); - --- 인덱스 추가 -CREATE INDEX idx_user_preferences_user_id ON user_preferences(user_id); -CREATE INDEX idx_user_preferences_slack_user_id ON user_preferences(slack_user_id); -``` - -### 3.2 코드 수정 - -#### ✅ 완료: rb8001/app/skills/dm_skill.py (커밋: 7103599) -```python -# 1. get_news_content() 메서드 수정 -async def get_news_content(self, user_id: str = None, slack_user_id: str = None) -> str: - """사용자별 키워드 사용""" - keywords = await self._get_user_news_keywords(user_id, slack_user_id) - # ... 키워드로 뉴스 검색 - -# 2. 새 메서드 추가 -async def _get_user_news_keywords(self, user_id: str = None, slack_user_id: str = None) -> list: - """user_preferences에서 키워드 조회""" - default_keywords = ["AI", "기술", "IT"] - - try: - # DB에서 사용자 설정 조회 - if result and result.news_keywords: - return result.news_keywords - except Exception: - pass - - return default_keywords - -# 3. send_daily_summary_dm() 수정 -# 사용자별로 다른 뉴스 제공 -news_content = await self.get_news_content(user_id=None, slack_user_id=user['slack_id']) -``` - -#### 추후 수정 필요 파일 (gmail_tokens 관련) -| 파일 경로 | 변경 내용 | 우선순위 | -|----------|----------|----------| -| auth-server/models.py | slack_id → slack_user_id | 높음 | -| robeing-monitor/database.py | slack_id → slack_user_id | 중간 | -| skill-email/db_client.py | slack_id → slack_user_id | 높음 | -| rb8001/app/skills/dm_skill.py | gmail_tokens 조회 시 컬럼명 | 높음 | - ---- - -## 4. 구현 결과 - -### 4.1 뉴스 키워드 사용자별 설정 ✅ -- **커밋 ID**: aed931e (기능 추가), 7103599 (프롬프트 수정) -- **배포**: Gitea Actions 자동 배포 완료 -- **테스트**: - - user_preferences 없는 사용자 → 기본값 사용 - - user_preferences 있는 사용자 → 설정된 키워드 사용 - -### 4.2 동작 흐름 -```mermaid -graph LR - A[사용자 DM 요청] --> B[slack_user_id 확인] - B --> C[user_preferences 조회] - C --> D{키워드 존재?} - D -->|Yes| E[사용자 키워드 사용] - D -->|No| F[기본 키워드 사용] - E --> G[뉴스 검색] - F --> G - G --> H[DM 전송] -``` - ---- - -## 5. 테스트 시나리오 - -### 5.1 사용자 설정 추가 예시 -```sql --- happybell80 사용자 설정 -INSERT INTO user_preferences (slack_user_id, news_keywords) -VALUES ('U091UNVE41M', ARRAY['삼성', '반도체', '경제']); - --- goeun2dc 사용자 설정 -INSERT INTO user_preferences (slack_user_id, news_keywords) -VALUES ('U0925SXQFDK', ARRAY['패션', '뷰티', '트렌드']); -``` - -### 5.2 검증 방법 -```python -# Python 테스트 코드 -keywords = await dm_skill._get_user_news_keywords(None, "U091UNVE41M") -assert keywords == ["삼성", "반도체", "경제"] - -keywords = await dm_skill._get_user_news_keywords(None, "UNKNOWN_USER") -assert keywords == ["AI", "기술", "IT"] # 기본값 -``` - ---- - -## 6. 향후 작업 - -### 6.1 단기 (1주일 내) -1. **gmail_tokens 컬럼명 변경** - - 모든 관련 코드 수정 후 일괄 변경 - - 다운타임 최소화 전략 수립 - -2. **관리자 UI 개발** - - user_preferences CRUD 기능 - - 사용자별 키워드 설정 화면 - -### 6.2 장기 (1개월 내) -1. **키워드 자동 추천** - - 사용자 대화 내용 분석 - - 관심사 자동 추출 및 추천 - -2. **브리핑 시간 개인화** - - briefing_time 필드 활용 - - 사용자별 다른 시간에 DM 전송 - ---- - -## 7. 성과 - -### 7.1 개선 효과 -- ✅ 하드코딩 제거로 유연성 향상 -- ✅ 사용자별 맞춤 서비스 제공 -- ✅ DB 스키마 일관성 개선 준비 -- ✅ 확장 가능한 설정 구조 - -### 7.2 기술적 성과 -- PostgreSQL 배열 타입 활용 -- JSON 파싱 지원으로 유연한 데이터 처리 -- 에러 처리로 안정성 확보 -- 기본값 폴백으로 서비스 연속성 보장 - ---- - -## 8. 참고 문서 -- [250826_id_체계_정리_및_conversation_logs_문제_해결.md](./250826_id_체계_정리_및_conversation_logs_문제_해결.md) -- [250826_rb8001_conversation_storage_failure.md](./250826_rb8001_conversation_storage_failure.md) - ---- - -## 9. 교훈 - -1. **컬럼명 일관성의 중요성** - - 초기 설계 시 네이밍 컨벤션 확립 필수 - - slack_user_id로 통일 필요 - -2. **하드코딩 최소화** - - 설정값은 DB나 환경변수로 관리 - - 기본값은 상수로 정의 - -3. **점진적 마이그레이션** - - 컬럼명 변경은 안전하게 단계적으로 - - 코드 수정 → 새 컬럼 추가 → 데이터 복사 → 이전 컬럼 삭제 - ---- - -*작성 완료: 2025-08-26 21:00* \ No newline at end of file diff --git a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md index 740cd2b..a8d48ce 100644 --- a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md +++ b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md @@ -2,8 +2,9 @@ ## 작성일: 2025-08-26 ## 작성자: 서버 관리자 -## 상태: 진행중 +## 상태: ✅ 대부분 해결 (gmail_tokens 컬럼명 변경만 보류) ## 영향: 대화 저장 실패, ID 타입 불일치로 인한 데이터 무결성 문제 +## 최종 업데이트: 2025-08-26 21:00 --- @@ -160,13 +161,16 @@ DATABASE_URL=postgresql://robeings:robeings@localhost:5433/main_db --- -## 6. 권장 작업 순서 +## 6. 작업 완료 현황 1. ✅ conversation_logs에 slack_user_id 추가 (완료) -2. ⏳ gmail_tokens의 slack_id → slack_user_id로 컬럼명 변경 - - **→ 별도 문서로 분리**: `250826_slack_id_column_standardization.md` 참조 -3. ⏳ 51124 서버 코드가 slack_user_id 사용하도록 수정 -4. ⏳ 저장 후 배치 작업으로 slack_user_id → user_id 매핑 +2. ⏳ gmail_tokens의 slack_id → slack_user_id로 컬럼명 변경 (보류 - 영향 범위 확인 필요) +3. ✅ **뉴스 키워드 하드코딩 제거** (2025-08-26 21:00 완료) + - rb8001/app/skills/dm_skill.py 수정 (커밋: aed931e) + - user_preferences 테이블 활용 + - 사용자별 맞춤 키워드 설정 가능 +4. ✅ **이메일 요약 프롬프트 수정** (2025-08-26 21:00 완료) + - Slack mrkdwn 형식으로 변경 (커밋: 7103599) 5. ✅ robeing-monitor 환경변수 수정 (포트 9024로 실행 중) ---