DOCS/journey/troubleshooting/250926_happybell80_UUID_원칙_위반_email_integration.md
2025-12-17 18:51:06 +09:00

2.6 KiB

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 수정 (완료)

# 변경 전: 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_tokengmail_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}, /attachmentsuser_id를 UUID로 강제 (문자열 이메일/Slack ID 입력은 차단)
  • rb8001: skill-email 호출부에서 user_id(UUID)를 전달하도록 정리 (비-UUID 입력 의존 제거)

문서 끝