DOCS/troubleshooting/250721_happybell80_이메일스킬HTTP분리및아키텍처전환.md
happybell80 725ad0876c fix: 문서 파일 실행 권한 제거
- 모든 .md, .html 파일 권한을 644로 정상화
- .gitignore 파일 권한도 644로 수정
- 문서 파일에 실행 권한은 불필요하고 보안상 바람직하지 않음
- deprecated 아이디어 폴더 생성 및 레벨별 UI 변경 아이디어 이동
2025-08-18 00:37:51 +09:00

3.0 KiB

이메일 스킬 HTTP 분리 및 아키텍처 전환

날짜: 2025-07-21
작업자: happybell80 & Claude

오후 3시 30분

이메일 스킬 통합 문제 재발

배경:

  • 7/18 작업 후 여전히 인증 문제 발생
  • 'AuthCredentialsProvider' object has no attribute 'get_credentials' 에러

문제 분석:

  1. skill_email: FileCredentialsProvider 사용 (파일 기반)
  2. rb10508_test: 새로 만든 AuthCredentialsProvider (API 기반)
  3. 인터페이스 불일치로 에러 발생

초기 해결 시도:

  • FileCredentialsProvider로 전환
  • auth-server 토큰 폴더 마운트
  • 결과: 동기/비동기 문제 발생 (object Err can't be used in 'await' expression)

오후 4시 00분

근본적 아키텍처 문제 인식

문제점:

  • "빠른 개발"이라며 direct import 방식 채택
  • 결과적으로 더 많은 시간 소요 (경로 문제, 동기/비동기 문제 등)
  • 로빙의 핵심 철학(독립성, 모듈성) 위배

결정:

  • HTTP API 방식으로 전환
  • 스킬은 독립 서비스로 분리

오후 5시 00분

skill-email HTTP 서비스 구축

구현 내용:

  1. 포트 변경: 8100 → 8501
  2. Dockerfile 및 docker-compose.yml 생성
  3. nginx 프록시 설정 추가 (/skill-email/)

rb10508_test 단순화:

# Before: 111줄의 복잡한 코드
# After: 57줄의 단순한 HTTP 클라이언트
class EmailSkill:
    async def send_email(...):
        response = await client.post(f"{self.base_url}/send", ...)
        return response.json()

오후 6시 30분

API 엔드포인트 문제 해결

문제:

  • skill_email에 /messages 엔드포인트 없음
  • rb10508_test가 404 에러 받지만 "안읽은 이메일이 없습니다"로 표시

해결:

  1. skill_email에 /messages 엔드포인트 추가
  2. 에러 처리 개선

오후 7시 00분

토큰 파일 및 메타데이터 문제 해결

문제 1 - 토큰 파일:

  • 서버: test_gmail.json만 존재
  • 코드: happybell80_gmail.json 찾음
  • 해결: user_id를 "test"로 변경

문제 2 - 메타데이터 누락:

  • 모든 이메일이 "No subject", "Unknown"으로 표시
  • 원인: get_recent_messages가 ID만 반환
  • 해결: 각 메시지의 상세 정보 조회 추가

오후 7시 30분

최종 완성 및 테스트 성공

결과:

  • 실제 이메일 제목, 보낸이, 날짜 표시
  • 완전한 HTTP API 기반 통신
  • 로빙과 스킬 독립성 확보

아키텍처 개선:

기존: rb10508_test → (direct import) → skill_email
개선: rb10508_test → (HTTP API) → skill-email:8501

교훈 및 성과

교훈

  1. "빠른 개발"이 항상 빠르지 않음
  2. 아키텍처 원칙을 지키는 것이 장기적으로 이득
  3. 마이크로서비스는 처음부터 제대로 분리해야 함

성과

  • 코드 48% 감소 (111줄 → 57줄)
  • 의존성 완전 제거
  • 독립적 배포 가능
  • 확장 가능한 구조 확립

CLAUDE.md 업데이트

  • 스킬 포트 범위: 8501-8599
  • HTTP API 통신 원칙 명시
  • 직접 import 금지 규칙 추가