DOCS/troubleshooting/250902_Claude_Slack_UUID_매핑_실패_문제.md

4.2 KiB

Slack UUID 매핑 실패로 인한 사용자 식별 문제

날짜: 2025-09-02
작성자: Claude (51124 서버)
관련 서비스: rb8001
상태: 🔴 미해결

문제 상황

강일신(U09C98KBGHX) 사용자가 rb8001과 대화 시 "이고은님"으로 잘못 호칭되는 문제 발생.

사용자 발화

사용자: 이고은일까 강일신일까
로빙: 이고은님이십니다.

사용자: 아니야 난 강일신이야
로빙: 강일신님, 죄송합니다. 제가 잘못 기억하고 있었네요.

원인 분석

1. UUID 매핑 부재 → 2025-09-03 확인: 매핑 정상 존재

-- slack_user_mapping 테이블 현황 (2025-09-03 재확인)
U09C98KBGHX -> 1a275625-1762-42ef-8398-ce743c478692 (COMPANY X)
U09BQSUULSF -> 8901c132-4e26-42ee-8d22-e8eae97586fc (강일신)
-- 실제로는 매핑 존재함. 초기 분석 오류

2. 코드 동작 분석

router.py (문제 코드)

# /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 생성

# /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 자동 생성
# 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
  1. 기존 Slack ID 컬렉션 마이그레이션
    • rb8001_U09C98KBGHXrb8001_{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