DOCS/troubleshooting/250817_robeing_monitor_integration.md
happybell80 bb0e2715b6 docs: 문서 재구성 및 정리
- gmail-token-slack-id-migration.md → troubleshooting/250825_gmail_token_slack_id_migration.md
- postgresql_ssh_tunnel_guide.md → 300_architecture/database/250820_postgresql_ssh_tunnel_guide.md
- robeing-monitor-integration.md → troubleshooting/250817_robeing_monitor_integration.md

날짜 prefix 추가 및 적절한 디렉토리로 이동
2025-08-26 00:27:45 +09:00

6.1 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 변환 ───────┘

데이터 흐름:

  1. rb8001이 Slack User ID로 skill-email 호출
  2. skill-email이 robeing-monitor API 호출 (Slack ID 전달)
  3. robeing-monitor가 Slack ID를 UUID로 변환
  4. PostgreSQL에서 데이터 조회 후 반환

해결된 문제들

  1. UUID 타입 에러: "invalid input syntax for type uuid: 'U091UNVE41M'"

    • 모든 서비스에서 일관된 UUID 변환 적용으로 해결
  2. 데이터베이스 연결 문제:

    • SSH 터널 설정 (localhost:5433 → 124.55.18.179:5432)
    • 올바른 데이터베이스 이름 사용 (main_db)
  3. Scopes 파싱 문제:

    • PostgreSQL에 문자열로 저장된 scopes를 JSON 배열로 변환

남은 작업 사항

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

중요 참고사항

  1. UUID Namespace: 모든 서비스에서 동일한 namespace UUID 사용 필수

    • 6ba7b810-9dad-11d1-80b4-00c04fd430c8
  2. 데이터베이스:

    • 실제 데이터는 main_db에 저장됨
    • auth_db는 존재하지 않음
  3. 포트 정보:

    • robeing-monitor: 9024
    • skill-email: 8501
    • PostgreSQL (SSH tunnel): 5433
  4. 환경변수 우선순위:

    • Docker 컨테이너는 .env 파일과 docker-compose.yml의 environment 섹션 모두 참조
    • 재빌드 필요 시 docker compose down && docker compose up -d --build 실행

다음 단계 권장사항

  1. 즉시 필요:

    • Gmail OAuth 토큰 재인증 구현
    • 토큰 자동 갱신 메커니즘
  2. 단기 개선:

    • 에러 메시지 개선
    • 로깅 시스템 강화
  3. 장기 개선:

    • 마이크로서비스 간 통신 표준화
    • API Gateway 패턴 고려
    • 중앙 집중식 인증/인가 시스템