6.6 KiB
6.6 KiB
Robeing Monitor 통합 작업 문서
작업 완료 사항 (2025-08-20)
1. UUID 변환 기능 구현
- 문제: Slack User ID (예: U091UNVE41M)와 PostgreSQL의 UUID 형식 불일치로 인한 데이터베이스 조회 실패
- 해결: 모든 서비스에 일관된 UUID 변환 로직 적용
namespace = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8') user_uuid = str(uuid.uuid5(namespace, slack_id))
수정된 파일들:
/home/heejae/robeing-monitor/app/api/items.py- UUID 변환 헬퍼 함수 추가/home/heejae/rb8001/app/skills/email_integration.py- UUID 변환 적용/home/heejae/skill-email/services/db_credentials_provider.py- UUID 변환 적용
2. Robeing Monitor API 확장
- 새 엔드포인트:
/api/items/gmail/{user_id}/token- skill-email이 Gmail 토큰 데이터를 가져올 수 있도록 지원
- Slack ID를 자동으로 UUID로 변환
- scopes를 JSON 배열로 파싱하여 반환
3. Skill-Email API Provider 구현
- 새 파일:
/home/heejae/skill-email/services/api_credentials_provider.py- robeing-monitor API를 통해 Gmail 자격증명을 가져오는 Provider
- 기존 DB 직접 연결 방식을 API 호출로 대체
- Result 타입 시스템과 호환되도록 구현
4. 환경 설정 변경
- skill-email/docker-compose.yml:
environment: - TOKEN_PROVIDER=api - ROBEING_MONITOR_URL=http://localhost:9024 - robeing-monitor/.env:
DATABASE_URL=postgresql://robeings:robeings@localhost:5433/main_db
현재 아키텍처
[rb8001] ─────> [skill-email] ─────> [robeing-monitor] ─────> [PostgreSQL]
│ │ │ │
│ │ │ │
└─ Slack ID ──────┴───── API 호출 ────────┴─── UUID 변환 ───────┘
데이터 흐름:
- rb8001이 Slack User ID로 skill-email 호출
- skill-email이 robeing-monitor API 호출 (Slack ID 전달)
- robeing-monitor가 Slack ID를 UUID로 변환
- PostgreSQL에서 데이터 조회 후 반환
해결된 문제들
-
UUID 타입 에러: "invalid input syntax for type uuid: 'U091UNVE41M'"
- 모든 서비스에서 일관된 UUID 변환 적용으로 해결
-
데이터베이스 연결 문제:
- SSH 터널 설정 (localhost:5433 → 124.55.18.179:5432)
- 올바른 데이터베이스 이름 사용 (main_db)
-
Scopes 파싱 문제:
- PostgreSQL에 문자열로 저장된 scopes를 JSON 배열로 변환
2025-08-28 추가 활용
로빙 레벨 문제 해결
- 문제: rb8001이 하드코딩된 레벨 1 반환
- 해결: robeing-monitor의
/api/stats/{robeing_id}활용 - 필요 작업:
- 51124: state_service를 main.py에 /api 경로로 마운트
app.mount("/api", state_service.app) # /healthz 충돌 방지 - 51123: Gateway에서 로빙 모니터 API 호출로 변경
- 51124: state_service를 main.py에 /api 경로로 마운트
- 효과: DB의 실제 레벨(20) 표시
남은 작업 사항
1. 토큰 갱신 메커니즘
- 현재 상태: Gmail access token이 만료됨
- 필요 작업:
- OAuth 재인증 플로우 구현
- Refresh token을 사용한 자동 갱신 로직
- robeing-monitor에 토큰 업데이트 API 추가
2. 에러 처리 개선
- 필요 작업:
- 토큰 만료 시 사용자에게 재인증 안내
- Slack에서 "죄송합니다" 대신 구체적인 오류 메시지 표시
- 재시도 로직 구현
3. 모니터링 및 로깅
- 필요 작업:
- API 호출 성공/실패 메트릭 수집
- 토큰 만료 예측 및 사전 알림
- 감사 로그 (gmail_audit_logs 테이블) 활용
4. 성능 최적화
- 고려 사항:
- API 호출 캐싱
- 연결 풀링 최적화
- 불필요한 UUID 변환 최소화
SSH 터널 및 PostgreSQL 접속
SSH 터널 설정
# SSH 터널 시작
sshpass -p "19800508" ssh -o StrictHostKeyChecking=no -f -N -L 5433:localhost:5432 admin@124.55.18.179 -p 51123
# 터널 확인
nc -zv localhost 5433
# 터널 프로세스 확인
pgrep -f "ssh.*5433:localhost:5432"
PostgreSQL 접속
# SSH를 통한 원격 실행
sshpass -p "19800508" ssh -o StrictHostKeyChecking=no admin@124.55.18.179 -p 51123 "PGPASSWORD=robeings psql -h localhost -U robeings -d main_db -c 'SELECT * FROM gmail_tokens'"
# 로컬 터널을 통한 접속 (psql 클라이언트 필요)
PGPASSWORD=robeings psql -h localhost -p 5433 -U robeings -d main_db
주요 테이블
gmail_tokens: Gmail OAuth 토큰 저장gmail_audit_logs: Gmail 작업 감사 로그robeing_stats: Robeing 레벨 정보slack_user_mapping: Slack-UUID 매핑 (현재 미사용)
테스트 명령어
Robeing Monitor API 테스트
# Gmail 아이템 조회
curl -s http://localhost:9024/api/items/gmail -H "X-User-Id: U091UNVE41M" | python3 -m json.tool
# 토큰 데이터 조회
curl -s http://localhost:9024/api/items/gmail/U091UNVE41M/token -H "X-User-Id: U091UNVE41M" | python3 -m json.tool
Skill-Email 테스트
# 이메일 전송 테스트
curl -X POST http://localhost:8501/send \
-H "Content-Type: application/json" \
-d '{
"to": "test@example.com",
"subject": "Test",
"body": "Test email",
"user_id": "U091UNVE41M"
}'
Docker 관리
Robeing Monitor
cd /home/heejae/robeing-monitor
docker compose down && docker compose up -d --build
docker logs robeing_monitor --tail 50
Skill-Email
cd /home/heejae/skill-email
docker compose down && docker compose up -d --build
docker logs skill-email --tail 50
중요 참고사항
-
UUID Namespace: 모든 서비스에서 동일한 namespace UUID 사용 필수
6ba7b810-9dad-11d1-80b4-00c04fd430c8
-
데이터베이스:
- 실제 데이터는
main_db에 저장됨 auth_db는 존재하지 않음
- 실제 데이터는
-
포트 정보:
- robeing-monitor: 9024
- skill-email: 8501
- PostgreSQL (SSH tunnel): 5433
-
환경변수 우선순위:
- Docker 컨테이너는 .env 파일과 docker-compose.yml의 environment 섹션 모두 참조
- 재빌드 필요 시
docker compose down && docker compose up -d --build실행
다음 단계 권장사항
-
즉시 필요:
- Gmail OAuth 토큰 재인증 구현
- 토큰 자동 갱신 메커니즘
-
단기 개선:
- 에러 메시지 개선
- 로깅 시스템 강화
-
장기 개선:
- 마이크로서비스 간 통신 표준화
- API Gateway 패턴 고려
- 중앙 집중식 인증/인가 시스템