- 250826_slack_id_column_standardization.md: 새 문서 생성 - gmail_tokens.slack_id → slack_user_id 변경 계획 - 테이블별 현황 및 영향도 분석 - 3단계 마이그레이션 전략 - 250826_id_체계_정리_및_conversation_logs_문제_해결.md: 참조 링크 추가
4.6 KiB
4.6 KiB
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 복잡도 증가
-- 현재: 컬럼명이 달라서 복잡
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 서버)
-- 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 영향받는 레코드 수
-- 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 대응 방안
- 백업 우선:
pg_dump main_db > backup_20250826.sql - 점진적 마이그레이션: 새 컬럼 추가 → 이중 운영 → 구 컬럼 제거
- 캐시 초기화: Docker 재시작으로 ORM 캐시 클리어
6. 검증 계획
6.1 변경 전 테스트
-- 데이터 무결성 확인
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