From 152b395bd1fa85239176b175e8bdd4ae6fcff416 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 26 Aug 2025 21:24:30 +0900 Subject: [PATCH] =?UTF-8?q?Slack=20ID=20=EC=BB=AC=EB=9F=BC=EB=AA=85=20?= =?UTF-8?q?=ED=91=9C=EC=A4=80=ED=99=94=20=EC=9E=91=EC=97=85=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 250826_slack_id_column_standardization.md: 새 문서 생성 - gmail_tokens.slack_id → slack_user_id 변경 계획 - 테이블별 현황 및 영향도 분석 - 3단계 마이그레이션 전략 - 250826_id_체계_정리_및_conversation_logs_문제_해결.md: 참조 링크 추가 --- ...리_및_conversation_logs_문제_해결.md | 1 + .../250826_slack_id_column_standardization.md | 171 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 troubleshooting/250826_slack_id_column_standardization.md diff --git a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md index 1c919d4..740cd2b 100644 --- a/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md +++ b/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md @@ -164,6 +164,7 @@ DATABASE_URL=postgresql://robeings:robeings@localhost:5433/main_db 1. ✅ conversation_logs에 slack_user_id 추가 (완료) 2. ⏳ gmail_tokens의 slack_id → slack_user_id로 컬럼명 변경 + - **→ 별도 문서로 분리**: `250826_slack_id_column_standardization.md` 참조 3. ⏳ 51124 서버 코드가 slack_user_id 사용하도록 수정 4. ⏳ 저장 후 배치 작업으로 slack_user_id → user_id 매핑 5. ✅ robeing-monitor 환경변수 수정 (포트 9024로 실행 중) diff --git a/troubleshooting/250826_slack_id_column_standardization.md b/troubleshooting/250826_slack_id_column_standardization.md new file mode 100644 index 0000000..b1a7fd2 --- /dev/null +++ b/troubleshooting/250826_slack_id_column_standardization.md @@ -0,0 +1,171 @@ +# Slack ID 컬럼명 표준화 작업 + +## 작성일: 2025-08-26 21:30 +## 작성자: 51123 서버 관리자 +## 상태: 🔴 작업 필요 +## 영향: 데이터 일관성, JOIN 쿼리 성능, 코드 유지보수성 +## 관련: 250826_id_체계_정리_및_conversation_logs_문제_해결.md에서 분리 + +--- + +## 1. 문제 정의 + +### 1.1 핵심 문제 +동일한 Slack 사용자 ID가 테이블마다 다른 컬럼명으로 저장되어 있음 + +### 1.2 현재 상태 +| 테이블 | 컬럼명 | 데이터 예시 | 타입 | +|--------|--------|------------|------| +| slack_user_mapping | **slack_user_id** | U091UNVE41M | VARCHAR(100) | +| gmail_tokens | **slack_id** ❌ | U091UNVE41M | VARCHAR(100) | +| conversation_logs | **slack_user_id** | U091UNVE41M | VARCHAR(100) | + +--- + +## 2. 시스템 영향도 + +### 2.1 데이터 흐름도 +``` +[Slack 사용자: U091UNVE41M] + │ + ├─→ slack_user_mapping.slack_user_id ✅ + │ ↓ (JOIN 시 컬럼명 불일치) + ├─→ gmail_tokens.slack_id ❌ + │ ↓ (JOIN 시 컬럼명 불일치) + └─→ conversation_logs.slack_user_id ✅ +``` + +### 2.2 JOIN 복잡도 증가 +```sql +-- 현재: 컬럼명이 달라서 복잡 +SELECT * FROM gmail_tokens g +JOIN slack_user_mapping s ON g.slack_id = s.slack_user_id +JOIN conversation_logs c ON s.slack_user_id = c.slack_user_id + +-- 목표: 모든 테이블 동일 컬럼명 +SELECT * FROM gmail_tokens g +JOIN slack_user_mapping s USING (slack_user_id) +JOIN conversation_logs c USING (slack_user_id) +``` + +--- + +## 3. 해결 방안 + +### 3.1 작업 순서 + +#### Phase 1: DB 스키마 변경 (51123 서버) +```sql +-- 1. 컬럼 추가 +ALTER TABLE gmail_tokens ADD COLUMN slack_user_id VARCHAR(100); + +-- 2. 데이터 복사 +UPDATE gmail_tokens SET slack_user_id = slack_id; + +-- 3. 제약조건 이동 +ALTER TABLE gmail_tokens DROP COLUMN slack_id; + +-- 4. 인덱스 재생성 +CREATE INDEX idx_gmail_tokens_slack_user_id ON gmail_tokens(slack_user_id); +``` + +#### Phase 2: 코드 수정 (로컬 개발자) +| 파일 | 수정 내용 | +|------|----------| +| auth-server/models.py | slack_id → slack_user_id | +| robeing-monitor/database.py | slack_id → slack_user_id | +| skill-email/db_client.py | slack_id → slack_user_id | + +#### Phase 3: 배치 매핑 (선택사항) +Slack ID를 가진 사용자를 UUID와 매핑하여 통합 관리 + +--- + +## 4. 현재 데이터 현황 + +### 4.1 영향받는 레코드 수 +```sql +-- gmail_tokens 테이블 +SELECT COUNT(*) FROM gmail_tokens WHERE slack_id IS NOT NULL; +-- 결과: 3건 (U091UNVE41M, U0925SXQFDK, U092F7FQ55L) + +-- slack_user_mapping 테이블 +SELECT COUNT(*) FROM slack_user_mapping; +-- 결과: 3건 (동일 사용자) +``` + +### 4.2 서비스별 영향 +| 서비스 | 영향도 | 수정 필요 | +|--------|--------|----------| +| auth-server | 높음 | Gmail 토큰 조회 로직 | +| robeing-monitor | 중간 | 토큰 관리 UI | +| skill-email | 높음 | 토큰 검증 로직 | +| rb8001 | 낮음 | 이미 slack_user_id 사용 | + +--- + +## 5. 위험 요소 및 대응 + +### 5.1 위험 요소 +- **서비스 중단**: 컬럼명 변경 중 API 오류 가능 +- **데이터 손실**: ALTER TABLE 실행 중 실수 +- **캐시 문제**: 기존 ORM 캐시가 old 컬럼명 참조 + +### 5.2 대응 방안 +1. **백업 우선**: `pg_dump main_db > backup_20250826.sql` +2. **점진적 마이그레이션**: 새 컬럼 추가 → 이중 운영 → 구 컬럼 제거 +3. **캐시 초기화**: Docker 재시작으로 ORM 캐시 클리어 + +--- + +## 6. 검증 계획 + +### 6.1 변경 전 테스트 +```sql +-- 데이터 무결성 확인 +SELECT COUNT(*) FROM gmail_tokens +WHERE slack_id IS NOT NULL AND slack_user_id IS NULL; +``` + +### 6.2 변경 후 검증 +- Gmail 토큰 조회 API 테스트 +- Slack 사용자 매핑 확인 +- JOIN 쿼리 성능 비교 + +--- + +## 7. 예상 효과 + +### 7.1 개발 효율성 +- **Before**: 테이블마다 다른 컬럼명 기억 필요 +- **After**: 모든 곳에서 `slack_user_id` 통일 + +### 7.2 쿼리 성능 +- **Before**: 복잡한 ON 조건 +- **After**: USING 절로 간단한 JOIN + +### 7.3 유지보수성 +- 신규 개발자 학습 곡선 감소 +- 버그 발생 가능성 감소 +- 코드 일관성 향상 + +--- + +## 8. 작업 체크리스트 + +- [ ] PostgreSQL 백업 수행 +- [ ] gmail_tokens 테이블 스키마 변경 +- [ ] 로컬 개발자에게 코드 수정 지시 +- [ ] 테스트 환경에서 검증 +- [ ] 프로덕션 배포 +- [ ] 모니터링 및 롤백 준비 + +--- + +## 9. 관련 문서 +- 원본: `/home/admin/DOCS/troubleshooting/250826_id_체계_정리_및_conversation_logs_문제_해결.md` +- 이 문서는 Slack ID 컬럼명 표준화 부분만 분리하여 작성됨 + +--- + +*작성 완료: 2025-08-26 21:30* \ No newline at end of file