- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
115 lines
4.8 KiB
Markdown
115 lines
4.8 KiB
Markdown
# 51124 서버 주요 이슈 - ChromaDB 격리 및 OAuth 토큰 갱신
|
|
|
|
## 문제 발생일
|
|
2025-08-27
|
|
|
|
## 작성자
|
|
Claude Code
|
|
|
|
## ~~문제 1: ChromaDB 사용자 대화 격리 문제~~ ✅ 해결 완료 (2025-08-28)
|
|
|
|
### 문제 설명
|
|
~~rb8001 서비스에서 ChromaDB 컬렉션 구조와 사용자 데이터 분리 방식 검토 필요~~
|
|
→ **해결됨**: [250828_UUID_통합_및_사용자_격리_계획.md](DOCS/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.md) 참조
|
|
|
|
### ✅ 해결 완료 (2025-08-28)
|
|
- **Phase 3 완료**: 사용자별 ChromaDB 컬렉션 격리 구현
|
|
- **구현 내용**: `rb8001_{user_uuid}` 형식으로 사용자별 컬렉션 분리
|
|
- **상세 내용**: [250828_UUID_통합_및_사용자_격리_계획.md](DOCS/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.md#phase-3) 참조
|
|
|
|
|
|
---
|
|
|
|
## 문제 2: ~~skill-email OAuth 토큰 자동 갱신 부재~~ ✅ 해결완료 (2025-08-27)
|
|
|
|
### 문제 설명
|
|
~~skill-email 서비스의 Gmail OAuth 토큰 자동 갱신 기능 미구현 상태~~
|
|
→ **2025-08-27 배포 완료**: OAuth 토큰 자동 갱신 구현 및 배포 완료
|
|
|
|
### 현상 (해결 전)
|
|
1. **토큰 갱신 미구현**
|
|
- `/skill_email/services/gmail_service.py:62` TODO 주석 확인
|
|
- refresh_credentials 함수가 실제 갱신 없이 그대로 반환
|
|
|
|
2. **auth-server 연동 부재**
|
|
- auth-server API 호출 코드 전혀 없음
|
|
- 파일 시스템에서 토큰 읽기만 수행 (`/auth-server/tokens`)
|
|
- 토큰 만료 체크 로직 없음
|
|
|
|
### 원인 분석 (해결됨)
|
|
|
|
#### ~~현재~~ 해결 전 상태 (2025-08-27 이전)
|
|
1. **auth-server (51123)**: ✅ 토큰 갱신 API 구현 완료
|
|
- `/api/gmail/refresh/{user_id}` - 토큰 자동 갱신
|
|
- `/api/gmail/check/{user_id}` - 토큰 상태 확인
|
|
- 2025-08-23 문서에서 구현 확인됨
|
|
|
|
2. **skill-email (51124)**: ~~❌ auth-server API 미연동~~ → ✅ 자체 갱신 구현 완료
|
|
- 2025-08-25 commit `2d175c1`: "이메일 보내기 전 refresh" 구현
|
|
- 2025-08-27 배포 완료
|
|
|
|
#### 해결 방법 (구현됨)
|
|
- Google OAuth 라이브러리(`google.auth`) 직접 사용
|
|
- `creds.refresh(Request())` 호출로 자동 갱신
|
|
- 갱신된 토큰은 DB에 자동 저장
|
|
- auth-server API 연동 없이 독립적으로 처리
|
|
|
|
### ✅ 구현 완료 (2025-08-27)
|
|
|
|
#### 구현된 솔루션 (`/skill_email/services/gmail_service.py:95-108`)
|
|
```python
|
|
# 토큰이 만료되었거나 곧 만료될 경우 자동 refresh
|
|
if creds and creds.expired and creds.refresh_token:
|
|
logger.info(f"Refreshing expired token for user: {user_id}")
|
|
from google.auth.transport.requests import Request
|
|
creds.refresh(Request()) # Google OAuth 라이브러리가 자동 갱신
|
|
|
|
# 갱신된 토큰 저장
|
|
if hasattr(self.creds_provider, 'save_credentials'):
|
|
self.creds_provider.save_credentials(user_id, creds)
|
|
logger.info(f"Refreshed token saved for user: {user_id}")
|
|
```
|
|
|
|
#### 추가 구현 사항
|
|
- 401 에러 발생 시 토큰 재갱신 후 재시도 로직 추가
|
|
- DBCredentialsProvider에 `save_credentials()` 메서드 구현 완료
|
|
- 토큰 갱신 실패 시에도 서비스 계속 진행 (graceful degradation)
|
|
|
|
### 영향 범위
|
|
- **영향받는 서비스**: skill-email
|
|
- **관련 서비스**: auth-server (51123 서버)
|
|
- **긴급도**: ~~MEDIUM~~ → ✅ RESOLVED (2025-08-27 해결)
|
|
|
|
### 테스트 방법
|
|
```bash
|
|
# 1. 현재 토큰 상태 확인 (skill-email에서)
|
|
docker exec -it skill-email python -c "
|
|
from services.db_credentials_provider import DBCredentialsProvider
|
|
provider = DBCredentialsProvider()
|
|
creds = provider.get_credentials('U0925SXQFDK')
|
|
print(f'Token expiry: {creds.expiry if creds else None}')
|
|
"
|
|
|
|
# 2. auth-server의 토큰 상태 확인 API (이미 구현됨)
|
|
curl http://192.168.219.45:3000/api/gmail/check/U0925SXQFDK
|
|
|
|
# 3. auth-server의 토큰 갱신 API 테스트 (이미 구현됨)
|
|
curl -X POST http://192.168.219.45:3000/api/gmail/refresh/U0925SXQFDK
|
|
```
|
|
|
|
## 개선 방향
|
|
1. ~~**데이터 구조**: 사용자별 컬렉션 분리 검토~~ ✅ 완료
|
|
2. **서비스 표준화**: rb8001과 rb10508 구조 통일 검토
|
|
3. **코드 관리**: TODO 항목 추적 및 구현
|
|
4. ~~**토큰 관리**: OAuth 토큰 자동 갱신 체계 구축~~ ✅ 완료
|
|
|
|
## 참고 문서
|
|
- rb10508_micro 메모리 구조: `/home/admin/ivada_project/rb10508_micro/app/core/memory/storage.py`
|
|
- rb8001 메모리 관리자: `/home/admin/ivada_project/rb8001/app/memory/manager.py`
|
|
- skill-email Gmail 서비스: `/home/admin/ivada_project/skill_email/services/gmail_service.py`
|
|
- auth-server 토큰 디렉토리: `/home/admin/auth-server/tokens`
|
|
|
|
## 업데이트 이력
|
|
- 2025-08-27: 초기 문서 작성 - ChromaDB 격리 문제 (Claude Code)
|
|
- 2025-08-27: skill-email OAuth 토큰 자동 갱신 문제 추가 (Claude Code)
|
|
- 2025-08-27: skill-email OAuth 토큰 자동 갱신 해결 완료 및 배포 (Claude Code) |