DOCS/troubleshooting/250916_happybell80_slack_user_uuid_mapping_failure.md
happybell80 f48536bc80 docs: Slack UUID 매핑 실패 문제 해결 문서 업데이트
- 근본 원인 파악: Google 가입 사용자의 oauth_id NULL
- 해결 방법: Slack 로그인 시 oauth_id 업데이트
- 상태: 해결됨
2025-09-16 23:12:25 +09:00

2.2 KiB

Slack 사용자 UUID 매핑 실패 및 user_id NULL 에러

배경

  • 날짜: 2025-09-16
  • 작성자: happybell80
  • 문제: Slack 사용자 DB 저장 시 user_id NULL 제약 위반

문제 상황

PostgreSQL 에러

null value in column "user_id" violates not-null constraint

로그 확인 내역

  • rb8001 서비스: Slack ID → UUID 매핑 실패 WARNING
  • robeing-gateway: JWT에서 sub 또는 user_id를 읽어 user_uuid로 사용
  • 사용자: 김종태 (goeun2dc@gmail.com) - Google OAuth로 가입 후 Slack OAuth 인증

현재 코드 상태

robeing-gateway

  • /home/happybell/projects/ivada/robeing-gateway/app/main.py:544행 - slack_user_to_uuid() 호출
  • /home/happybell/projects/ivada/robeing-gateway/app/database.py:360-388행 - slack_user_to_uuid() 구현
  • slack_user_to_uuid() 결과가 None이면 X-User-Id 헤더 생략하여 rb8001로 프록시

DB 스키마

  • user 테이블: id, team_id, email, name, oauth_provider, oauth_id, username (slack_user_id 컬럼 없음)
  • SlackWorkspace 테이블: slack_team_id, bot_token, team_id (별도 테이블)
  • conversation_log 테이블: user_id Column(String) - Nullable 허용

관련 파일

  • robeing-gateway/app/database.py: slack_user_to_uuid() 함수 구현
  • rb8001/app/state/database.py: ConversationLog 모델 정의
  • rb8001: UUID 없으면 Slack ID 보존, PostgreSQL 저장 시 user_id NULL로 저장 가능

근본 원인

  • Google OAuth로 먼저 가입한 사용자의 oauth_id가 NULL
  • Slack OAuth 로그인 시 이메일로 기존 사용자 찾지만 oauth_id 업데이트 안 함
  • slack_user_to_uuid() 함수가 oauth_id='slack_user_id' AND oauth_provider='slack' 조건으로 검색 실패

해결 방안

  • auth-server의 Slack 로그인 처리 시 기존 사용자의 oauth_id/oauth_provider 업데이트 필요
  • 파일: /home/happybell/projects/ivada/auth-server/app/providers/slack.py:282-286행
  • 이메일로 기존 사용자 찾았을 때 oauth_id를 Slack User ID로, oauth_provider를 'slack'으로 업데이트

현재 상태

  • 해결됨 (2025-09-16)
  • auth-server/app/providers/slack.py:286-289행에 oauth_id 업데이트 코드 추가
  • 이메일로 찾은 기존 사용자의 oauth_id와 oauth_provider를 Slack 정보로 업데이트