docs: 중복 문서 제거 및 기존 문서 완료 표시 업데이트
- 중복 문서 250826_happybell80_사용자별설정_구현.md 삭제 - 250826_id_체계_정리 문서에 완료 현황 업데이트 - 뉴스 키워드 하드코딩 제거 완료 (커밋: aed931e) - 이메일 요약 프롬프트 수정 완료 (커밋: 7103599) - 상태를 '대부분 해결'로 변경
This commit is contained in:
parent
484885431a
commit
49946c3649
@ -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*
|
||||
@ -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로 실행 중)
|
||||
|
||||
---
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user