- 모든 .md, .html 파일 권한을 644로 정상화 - .gitignore 파일 권한도 644로 수정 - 문서 파일에 실행 권한은 불필요하고 보안상 바람직하지 않음 - deprecated 아이디어 폴더 생성 및 레벨별 UI 변경 아이디어 이동
3.0 KiB
3.0 KiB
이메일 스킬 HTTP 분리 및 아키텍처 전환
날짜: 2025-07-21
작업자: happybell80 & Claude
오후 3시 30분
이메일 스킬 통합 문제 재발
배경:
- 7/18 작업 후 여전히 인증 문제 발생
'AuthCredentialsProvider' object has no attribute 'get_credentials'에러
문제 분석:
- skill_email:
FileCredentialsProvider사용 (파일 기반) - rb10508_test: 새로 만든
AuthCredentialsProvider(API 기반) - 인터페이스 불일치로 에러 발생
초기 해결 시도:
- FileCredentialsProvider로 전환
- auth-server 토큰 폴더 마운트
- 결과: 동기/비동기 문제 발생 (
object Err can't be used in 'await' expression)
오후 4시 00분
근본적 아키텍처 문제 인식
문제점:
- "빠른 개발"이라며 direct import 방식 채택
- 결과적으로 더 많은 시간 소요 (경로 문제, 동기/비동기 문제 등)
- 로빙의 핵심 철학(독립성, 모듈성) 위배
결정:
- HTTP API 방식으로 전환
- 스킬은 독립 서비스로 분리
오후 5시 00분
skill-email HTTP 서비스 구축
구현 내용:
- 포트 변경: 8100 → 8501
- Dockerfile 및 docker-compose.yml 생성
- 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 에러 받지만 "안읽은 이메일이 없습니다"로 표시
해결:
- skill_email에
/messages엔드포인트 추가 - 에러 처리 개선
오후 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
교훈 및 성과
교훈
- "빠른 개발"이 항상 빠르지 않음
- 아키텍처 원칙을 지키는 것이 장기적으로 이득
- 마이크로서비스는 처음부터 제대로 분리해야 함
성과
- 코드 48% 감소 (111줄 → 57줄)
- 의존성 완전 제거
- 독립적 배포 가능
- 확장 가능한 구조 확립
CLAUDE.md 업데이트
- 스킬 포트 범위: 8501-8599
- HTTP API 통신 원칙 명시
- 직접 import 금지 규칙 추가