# Slack UUID 매핑 실패로 인한 사용자 식별 문제 **날짜**: 2025-09-02 (2025-09-14 추가 수정) **작성자**: Claude (51124 서버), happybell80 **관련 서비스**: rb8001 **상태**: ✅ 해결 (2025-09-14) ## 문제 상황 강일신(U09C98KBGHX) 사용자가 rb8001과 대화 시 "이고은님"으로 잘못 호칭되는 문제 발생. ### 사용자 발화 ``` 사용자: 이고은일까 강일신일까 로빙: 이고은님이십니다. 사용자: 아니야 난 강일신이야 로빙: 강일신님, 죄송합니다. 제가 잘못 기억하고 있었네요. ``` ## 원인 분석 ### 1. ~~UUID 매핑 부재~~ → 2025-09-03 확인: 매핑 정상 존재 ```sql -- slack_user_mapping 테이블 현황 (2025-09-03 재확인) U09C98KBGHX -> 1a275625-1762-42ef-8398-ce743c478692 (COMPANY X) U09BQSUULSF -> 8901c132-4e26-42ee-8d22-e8eae97586fc (강일신) -- 실제로는 매핑 존재함. 초기 분석 오류 ``` ### 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. **신규 사용자 온보딩** - 자동 등록 프로세스 필요 - 매핑 테이블 자동 관리 필요 ## 2025-09-14 추가: 검색 기능 UUID 문제 ### 문제 - UUID 사용자(김종태 등)는 "검색해줘" 명령 실패 - Slack ID 사용자(happybell80)는 정상 작동 - router.py 검색 키워드 체크가 UUID 전달 시 건너뜀 ### 해결 (적용 완료) ```python # slack_handler.py:82-88 수정 original_slack_id = context.get("original_slack_id") if original_slack_id: result = await router.route_message(text, original_slack_id, channel, thread_ts) # UUID 대신 원본 Slack ID 전달로 검색 기능 복구 ``` ### workspace_member 테이블 활용 - user_id(UUID) ↔ slack_user_id 매핑 존재 - 11명 전원 매핑 확인 (2025-09-14) - router.py에서 UUID→Slack ID 변환 가능 ## 관련 파일 - `/home/admin/ivada_project/rb8001/app/router/router.py:85-99` - `/home/admin/ivada_project/rb8001/app/router/slack_handler.py:82-88` (2025-09-14 수정) - `/home/admin/ivada_project/rb8001/app/memory/manager.py:48` - `/home/admin/ivada_project/rb8001/app/llm/gemini_handler.py:81`