DOCS/troubleshooting/250924_happybell80_UUID_체계_전환_및_대화저장_오류.md
happybell80 98a44d1733 UUID 문서 업데이트: Slack UUID 변환 실패 시 에러 처리 추가
- 파일명 날짜 250911 → 250924로 변경
- 의사코드 제거하여 가독성 개선
- Slack ID→UUID 변환 실패 시 403 에러 반환 방안 추가
- DB 현황과 tables.md 문서 불일치 수정 (rb_news 테이블 추가)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 13:30:53 +09:00

3.4 KiB

UUID 체계 전환 및 대화 저장 오류 해결

작성일: 2025-09-11

최종 수정일: 2025-09-24

작성자: happybell80


문제 상황

  1. PostgreSQL 테이블명 단수형 통일 후 발생한 연쇄 문제

    • conversation_log 테이블 id 자동증가 미작동
    • Slack ID를 UUID 필드에 저장 시도로 타입 오류
    • Gateway와 rb8001 간 UUID 전달 미구현
  2. 주요 오류 메시지

    - null value in column "id" of relation "conversation_log" violates not-null constraint
    - invalid input syntax for type uuid: "U09C98KBGHX"
    - 'MemoryManager' object has no attribute 'collection_name'
    - 'RobeingRouter' object has no attribute 'is_valid_uuid'
    

해결 과정

1. rb8001 UUID 체계 전환

  • app/router/router.py: X-User-Id 헤더 우선 사용 처리

2. conversation_log id 자동증가 해결

  • 테이블에 SERIAL 없어 MAX(id)+1로 수동 생성

3. Gateway Slack ID→UUID 변환

  • oauth_id와 oauth_provider='slack' 조건으로 조회

4. Slack Handler UUID 처리

  • X-User-Id 헤더에서 UUID 추출 및 context 저장

데이터 흐름 정리

Frontend → Gateway → rb8001

  1. JWT에서 UUID 추출: 3550cef6-63e1-4ceb-8802-a25c9d1c6917
  2. X-User-Id 헤더로 전달
  3. 정상 저장 및 조회

Slack → Gateway → rb8001

  1. Slack ID: U09C98KBGHX
  2. Gateway에서 oauth_id로 UUID 조회: 53529291-5050-4daa-89fb-008b546feb63
  3. X-User-Id 헤더로 전달
  4. 정상 저장 및 조회

수정된 파일

  • rb8001/app/router/router.py
  • rb8001/app/state/database.py
  • rb8001/app/router/slack_handler.py
  • robeing-gateway/app/main.py

결과 확인

  • 총 545개 대화 저장, NULL user_id 0개
  • 오늘 2개 저장: 김종태(53529291-5050-4daa-89fb-008b546feb63), frontend 사용자
  • Gateway UUID 변환 성공: Slack ID → UUID 정상 작동

추가 수정 사항

뉴스 중복 방지

  • skill-news fallback 제거: 새 뉴스 없을 때 API 호출 제거

헬스체크 로그 레벨 조정

  • DEBUG 레벨로 변경하여 로그 노이즈 감소

교훈

  • DB 스키마와 코드 모델 일치 필수
  • UUID 체계 전환 시 모든 경로 점검
  • 헤더 기반 인증 정보는 일관된 위치에서 처리

2025-09-24 추가 수정: Slack UUID 변환 실패 시 에러 처리

문제 상황

  • Gateway에서 Slack ID를 UUID로 변환 실패 시 경고만 출력하고 요청 계속 진행
  • rb8001에서 X-User-Id 헤더 없을 때 Slack ID를 UUID로 저장 시도하여 타입 오류 발생

해결 방안

1. /home/admin/robeing-gateway/app/main.py 수정

라인 526-532 - /slack/events 엔드포인트:

  • 현재: 경고만 출력
  • 수정: UUID 없으면 403 에러 반환

라인 583-585 - /slack/interactive 엔드포인트:

  • 동일하게 UUID 변환 실패 시 403 에러 반환

2. /home/admin/robeing-gateway/app/database.py 수정 (선택사항)

라인 376-381 - slack_user_to_uuid 함수:

  • 현재: None 반환
  • 선택적 수정: ValueError 예외 발생

기대 효과

  • Slack 사용자가 시스템에 등록되지 않은 경우 명확한 에러 메시지 반환
  • 잘못된 UUID로 인한 데이터 오염 방지
  • 디버깅 시간 단축 (명확한 에러로 원인 파악 용이)

관련 문제

  • Slack 요청은 OAuth 인증 없이 직접 /slack/events로 전송
  • JWT 토큰 없이 Slack 웹훅이 직접 호출
  • DB에서 oauth_id로 UUID 조회 시 oauth_provider='slack' 조건 필수