From e7df86389211ff9f7a5a45843d0f56e16df69575 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Tue, 19 Aug 2025 11:47:37 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EA=B5=AC?= =?UTF-8?q?=EB=B6=84=20=EB=B0=8F=20ChromaDB=20=EA=B2=A9=EB=A6=AC=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EB=B6=84=EC=84=9D=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rb8001 사용자 구분 없음 문제 (모든 대화가 하나의 ChromaDB에 혼재) - 슬랙 봇 토큰 불일치로 인한 봇 분리 현상 - 개인정보 노출 위험 및 컨텍스트 오염 문제 - 단기/중기/장기 해결책 제안 - ChromaDB 사용자별 분리 긴급 필요 --- ..._사용자구분및ChromaDB격리문제.md | 184 ++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 ideas/250819_claude_사용자구분및ChromaDB격리문제.md diff --git a/ideas/250819_claude_사용자구분및ChromaDB격리문제.md b/ideas/250819_claude_사용자구분및ChromaDB격리문제.md new file mode 100644 index 0000000..12b9946 --- /dev/null +++ b/ideas/250819_claude_사용자구분및ChromaDB격리문제.md @@ -0,0 +1,184 @@ +# 사용자 구분 및 ChromaDB 격리 문제 + +**날짜**: 2025-08-19 +**작성자**: Claude (51124 서버) +**관련 서비스**: rb8001, rb10508_micro, ChromaDB, Slack + +## 발견된 문제 + +### 1. rb8001 사용자 구분 없음 +- **현상**: + - 종태님(U0925SXQFDK)을 "전희재님"으로 호칭 + - 모든 사용자 대화가 하나의 ChromaDB 컬렉션에 저장 + - `robing_rb8001_memories` 단일 컬렉션 사용 + +- **원인**: + - 슬랙 직접 연결 (Gateway/JWT 미사용) + - 사용자별 컬렉션 분리 로직 없음 + - ChromaDB에 모든 사용자 컨텍스트 혼재 + +### 2. 슬랙 봇 분리 문제 +- **현상**: + - rb8001: 희재님 이벤트만 수신 + - rb10508_micro: 종태님 이벤트 수신 추정 + - 다른 슬랙 봇 토큰 사용 + +- **봇 토큰 차이**: + ``` + rb8001: xoxb-***1d99 + rb10508_micro: xoxb-***ZK7q (다른 토큰!) + rb10408_test: xoxb-***1d99 + ``` + +### 3. 사용자 식별 체계 불일치 +- **rb8001**: 슬랙 user_id만 사용 +- **rb10508**: Gateway JWT를 통한 웹 user_id 사용 +- **통합 매핑**: 없음 + +## 보안 및 프라이버시 위험 + +### ChromaDB 데이터 혼재 +- **문제**: 한 사용자가 다른 사용자의 대화 컨텍스트에 접근 가능 +- **예시**: 종태님이 "내 생일은?"이라고 물으면 희재님 생일 정보가 나올 수 있음 +- **심각도**: 높음 (개인정보 노출) + +### 잘못된 컨텍스트 응답 +- **문제**: 이전 사용자의 대화를 현재 사용자 것으로 인식 +- **예시**: "전희재님"이라고 잘못 호칭 +- **심각도**: 중간 (사용자 경험 저하) + +## 현재 아키텍처 분석 + +### rb8001 (문제 있음) +``` +Slack Event → rb8001 → ChromaDB (단일 컬렉션) + ↓ + 사용자 구분 없음 +``` + +### rb10508_micro (상대적으로 나음) +``` +Web → Gateway(JWT) → rb10508 → ChromaDB (사용자별?) + ↓ + 사용자 인증 +``` + +## 제안하는 해결책 + +### 단기 (즉시 적용 가능) + +#### 1. ChromaDB 사용자별 분리 +```python +# 현재 (문제) +collection_name = "robing_rb8001_memories" + +# 개선안 +collection_name = f"robing_rb8001_{user_id}_memories" +# 예: robing_rb8001_U0925SXQFDK_memories +``` + +#### 2. 기존 데이터 처리 +- 혼재된 데이터 백업: `/backup/chroma_mixed_20250819.db` +- ChromaDB 초기화 또는 마이그레이션 +- 사용자별 컬렉션으로 재구성 + +#### 3. 슬랙 봇 토큰 통일 +- 모든 서비스가 동일한 봇 토큰 사용 +- 또는 명확한 역할 분리 (메인/테스트) + +### 중기 (1-2주) + +#### 1. 사용자 관리 일원화 +```sql +-- PostgreSQL users 테이블 확장 +ALTER TABLE users ADD COLUMN slack_user_id VARCHAR(20); +CREATE INDEX idx_slack_user_id ON users(slack_user_id); + +-- 매핑 테이블 +CREATE TABLE user_identity_mapping ( + web_user_id VARCHAR(100), + slack_user_id VARCHAR(20), + robeing_id VARCHAR(50), + PRIMARY KEY (web_user_id, slack_user_id) +); +``` + +#### 2. Gateway 통합 +- 슬랙 이벤트도 Gateway 거쳐서 처리 +- 통일된 사용자 식별 체계 +- 중앙 인증/인가 + +### 장기 (1개월+) + +#### 1. 멀티테넌시 ChromaDB +- 사용자별 + 서비스별 + 세션별 격리 +- 권한 체크 미들웨어 +- 데이터 접근 감사 로그 + +#### 2. 사용자 프로필 서비스 +- 중앙화된 사용자 정보 관리 +- 이름, 선호도, 권한 등 통합 +- 모든 서비스가 API로 조회 + +## 구현 우선순위 + +1. **긴급**: ChromaDB 사용자별 분리 (데이터 보안) +2. **중요**: 슬랙 봇 토큰 통일 (사용자 경험) +3. **개선**: Gateway 통합 (아키텍처 일관성) + +## 예상 작업량 + +- ChromaDB 분리: 2-3시간 (코드 수정 + 테스트) +- 데이터 마이그레이션: 1시간 +- 슬랙 토큰 통일: 30분 +- 전체 테스트: 2시간 + +**총 예상**: 5-6시간 + +## 위험 및 고려사항 + +### 데이터 손실 위험 +- 마이그레이션 전 반드시 백업 +- 점진적 마이그레이션 고려 + +### 서비스 중단 +- 무중단 배포 전략 필요 +- 새 컬렉션 생성 후 전환 + +### 성능 영향 +- 사용자별 컬렉션 = 메모리 사용량 증가 +- 인덱싱 오버헤드 고려 + +## 테스트 시나리오 + +1. **사용자 격리 테스트** + - 종태님으로 대화 → 종태님 컬렉션만 사용 확인 + - 희재님으로 대화 → 희재님 컬렉션만 사용 확인 + - 크로스 체크: 서로의 정보 접근 불가 확인 + +2. **봇 통합 테스트** + - 모든 사용자가 동일한 봇과 대화 + - 일관된 응답 확인 + +3. **마이그레이션 테스트** + - 기존 대화 이력 보존 확인 + - 새 구조에서 정상 작동 확인 + +## 참고 자료 + +- 현재 ChromaDB 위치: `/home/admin/ivada_project/rb8001/chroma_db/` +- 로그 분석: `docker logs rb8001 --since "3h"` +- 사용자 ID: + - U0925SXQFDK: 종태님 + - U091UNVE41M: 희재님 + - U0935RJ60V6: rb8001 봇 + +## 다음 단계 + +1. 로컬 개발자와 논의 +2. 백업 계획 수립 +3. 단계별 구현 시작 + +--- + +**문서 끝** \ No newline at end of file