docs: 사용자 구분 및 ChromaDB 격리 문제 분석 문서 추가
- rb8001 사용자 구분 없음 문제 (모든 대화가 하나의 ChromaDB에 혼재) - 슬랙 봇 토큰 불일치로 인한 봇 분리 현상 - 개인정보 노출 위험 및 컨텍스트 오염 문제 - 단기/중기/장기 해결책 제안 - ChromaDB 사용자별 분리 긴급 필요
This commit is contained in:
parent
4169c8d4fd
commit
e7df863892
184
ideas/250819_claude_사용자구분및ChromaDB격리문제.md
Normal file
184
ideas/250819_claude_사용자구분및ChromaDB격리문제.md
Normal file
@ -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. 단계별 구현 시작
|
||||
|
||||
---
|
||||
|
||||
**문서 끝**
|
||||
Loading…
x
Reference in New Issue
Block a user