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

## 상태: 해결 방안 제시 (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 개발자*