From 591e1c5983a997787e68d2d734917ed4f667088f Mon Sep 17 00:00:00 2001 From: happybell80 Date: Fri, 18 Jul 2025 19:24:54 +0900 Subject: [PATCH] Add troubleshooting: Email skill integration and skill architecture design - Document email skill integration attempts - Explain skill architecture philosophy - Record path and network issues discovered - Provide solutions for server deployment --- ...l_통합_및_스킬_아키텍처_설계.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/troubleshooting/250718_happybell80_email_skill_통합_및_스킬_아키텍처_설계.md diff --git a/docs/troubleshooting/250718_happybell80_email_skill_통합_및_스킬_아키텍처_설계.md b/docs/troubleshooting/250718_happybell80_email_skill_통합_및_스킬_아키텍처_설계.md new file mode 100644 index 0000000..23f03e0 --- /dev/null +++ b/docs/troubleshooting/250718_happybell80_email_skill_통합_및_스킬_아키텍처_설계.md @@ -0,0 +1,73 @@ +# Email Skill 통합 및 스킬 아키텍처 설계 + +**날짜**: 2025-07-18 +**작업자**: happybell80 & Claude + +## 오후 7시 24분 + +### Email Skill을 rb10508_test에 통합 + +**배경**: +- 로빙이 이메일 기능을 사용하려면 email skill 통합 필요 +- 초기에는 별도 서비스(포트 8100)로 구상했으나 아키텍처 재검토 + +**스킬 아키텍처 철학 정립**: +1. **스킬의 정의**: 로빙이 레벨업할 때 획득하는 내재화된 기능 +2. **컨테이너 외부 배치**: 100개의 로빙이 하나의 스킬 서비스 공유 +3. **마이크로서비스 패턴**: 각 스킬은 독립 포트에서 실행 +4. **스킬 레지스트리**: 중앙에서 스킬 위치 및 상태 관리 + +**구현 과정**: + +1. **초기 시도 - HTTP 클라이언트 방식** + ```python + # app/skills/email_skill.py + class EmailSkill: + def __init__(self): + self.base_url = "http://localhost:8100" + ``` + - 문제: skill_email 서비스가 실행되지 않아 연결 실패 + +2. **아키텍처 재검토** + - 질문: "로빙 내부에 스킬을 탑재한 이유가 없잖아" + - 결론: 직접 import 방식으로 전환 + +3. **최종 구현 - Direct Import 방식** + ```python + # skill_email 경로 추가 + sys.path.append('/home/happybell/projects/ivada/skill_email') + + # GmailService 직접 사용 + from services.gmail_service import GmailService + ``` + +**문제점 발견**: +1. **경로 하드코딩**: 로컬 개발 경로가 코드에 고정 +2. **Docker 네트워크 격리**: localhost:9000 접근 불가 +3. **모듈 import 실패**: 서버 경로와 로컬 경로 불일치 + +**해결 방안**: +```python +# 환경변수 사용 +SKILL_EMAIL_PATH = os.environ.get('SKILL_EMAIL_PATH', '/home/admin/skill_email') +AUTH_SERVER_URL = os.environ.get('AUTH_SERVER_URL', 'http://auth-server:9000') +``` + +**Docker 설정 필요**: +```yaml +volumes: + - /home/admin/skill_email:/code/skill_email:ro +environment: + - SKILL_EMAIL_PATH=/code/skill_email + - AUTH_SERVER_URL=http://localhost:9000 # host 모드 +``` + +**다음 작업**: +- 서버에서 경로 문제 해결 +- Docker 볼륨 마운트 설정 +- 환경변수 기반 설정으로 코드 수정 + +**교훈**: +- 개발 환경과 서버 환경의 차이 고려 필수 +- 하드코딩된 경로는 항상 문제 발생 +- 스킬 아키텍처는 단계적으로 구현 (현재는 import, 향후 마이크로서비스) \ No newline at end of file