# UUID 원칙 위반 - email_integration 및 skill-email 서비스 ## 작성일: 2025-09-26 ## 작성자: happybell80 --- ## 문제 상황 ### 핵심 문제 "모든 내부 로직은 UUID만 사용" 원칙(250924 문서)을 위반하여 Slack ID와 UUID 혼용 ### 발견된 위반 사항 #### 1. rb8001/app/skills/email_integration.py - **잘못된 테이블명**: `gmail_token` → 실제는 `gmail_token` - **Slack ID 사용**: skill-email 호출 시 Slack ID 전달 - **미정의 변수**: `user_uuid` 변수 정의 없이 사용 (136줄) #### 2. skill-email 서비스 - **이중 처리**: UUID와 Slack ID 모두 받아서 처리 - **DB 쿼리 분기**: UUID인지 Slack ID인지 판단 후 다른 쿼리 실행 - **oauth_id 조회**: Slack ID로 user 테이블의 oauth_id 조회 ## 원칙 재확인 ### UUID 중심 원칙 (250924 문서) - 모든 내부 로직은 UUID만 사용 - Gateway가 UUID 변환 책임 - UUID 없으면 403 차단 ## 수정 내역 ### rb8001 수정 (완료) ```python # 변경 전: Slack ID 직접 사용 slack_id = user_id # 변경 후: UUID 원칙 적용 if user_id.startswith('U'): user_uuid = await self.get_uuid_from_slack(user_id) else: user_uuid = user_id ``` ### 테이블명 수정 (완료) - `gmail_token` → `gmail_token` - `SELECT COUNT(*) FROM gmail_token WHERE user_id = %s` ## 남은 작업 ### skill-email 서비스 수정 필요 1. **(완료) main.py / routers/**: `user_id`를 UUID로 강제 (비-UUID는 4xx) 2. **(진행 필요) db_credentials_provider.py**: Slack ID 처리 제거, UUID만 받기 3. **(완료) naverworks_provider.py**: UUID만 허용 (비-UUID는 에러) ### 영향 범위 - rb8001: email_integration.py - skill-email: 전체 provider 및 API - DB: gmail_token, naverworks_token 테이블 쿼리 ## 테이블 스키마 확인 (tables.md 기준) ### gmail_token (s 없음!) | 컬럼명 | 타입 | 설명 | |--------|------|------| | user_id | UUID | user 테이블 참조 | | is_equipped | BOOLEAN | 장착 상태 | ### naverworks_token | 컬럼명 | 타입 | 설명 | |--------|------|------| | user_id | UUID | user 테이블 참조 | ## 교훈 1. **원칙 준수**: "내부 로직은 UUID만 사용" 원칙 철저히 준수 2. **테이블명 확인**: 문서(tables.md) 참조하여 정확한 테이블명 사용 3. **일관성**: 모든 서비스가 동일한 ID 체계 사용 --- ## 2025-12-17 후속 업데이트 - **skill-email**: `/messages`, `/messages/{id}`, `/attachments`의 `user_id`를 UUID로 강제 (문자열 이메일/Slack ID 입력은 차단) - **rb8001**: skill-email 호출부에서 `user_id(UUID)`를 전달하도록 정리 (비-UUID 입력 의존 제거) --- **문서 끝**