DOCS/journey/troubleshooting/250827_claude_conversation_log_user_mapping.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

2.0 KiB

대화 로그 사용자 매핑 불일치

상태: 해결 방안 제시 (2025-08-27)

문제

같은 사용자가 Slack/웹 접속 시 각각 다른 ID로 저장

현상

  • Slack: slack_user_id만 저장 (UUID NULL)
  • : user_id(UUID)만 저장 (slack_user_id NULL)
  • 결과: 동일 사용자가 2명으로 분리

원인

  • Slack 경로: JWT 없이 Slack ID만 사용
  • 웹 경로: JWT에서 UUID만 추출
  • State Service: 두 ID를 연결하는 매픹 로직 없음

영향

  • 동일 사용자 통계 분리
  • 채널 간 대화 기록 단절
  • 개인화 컨텍스트 손실

해결 방안: Slack 권한 아이템화

새로운 방안

  • Slack을 아이템으로 관리
  • 웹에서 Slack OAuth 인증 → slack_tokens 테이블 저장
  • Gmail 아이템과 동일한 방식으로 장착/해제

구현

  1. slack_tokens 테이블 생성
CREATE TABLE slack_tokens (
    id SERIAL PRIMARY KEY,
    user_id UUID NOT NULL,      -- 웹 사용자 UUID
    slack_user_id VARCHAR(100),  -- Slack ID
    slack_team_id VARCHAR(100),  -- Workspace ID
    access_token TEXT,
    is_equipped BOOLEAN DEFAULT false,
    equipped_to VARCHAR(50),     -- 장착된 로빙
    created_at TIMESTAMP DEFAULT NOW()
);
  1. 인증 플로우

    • 웹 로그인 (JWT) → Slack 연결 버튼
    • Slack OAuth → slack_tokens 저장
    • Slack 아이템 획득 → 장착 시 활성화
  2. Slack 이벤트 처리

    • slack_user_id로 slack_tokens 조회
    • user_id(UUID) 획득 → 이후 UUID로 모든 처리

장점

  • 완벽한 ID 통합: 웹 UUID가 primary identifier
  • 일관된 UX: Gmail과 동일한 아이템 시스템
  • 권한 제어: 장착/해제로 Slack 기능 활성화
  • 기억 통합: 모든 채널의 대화가 하나의 UUID로 관리

결론

Slack을 아이템으로 관리하면 분리 운영 문제 완전 해결. 웹에서 시작하여 Slack을 연결하는 방식으로 통합 인증 체계 구축.


작성: Claude 검토 필요: State Service 개발자