From f65b2d186d2b568fa9703e352e4e7c784f788b4e Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 26 Aug 2025 00:20:39 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20ID=20=EC=B2=B4=EA=B3=84=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20conversation=5Flogs=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ID 타입 불일치 문제 분석 (UUID vs VARCHAR) - 테이블별 ID 컬럼 현황 정리 - conversation_logs에 slack_user_id 추가 해결책 - 단기/중기/장기 정리 방안 제시 - State Service DB 설정 오류 포함 --- ...리_및_conversation_logs_문제_해결.md | 231 ++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md diff --git a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md new file mode 100644 index 0000000..3cd04f9 --- /dev/null +++ b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md @@ -0,0 +1,231 @@ +# ID 체계 정리 및 conversation_logs 저장 문제 해결 + +## 작성일: 2025-08-26 +## 작성자: 서버 관리자 +## 상태: 진행중 +## 영향: 대화 저장 실패, ID 타입 불일치로 인한 데이터 무결성 문제 + +--- + +## 1. 문제 상황 + +### 1.1 발견된 문제들 +1. **user_id UUID 타입 문제** + - PostgreSQL의 conversation_logs 테이블에서 user_id가 UUID 타입 + - "system"이나 Slack user_id (예: U0925SXQFDK)는 UUID가 아님 + - UUID 변환 시도 시 오류 발생 + +2. **대화 저장 전혀 안됨** + - conversation_logs 테이블 완전히 비어있음 (0 rows) + - 게이트웨이 로그에 저장 API 호출 없음 + - State Service DB 설정 오류 (auth_db → main_db) + +--- + +## 2. ID 체계 현황 분석 + +### 2.1 문제점 +#### 다양한 ID 타입 혼재 +- **UUID**: users.id, workspace_members.id, slack_user_mapping.user_id +- **VARCHAR**: robeing_id, slack_user_id, slack_id, channel_id +- **INTEGER**: conversation_logs.id, gmail_tokens.id + +#### 동일 개념, 다른 이름 +- `slack_user_id` (slack_user_mapping) +- `slack_id` (gmail_tokens) +- 둘 다 Slack 사용자 ID를 의미 + +#### 변환 문제 +- UUID ↔ Slack ID 변환 로직 불일치 +- conversation_logs의 user_id(UUID)에 Slack ID 저장 시도로 실패 + +### 2.2 테이블별 ID 현황 + +| 테이블 | Primary Key | 외래 키/참조 ID | +|--------|------------|---------------| +| **users** | id (UUID) | oauth_id (VARCHAR) | +| **workspace_members** | id (UUID) | user_id (UUID), workspace_id (UUID), robeing_id (VARCHAR) | +| **gmail_tokens** | id (INT) | user_id (UUID), slack_id (VARCHAR), robeing_id (VARCHAR) | +| **slack_user_mapping** | id (UUID) | user_id (UUID), slack_user_id (VARCHAR), workspace_member_id (UUID) | +| **conversation_logs** | id (INT) | user_id (UUID), slack_user_id (VARCHAR)*, robeing_id (VARCHAR) | + +*slack_user_id는 이 문제 해결을 위해 새로 추가한 컬럼 + +--- + +## 3. 매핑 관계도 + +### 3.1 현재 구조 +``` +[Slack ID] ──┬──> [slack_user_mapping] ──> [users.id (UUID)] + │ + ├──> [gmail_tokens.slack_id] + │ + └──> [conversation_logs.slack_user_id] + +[users.id] ──┬──> [workspace_members.user_id] + ├──> [gmail_tokens.user_id] + ├──> [conversation_logs.user_id] + └──> [robeing_stats.user_id] +``` + +### 3.2 Slack 유저 매핑 현황 +``` +slack_user_id | username +---------------+------------- +U091UNVE41M | 0914eagle +U0925SXQFDK | happybell80 +U092F7FQ55L | cdctfm +``` + +--- + +## 4. 해결 방안 + +### 4.1 단기 해결책 (즉시 적용) ✅ 완료 +```sql +-- 1. user_id를 nullable로 변경 +ALTER TABLE conversation_logs ALTER COLUMN user_id DROP NOT NULL; + +-- 2. slack_user_id 컬럼 추가 +ALTER TABLE conversation_logs ADD COLUMN slack_user_id VARCHAR(100); +``` + +### 4.2 중기 해결책 (표준화) +**명명 규칙 통일**: +- `slack_user_id`: Slack 사용자 ID (모든 테이블) +- `user_id`: 시스템 UUID (모든 테이블) +- `robeing_id`: 로빙 식별자 (VARCHAR 유지) + +**작업 필요**: +```sql +-- gmail_tokens 테이블 컬럼명 변경 +ALTER TABLE gmail_tokens RENAME COLUMN slack_id TO slack_user_id; +``` + +### 4.3 장기 해결책 (구조 개선) +```sql +-- 중앙 ID 매핑 테이블 생성 +CREATE TABLE id_mappings ( + user_uuid UUID PRIMARY KEY, + slack_user_id VARCHAR(100) UNIQUE, + robeing_id VARCHAR(50) UNIQUE, + oauth_id VARCHAR(255), + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); + +-- 기존 데이터 마이그레이션 +INSERT INTO id_mappings (user_uuid, slack_user_id, robeing_id) +SELECT DISTINCT + u.id, + sum.slack_user_id, + wm.robeing_id +FROM users u +LEFT JOIN slack_user_mapping sum ON u.id = sum.user_id +LEFT JOIN workspace_members wm ON u.id = wm.user_id; +``` + +--- + +## 5. 51124 서버 수정 필요 사항 + +### 5.1 rb8001 대화 저장 로직 +```python +# 변경 전: user_id에 UUID 또는 Slack ID 혼용 +conversation_data = { + "user_id": user_id, # UUID 또는 Slack ID + "robeing_id": "rb8001", + ... +} + +# 변경 후: slack_user_id 명시적 사용 +conversation_data = { + "slack_user_id": slack_user_id, # Slack ID만 + "user_id": user_uuid if user_uuid else None, # UUID (있으면) + "robeing_id": "rb8001", + ... +} +``` + +### 5.2 State Service DB 설정 +```bash +# /home/heejae/robeing-state-service/.env +# 변경 전 (잘못된 DB) +DATABASE_URL=postgresql://robeings:robeings@localhost:5433/auth_db + +# 변경 후 (올바른 DB) +DATABASE_URL=postgresql://robeings:robeings@localhost:5433/main_db +``` + +--- + +## 6. 권장 작업 순서 + +1. ✅ conversation_logs에 slack_user_id 추가 (완료) +2. ⏳ gmail_tokens의 slack_id → slack_user_id로 컬럼명 변경 +3. ⏳ 51124 서버 코드가 slack_user_id 사용하도록 수정 +4. ⏳ 저장 후 배치 작업으로 slack_user_id → user_id 매핑 +5. ⏳ State Service 환경변수 수정 (auth_db → main_db) + +--- + +## 7. 검증 방법 + +### 7.1 대화 저장 확인 +```sql +-- 저장된 대화 확인 +SELECT COUNT(*) FROM conversation_logs; + +-- 최근 대화 로그 +SELECT + cl.slack_user_id, + cl.robeing_id, + cl.message, + cl.response, + cl.timestamp +FROM conversation_logs cl +ORDER BY cl.timestamp DESC +LIMIT 5; +``` + +### 7.2 ID 매핑 확인 +```sql +-- Slack ID → UUID 매핑 확인 +SELECT + sum.slack_user_id, + u.id as user_uuid, + u.username, + wm.robeing_id +FROM slack_user_mapping sum +JOIN users u ON sum.user_id = u.id +LEFT JOIN workspace_members wm ON u.id = wm.user_id; +``` + +--- + +## 8. 주의사항 + +### ⚠️ 데이터베이스 변경 +- 스키마 변경 전 백업 필수 +- 외래 키 제약 조건 확인 +- NULL 허용 컬럼 변경 시 기존 데이터 영향 검토 + +### ⚠️ 하위 호환성 +- 기존 코드가 user_id(UUID)를 의존하는 경우 확인 +- slack_user_id 추가 후 점진적 마이그레이션 + +--- + +## 9. 관련 문서 +- [Gmail Token Slack ID 마이그레이션](/home/admin/DOCS/gmail-token-slack-id-migration.md) +- [데이터베이스 관계도](/home/admin/DOCS/300_architecture/database/relationships.md) +- [UUID 변환 시스템](/home/admin/DOCS/300_architecture/uuid_conversion_system.md) +- [State Service DB 설정](/home/admin/DOCS/troubleshooting/250825_gmail_token_null_daily_briefing_fix.md) + +--- + +## 예상 소요 시간: 2시간 +- DB 스키마 수정: 30분 +- 51124 서버 코드 수정: 1시간 +- 검증 및 테스트: 30분 \ No newline at end of file