docs: Slack UUID 매핑 실패로 인한 사용자 식별 문제 문서화
- U09C98KBGHX (강일신) UUID 매핑 부재로 Slack ID 그대로 사용 - router.py의 UUID 변환 실패 시 fallback 로직 문제점 분석 - ChromaDB 컬렉션이 UUID 대신 Slack ID로 생성되는 과정 추적 - 단기/중기 해결 방안 제시
This commit is contained in:
parent
42c2660c4d
commit
3967a41511
135
troubleshooting/250902_Claude_Slack_UUID_매핑_실패_문제.md
Normal file
135
troubleshooting/250902_Claude_Slack_UUID_매핑_실패_문제.md
Normal file
@ -0,0 +1,135 @@
|
||||
# Slack UUID 매핑 실패로 인한 사용자 식별 문제
|
||||
|
||||
**날짜**: 2025-09-02
|
||||
**작성자**: Claude (51124 서버)
|
||||
**관련 서비스**: rb8001
|
||||
**상태**: 🔴 미해결
|
||||
|
||||
## 문제 상황
|
||||
|
||||
강일신(U09C98KBGHX) 사용자가 rb8001과 대화 시 "이고은님"으로 잘못 호칭되는 문제 발생.
|
||||
|
||||
### 사용자 발화
|
||||
```
|
||||
사용자: 이고은일까 강일신일까
|
||||
로빙: 이고은님이십니다.
|
||||
|
||||
사용자: 아니야 난 강일신이야
|
||||
로빙: 강일신님, 죄송합니다. 제가 잘못 기억하고 있었네요.
|
||||
```
|
||||
|
||||
## 원인 분석
|
||||
|
||||
### 1. UUID 매핑 부재
|
||||
```sql
|
||||
-- slack_user_mapping 테이블 현황
|
||||
U091UNVE41M -> b6ea2ee0-a15a-5cf4-93a9-a9ca20d4c4a0 (전희재)
|
||||
U0925SXQFDK -> 1e16e9d5-59f3-54da-a661-8abeabff4230 (김종태)
|
||||
U092F7FQ55L -> 69ae4ea9-a15f-5110-9f5d-6568e380fcfb
|
||||
-- U09C98KBGHX 매핑 없음!
|
||||
```
|
||||
|
||||
### 2. 코드 동작 분석
|
||||
|
||||
#### router.py (문제 코드)
|
||||
```python
|
||||
# /home/admin/ivada_project/rb8001/app/router/router.py:85-99
|
||||
if (channel in ["slack", "C0920L68267"] or channel.startswith(("C", "D", "G"))) and user_id.startswith("U"):
|
||||
logger.info(f"Converting Slack ID to UUID: {user_id}")
|
||||
# ... DB 조회 ...
|
||||
if result and result.user_id:
|
||||
original_slack_id = user_id
|
||||
user_id = str(result.user_id) # UUID로 변환
|
||||
logger.info(f"Slack ID {original_slack_id} converted to UUID {user_id}")
|
||||
else:
|
||||
logger.warning(f"No UUID mapping found for Slack ID: {user_id}")
|
||||
# ⚠️ user_id는 여전히 Slack ID 값 유지됨!
|
||||
|
||||
# 이후 Slack ID가 그대로 사용됨
|
||||
self.processing_cache[user_id] = {...} # user_id = "U09C98KBGHX"
|
||||
```
|
||||
|
||||
#### MemoryManager 생성
|
||||
```python
|
||||
# /home/admin/ivada_project/rb8001/app/llm/gemini_handler.py:81
|
||||
memory_manager = MemoryManager(self.robeing_name, user_id=user_id)
|
||||
|
||||
# /home/admin/ivada_project/rb8001/app/memory/manager.py:48
|
||||
self.collection_name = f"{robeing_id}_{user_id}"
|
||||
# 결과: "rb8001_U09C98KBGHX" 컬렉션 생성
|
||||
```
|
||||
|
||||
### 3. 실제 로그 증거
|
||||
```
|
||||
INFO:app.router.router:Converting Slack ID to UUID: U09C98KBGHX
|
||||
ERROR:app.state.database:Failed to get recent conversations: invalid input syntax for type uuid: "U09C98KBGHX"
|
||||
INFO:app.memory.manager:Created new collection: rb8001_U09C98KBGHX
|
||||
```
|
||||
|
||||
## 문제점
|
||||
|
||||
1. **UUID 변환 실패 시 Slack ID를 그대로 사용**
|
||||
- UUID 매핑이 없어도 처리 계속 진행
|
||||
- Slack ID로 ChromaDB 컬렉션 생성
|
||||
|
||||
2. **데이터 타입 불일치**
|
||||
- PostgreSQL은 UUID 타입 기대
|
||||
- 실제로는 Slack ID 문자열 전달
|
||||
|
||||
3. **빈 컬렉션으로 시작**
|
||||
- 새 사용자는 빈 메모리로 시작
|
||||
- 이전 오염된 메모리에서 잘못된 정보 참조 가능
|
||||
|
||||
## 해결 방안
|
||||
|
||||
### 단기 (즉시 적용 필요)
|
||||
|
||||
1. **신규 사용자 UUID 자동 생성**
|
||||
```python
|
||||
# router.py 수정 제안
|
||||
else:
|
||||
logger.warning(f"No UUID mapping found for Slack ID: {user_id}")
|
||||
# 새 UUID 생성 및 DB 저장
|
||||
import uuid
|
||||
new_uuid = str(uuid.uuid4())
|
||||
# DB에 매핑 저장 로직 추가
|
||||
user_id = new_uuid
|
||||
```
|
||||
|
||||
2. **기존 Slack ID 컬렉션 마이그레이션**
|
||||
- `rb8001_U09C98KBGHX` → `rb8001_{new_uuid}`
|
||||
|
||||
### 중기
|
||||
|
||||
1. **사용자 등록 프로세스 개선**
|
||||
- Slack 사용자 첫 접속 시 자동 UUID 생성
|
||||
- slack_user_mapping 테이블 자동 업데이트
|
||||
|
||||
2. **에러 핸들링 강화**
|
||||
- UUID 변환 실패 시 명확한 에러 반환
|
||||
- 처리 중단 또는 임시 UUID 생성
|
||||
|
||||
## 현재 영향
|
||||
|
||||
- U09C98KBGHX (강일신) 사용자만 영향
|
||||
- 다른 등록된 사용자(전희재, 김종태)는 정상 작동
|
||||
- 신규 Slack 사용자 접속 시 동일 문제 발생 가능
|
||||
|
||||
## 교훈
|
||||
|
||||
1. **Graceful Degradation의 함정**
|
||||
- 에러 시 계속 진행하는 것이 항상 좋은 것은 아님
|
||||
- 데이터 일관성이 깨질 수 있음
|
||||
|
||||
2. **타입 일관성 중요**
|
||||
- user_id가 때로는 UUID, 때로는 Slack ID
|
||||
- 명확한 타입 구분 필요
|
||||
|
||||
3. **신규 사용자 온보딩**
|
||||
- 자동 등록 프로세스 필요
|
||||
- 매핑 테이블 자동 관리 필요
|
||||
|
||||
## 관련 파일
|
||||
- `/home/admin/ivada_project/rb8001/app/router/router.py:85-99`
|
||||
- `/home/admin/ivada_project/rb8001/app/memory/manager.py:48`
|
||||
- `/home/admin/ivada_project/rb8001/app/llm/gemini_handler.py:81`
|
||||
Loading…
x
Reference in New Issue
Block a user