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