192.168.219.45 → 192.168.0.100 일괄 변경 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
153 lines
5.0 KiB
Markdown
153 lines
5.0 KiB
Markdown
# 사용자 식별 체계 UUID 통합 구현
|
|
|
|
**작성일**: 2025-09-20
|
|
**작성자**: Claude
|
|
**관련 서비스**: rb8001, skill-email, skill-rag-file
|
|
**이슈**: 서비스 간 사용자 식별자 불일치 (UUID vs Slack ID)
|
|
|
|
## 문제 상황
|
|
- 서비스마다 다른 사용자 식별자 사용 (UUID, Slack ID, Google ID 등)
|
|
- skill-email이 Slack ID만 지원하여 UUID 기반 시스템과 호환 불가
|
|
- ChromaDB 컬렉션 명명 규칙 불일치
|
|
|
|
## 현재 시스템 구조 분석
|
|
|
|
### 데이터베이스 구조
|
|
```sql
|
|
-- user 테이블 (이미 UUID 사용 중)
|
|
- id: UUID (Primary Key)
|
|
- oauth_id: VARCHAR (Slack ID, Google ID 등)
|
|
- oauth_provider: VARCHAR (slack, google 등)
|
|
- email: VARCHAR
|
|
|
|
-- gmail_token, naverworks_token 테이블
|
|
- user_id: UUID (user 테이블 참조)
|
|
- token_data: JSONB
|
|
- is_equipped: BOOLEAN
|
|
```
|
|
|
|
### 서비스별 현황
|
|
1. **rb8001**: UUID 받아서 필요시 Slack ID로 변환
|
|
2. **skill-email**: Slack ID만 지원 → UUID 지원 추가 필요
|
|
3. **skill-rag-file**: UUID 지원
|
|
4. **ChromaDB**: 서비스별 다른 명명 규칙
|
|
|
|
## 구현 내용
|
|
|
|
### 1. skill-email UUID 지원 추가
|
|
|
|
#### DBCredentialsProvider 수정
|
|
**파일**: `/home/admin/ivada_project/skill_email/services/db_credentials_provider.py`
|
|
|
|
```python
|
|
def get_credentials(self, user_id: str) -> Optional[Credentials]:
|
|
# UUID 형식 검증
|
|
import re
|
|
is_uuid = bool(re.match(r'^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$', user_id.lower()))
|
|
|
|
if is_uuid:
|
|
# UUID로 직접 조회
|
|
query = """
|
|
SELECT gt.token_data, gt.oauth_config, gt.scopes, gt.expiry
|
|
FROM gmail_token gt
|
|
WHERE gt.user_id = %s AND gt.is_equipped = true
|
|
"""
|
|
else:
|
|
# Slack ID로 조회 (하위 호환성)
|
|
query = """
|
|
SELECT gt.token_data, gt.oauth_config, gt.scopes, gt.expiry
|
|
FROM gmail_token gt
|
|
JOIN "user" u ON gt.user_id = u.id
|
|
WHERE u.oauth_id = %s AND gt.is_equipped = true
|
|
"""
|
|
```
|
|
|
|
#### NaverWorksProvider (이미 UUID 지원)
|
|
**파일**: `/home/admin/ivada_project/skill_email/services/naverworks_provider.py`
|
|
- 이미 UUID와 username 모두 지원하도록 구현되어 있음
|
|
|
|
### 2. ChromaDB Collection 명명 규칙 통일
|
|
|
|
표준 명명 규칙: `{service}_{identifier}_{type}`
|
|
|
|
#### rb8001 변경
|
|
**파일**: `/home/admin/ivada_project/rb8001/app/memory/manager.py`
|
|
- 변경 전: `rb8001_{user_id}`
|
|
- 변경 후: `rb8001_{user_id}_memory`
|
|
|
|
#### skill-rag-file 변경
|
|
**파일**: `/home/admin/ivada_project/skill-rag-file/app/api/upload.py`, `search.py`
|
|
- 변경 전: `rb8001_{team_id}_documents`
|
|
- 변경 후: `skill_rag_file_{team_id}_documents`
|
|
|
|
### 3. 환경 변수 설정
|
|
|
|
#### skill-email 설정
|
|
**파일**: `/home/admin/ivada_project/skill_email/.env`
|
|
```env
|
|
TOKEN_PROVIDER=database # api에서 database로 변경
|
|
POSTGRES_CONNECTION_STRING=postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
|
```
|
|
|
|
## 테스트 결과
|
|
|
|
### UUID 조회 테스트
|
|
```bash
|
|
# UUID로 이메일 조회
|
|
curl "http://localhost:8501/messages?user_id=53529291-5050-4daa-89fb-008b546feb63&limit=1&provider=gmail"
|
|
# 결과: 성공 (토큰 만료 시 적절한 에러 메시지)
|
|
|
|
# Slack ID로 이메일 조회 (하위 호환성)
|
|
curl "http://localhost:8501/messages?user_id=100176844464607664427&limit=1&provider=gmail"
|
|
# 결과: 성공 (동일하게 작동)
|
|
```
|
|
|
|
### ChromaDB Collection 테스트
|
|
```python
|
|
# rb8001 컬렉션
|
|
collection_name = "rb8001_test_user_12345_memory" # ✅
|
|
|
|
# skill-rag-file 컬렉션
|
|
collection_name = "skill_rag_file_test_team_123_documents" # ✅
|
|
```
|
|
|
|
## 주의사항
|
|
|
|
1. **TOKEN_PROVIDER 설정**: skill-email에서 `database` 사용 필수
|
|
- `api`: robeing-monitor 경유 (UUID 미지원)
|
|
- `database`: 직접 DB 조회 (UUID 지원)
|
|
|
|
2. **토큰 만료 처리**: Gmail 토큰이 자주 만료되므로 refresh 로직 필요
|
|
|
|
3. **하위 호환성**: Slack ID 조회는 계속 지원하여 기존 시스템 영향 최소화
|
|
|
|
## 남은 작업
|
|
|
|
### 우선순위 높음
|
|
1. ✅ ChromaDB 명명 규칙 통일 완료
|
|
2. ✅ skill-email UUID 지원 완료
|
|
3. ⏳ robeing-monitor UUID 지원 추가 (TOKEN_PROVIDER=api 사용 시)
|
|
|
|
### 우선순위 중간
|
|
1. 전체 시스템 통합 테스트
|
|
2. 토큰 자동 갱신 메커니즘 구현
|
|
3. 성능 최적화 (UUID 변환 캐싱)
|
|
|
|
## 교훈
|
|
|
|
1. **설계 단계에서 일관된 식별자 체계 정의 필수**
|
|
- 처음부터 UUID를 primary identifier로 설계
|
|
- 외부 ID는 매핑 테이블로 관리
|
|
|
|
2. **하위 호환성 유지 전략**
|
|
- UUID/Slack ID 자동 감지 로직 구현
|
|
- 점진적 마이그레이션 지원
|
|
|
|
3. **환경 변수 활용**
|
|
- Provider 선택을 환경 변수로 제어
|
|
- 배포 환경별 유연한 설정 가능
|
|
|
|
## 관련 문서
|
|
- [250831_unified_id_system_implementation_roadmap.md](../plans/250831_unified_id_system_implementation_roadmap.md)
|
|
- [250920_chromadb_collection_naming_unification.md](250920_chromadb_collection_naming_unification.md)
|
|
- [000000_unresolved_items_matrix.md](../plans/000000_unresolved_items_matrix.md) |