Update: 51124 서버 검토 의견 및 추가 제안사항 반영

- user_robings 테이블 추가 필드 제안 (사용 통계, 상태, 설정)
- slack_users 테이블 개선 (표시명, 시간대, 봇 여부)
- 성능 향상을 위한 인덱스 추가
- robing_configs 테이블 제안 (포트 하드코딩 문제 해결)
- 개선된 실행 순서 (Phase 0-2)
This commit is contained in:
Claude-51124 2025-08-12 15:13:53 +09:00
parent 27649af1bc
commit a1271f3950

View File

@ -330,15 +330,131 @@ WHERE sr.slack_user_id = ? AND sr.slack_team_id = ?
- 대응: API 래퍼 함수로 하위 호환성 유지
- 점진적 코드 업데이트
## 8. 결론
## 8. 51124 서버 검토 의견 및 추가 제안
### 8.1 동의하는 부분
1. **방안 2 (4개 테이블) 선택**
- 적절한 균형점입니다
- 확장성과 단순성 모두 확보
- 명확한 관심사 분리
2. **slack_users 테이블 설계**
- `robing_id` 필드 포함이 좋습니다
- Slack 사용자별로 다른 로빙 할당 가능
- UNIQUE 제약 조건 적절
3. **단계적 마이그레이션**
- 백업 우선
- 새 테이블 먼저 생성
- 안전한 접근
### 8.2 추가 제안사항
#### user_robings 테이블에 추가 필드
```sql
CREATE TABLE user_robings (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id),
robing_id VARCHAR(100) NOT NULL,
robing_port INTEGER,
robing_host VARCHAR(255) DEFAULT '192.168.219.52',
is_primary BOOLEAN DEFAULT false,
last_used_at TIMESTAMP, -- 마지막 사용 시간
usage_count INTEGER DEFAULT 0, -- 사용 횟수
status VARCHAR(20) DEFAULT 'active', -- active/inactive/suspended
settings JSON, -- 로빙별 개인 설정
created_at TIMESTAMP,
UNIQUE(user_id, robing_id)
);
```
#### slack_users 테이블 개선
```sql
CREATE TABLE slack_users (
id UUID PRIMARY KEY,
slack_user_id VARCHAR(100) NOT NULL,
slack_team_id VARCHAR(100),
user_id UUID REFERENCES users(id),
robing_id VARCHAR(100),
display_name VARCHAR(255), -- Slack 표시 이름
slack_timezone VARCHAR(50), -- 사용자 시간대
last_message_at TIMESTAMP, -- 마지막 메시지 시간
is_bot BOOLEAN DEFAULT false, -- 봇 여부 확인
created_at TIMESTAMP,
updated_at TIMESTAMP,
UNIQUE(slack_user_id, slack_team_id)
);
```
#### 인덱스 추가 필요
```sql
-- Slack 사용자 빠른 조회
CREATE INDEX idx_slack_users_lookup
ON slack_users(slack_user_id, slack_team_id);
-- 주 로빙 빠른 조회
CREATE INDEX idx_user_robings_primary
ON user_robings(user_id, is_primary);
-- 활성 상태 필터링
CREATE INDEX idx_user_robings_status
ON user_robings(status, user_id);
```
### 8.3 주의사항
1. **데이터 일관성**
- `robing_id`가 여러 테이블에 분산
- 중앙 관리 방법 필요 (enum 또는 별도 robings 테이블)
2. **포트 하드코딩 문제**
```sql
-- 하드코딩 대신 설정 테이블 권장
CREATE TABLE robing_configs (
robing_id VARCHAR(100) PRIMARY KEY,
port INTEGER NOT NULL,
host VARCHAR(255),
is_active BOOLEAN DEFAULT true
);
```
3. **ChromaDB 컬렉션명 규칙**
- `{robing_id}_{user_id}_episodic` 형식 통일
- slack_users의 user_id 사용 필수
### 8.4 개선된 실행 순서
#### Phase 0: 즉시 실행 (영향 없음)
1. slack_users 테이블만 먼저 생성
2. 인덱스 생성
3. 테스트 데이터 입력
4. rb10508_micro에서 매핑 테스트
#### Phase 1: 테스트 환경 검증
1. 새 테이블 전체 생성 (테스트 DB)
2. 마이그레이션 스크립트 검증
3. API 호환성 테스트
4. 롤백 시나리오 테스트
#### Phase 2: 프로덕션 적용
1. 전체 백업
2. 새 테이블 생성
3. 데이터 마이그레이션
4. 애플리케이션 전환
5. 구 테이블 보관 (1주일)
6. 안정화 확인 후 구 테이블 삭제
## 9. 최종 결론
현재의 복잡한 5개 테이블 구조를 4개 테이블로 단순화하여:
- 데이터 모델의 명확성 향상
- Slack 통합 기능 지원
- 유지보수성 개선
방안 2 (4개 테이블)를 채택하여 단계적으로 마이그레이션하는 것을 권장합니다.
방안 2 (4개 테이블)를 채택하되, 51124 서버에서 제안한 추가 필드와 인덱스를 포함하여 구현하는 것을 권장합니다.
특히 slack_users 테이블을 즉시 생성하여 Slack 사용자 매핑 기능을 우선 구현하고, 나머지 테이블은 단계적으로 마이그레이션하는 것이 안전합니다.
---
*이 문서는 2025년 8월 12일 51123 서버에서 작성되었습니다.*
*이 문서는 2025년 8월 12일 51123 서버에서 작성되고, 51124 서버에서 검토되었습니다.*