# 대화 로그 사용자 매핑 불일치 ## 상태: 해결 방안 제시 (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 테이블 생성** ```sql 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() ); ``` 2. **인증 플로우** - 웹 로그인 (JWT) → Slack 연결 버튼 - Slack OAuth → slack_tokens 저장 - Slack 아이템 획득 → 장착 시 활성화 3. **Slack 이벤트 처리** - slack_user_id로 slack_tokens 조회 - user_id(UUID) 획득 → 이후 UUID로 모든 처리 ## 장점 - **완벽한 ID 통합**: 웹 UUID가 primary identifier - **일관된 UX**: Gmail과 동일한 아이템 시스템 - **권한 제어**: 장착/해제로 Slack 기능 활성화 - **기억 통합**: 모든 채널의 대화가 하나의 UUID로 관리 ## 결론 Slack을 아이템으로 관리하면 분리 운영 문제 완전 해결. 웹에서 시작하여 Slack을 연결하는 방식으로 통합 인증 체계 구축. --- *작성: Claude* *검토 필요: State Service 개발자*