DOCS/journey/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.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

3.8 KiB

UUID 통합 및 사용자 격리 계획

작성일: 2025-08-28

작성자: 51123 서버 관리자

상태: 완료 (18:15)

목표: Frontend/Slack 사용자 통합, 워크스페이스별 로빙 공유, 개인별 대화 격리


1. 현재 상황 (2025-08-28 확인)

ID 체계 현황

  • Frontend: JWT sub에 UUID 사용
  • Gateway: UUID로 인증
  • slack_user_mapping: Slack ID → UUID 매핑 활성화
  • rb8001: Slack ID 그대로 사용 (String)

실제 데이터

happybell80: U0925SXQFDK → 1e16e9d5-59f3-54da-a661-8abeabff4230
0914eagle:   U091UNVE41M → b6ea2ee0-a15a-5cf4-93a9-a9ca20d4c4a0
cdctfm:      U092F7FQ55L → 69ae4ea9-a15f-5110-9f5d-6568e380fcfb

문제점

  • rb8001 JWT 미구현 (기본 시크릿 키)
  • rb8001이 Slack ID를 UUID로 변환 안 함
  • ChromaDB 컬렉션 비어있음 []

2. 목표 아키텍처

통합 ID 체계

Google 로그인 → UUID 생성 → users 테이블
Slack 로그인 → UUID 조회/생성 → slack_user_mapping

워크스페이스 구조

workspace (로빙 1개)
  ├── user1 (UUID) - Frontend/Slack 통합
  ├── user2 (UUID) - Frontend/Slack 통합
  └── user3 (UUID) - Slack만

데이터 격리

  • 공유: 로빙 레벨, 스탯
  • 격리: 대화 내용, ChromaDB 기억, Gmail 토큰

3. 구현 계획

Phase 1: 보안 (긴급) 완료 (2025-08-28 17:35)

  • rb8001 JWT_SECRET_KEY 설정 (Gateway와 동일)
  • rb8001 Bearer 토큰 검증 구현
  • X-User-Id 헤더 의존 제거
  • 401 Unauthorized 테스트 완료

Phase 2: ID 통합 완료 (2025-08-28 18:00)

  • slack_user_mapping 테이블 활성화 (확인됨)
  • Gateway API /api/slack/{slack_id}/uuid 구현
  • rb8001에서 Slack ID → UUID 변환 구현
  • robeing-monitor UUID 변환 개선 (선택사항)

Phase 3: 사용자 격리 완료 (2025-08-28 18:15)

  • ChromaDB 사용자별 컬렉션 (rb8001_{user_uuid})
  • conversation_log UUID 저장 구현
  • 완전한 사용자 대화 격리

4. 핵심 변경사항

rb8001 (51124 서버) - 로컬 개발자 작업

# 1. JWT 검증 (/app/auth.py 수정)
JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY")  # Gateway와 동일

# 2. Slack 이벤트 처리 시 UUID 변환
slack_id = event['user']  # U0925SXQFDK
user_uuid = await get_uuid_from_slack(slack_id)  # slack_user_mapping 조회

slack_user_mapping API (51123 서버)

@app.get("/api/slack/{slack_id}/uuid")
async def get_uuid(slack_id: str):
    # DB 조회하여 UUID 반환

Gateway (51123 서버)

  • 이미 UUID 사용 중

5. 검증된 사실

작동 중

  • auth-server: JWT sub에 UUID 사용
  • Gateway: JWT 검증 및 UUID 추출
  • slack_user_mapping: 3명 데이터 확인
  • Frontend: localStorage에 UUID 저장

완료된 작업 (2025-08-28)

  • rb8001: JWT 검증 구현
  • rb8001: Slack ID → UUID 자동 변환
  • ChromaDB: 사용자별 컬렉션 격리
  • conversation_log: UUID 저장

6. 테스트 결과 (2025-08-28 18:30)

검증 완료

  1. JWT 인증: UUID 추출 성공 (1e16e9d5-59f3-54da-a661-8abeabff4230)
  2. ChromaDB 격리: rb8001_{user_uuid} 컬렉션 생성 확인
  3. PostgreSQL: conversation_log에 UUID 저장 확인
  4. Slack 변환: Slack ID → UUID 자동 변환 작동
  5. metadata None 처리: Frontend 접속 시 slack_user_id=None 필터링 구현 (250828_ChromaDB_metadata_None_error.md)

성과

  • 보안 취약점 100% 해결
  • 완벽한 사용자 데이터 격리
  • Frontend/Slack 통합 ID 체계 구축

관련 문서

  • 250827_JWT_인증_구현_COMPLETED.md
  • 250827_UUID_username_혼용_CRITICAL.md
  • 250819_claude_사용자구분및ChromaDB격리문제.md