DOCS/troubleshooting/250827_claude_conversation_log_user_mapping.md
happybell80 5c888055e8 docs: Slack 권한 아이템화 방안으로 문서 업데이트
- Slack을 Gmail과 같은 권한 아이템으로 관리
- 웹에서 Slack OAuth 연결 시작
- slack_tokens 테이블로 매핑 관리
- 모든 채널 UUID로 통합하여 기억 일원화
2025-08-27 19:31:25 +09:00

65 lines
2.0 KiB
Markdown

# 대화 로그 사용자 매핑 불일치
## 상태: 해결 방안 제시 (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 개발자*