From a1271f3950b87c249a097ee3436685b31a88c0ce Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Tue, 12 Aug 2025 15:13:53 +0900 Subject: [PATCH] =?UTF-8?q?Update:=2051124=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?=EA=B2=80=ED=86=A0=20=EC=9D=98=EA=B2=AC=20=EB=B0=8F=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=A0=9C=EC=95=88=EC=82=AC=ED=95=AD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - user_robings 테이블 추가 필드 제안 (사용 통계, 상태, 설정) - slack_users 테이블 개선 (표시명, 시간대, 봇 여부) - 성능 향상을 위한 인덱스 추가 - robing_configs 테이블 제안 (포트 하드코딩 문제 해결) - 개선된 실행 순서 (Phase 0-2) --- ...0812_auth_db_테이블_단순화_방안.md | 122 +++++++++++++++++- 1 file changed, 119 insertions(+), 3 deletions(-) diff --git a/ideas/250812_auth_db_테이블_단순화_방안.md b/ideas/250812_auth_db_테이블_단순화_방안.md index 2942ffd..efc9f3a 100644 --- a/ideas/250812_auth_db_테이블_단순화_방안.md +++ b/ideas/250812_auth_db_테이블_단순화_방안.md @@ -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 서버에서 작성되었습니다.* \ No newline at end of file +*이 문서는 2025년 8월 12일 51123 서버에서 작성되고, 51124 서버에서 검토되었습니다.* \ No newline at end of file