diff --git a/troubleshooting/250824_rb8001_daily_summary_cron_failure.md b/troubleshooting/250824_rb8001_daily_summary_cron_failure.md index 5ed9ae4..1f3fc3a 100644 --- a/troubleshooting/250824_rb8001_daily_summary_cron_failure.md +++ b/troubleshooting/250824_rb8001_daily_summary_cron_failure.md @@ -115,48 +115,29 @@ NameError: name 'datetime' is not defined --- -## 5. 해결 방안 +## 5. 현재 미해결 문제 -### 5.1 즉시 조치 (임시) -```bash -# skill-email 환경 변경 (database → file 모드) -cd /home/admin/ivada_project/skill_email -vi .env -# TOKEN_PROVIDER=file 로 변경 +### 5.1 Gmail 토큰 자동 갱신 실패 +**근본 원인**: auth-server의 timezone 버그 +- 파일: `/home/admin/auth-server/app/api/gmail_refresh.py:132` +- 문제: `datetime.now()`가 timezone-naive datetime 생성 +- 영향: DB에 UTC로 저장되어 8시간 전 시간으로 기록 (항상 만료 상태) -# 서비스 재시작 -docker compose down && docker compose up -d --build -``` - -### 5.2 근본 해결 - -#### 옵션 1: auth_db → main_db 마이그레이션 -```bash -# skill-email .env 수정 -DATABASE_URL=postgresql://robeings:robeings@localhost:5433/main_db - -# gmail_tokens 테이블이 main_db에 이미 존재하므로 정상 작동 예상 -``` - -#### 옵션 2: 51123 서버 직접 연결 -```bash -# SSH 터널 대신 직접 연결 -DATABASE_URL=postgresql://robeings:robeings@192.168.219.45:5432/main_db -``` - -#### 옵션 3: rb8001 내장 이메일 기능 사용 -- rb8001에 이미 통합된 email_integration.py 활용 -- skill-email 의존성 제거 - -### 5.3 코드 수정 필요 +**필요 조치**: ```python -# rb8001/main.py 상단에 추가 -import datetime +# 현재 (버그) +new_expiry = datetime.now() + timedelta(seconds=expires_in) -# 또는 -from datetime import datetime +# 수정 필요 +from datetime import timezone +new_expiry = datetime.now(timezone.utc) + timedelta(seconds=expires_in) ``` +### 5.2 자동 갱신 메커니즘 부재 +- 현재: 수동 API 호출만 가능 (`/api/gmail/refresh/{user_id}`) +- 필요: 크론잡 또는 스케줄러로 자동 갱신 +- 추천: 토큰 만료 1시간 전 자동 갱신 트리거 + --- ## 6. 검증 방법 @@ -245,18 +226,18 @@ docker exec robeing-gateway tail -f /var/log/cron.log - **auth_db → main_db 마이그레이션**: 완료 ✅ - **main_db gmail_tokens**: 테이블 존재, 토큰 데이터 NULL ❌ -### 조치 사항 (2025-08-25 00:12) -- **skill-email .env 수정**: - - 변경 전: `postgresql://robeings:robeings@192.168.219.45:5432/main_db` - - 변경 후: `postgresql://robeings:robeings@localhost:5433/main_db` -- **서비스 재시작**: docker compose 재빌드 완료 +### 해결된 사항 (2025-08-25 00:12) +- **skill-email DB 연결 문제**: ✅ 해결 + - .env 수정: `postgresql://robeings:robeings@localhost:5433/main_db` + - auth_db → main_db 마이그레이션 완료 + - 서비스 재시작 완료 -### 남은 문제 -- **Gmail OAuth 토큰 부재**: 모든 사용자의 token_data가 NULL - - b6ea2ee0 (전희재/U091UNVE41M): token_data = NULL - - 1e16e9d5 (김종태/U0925SXQFDK): token_data = NULL - - 69ae4ea9 (HanYong Hwang/U092F7FQ55L): token_data = NULL -- **해결 필요**: 사용자들이 프론트엔드에서 Gmail 재인증 필요 +### 현재 문제 상태 +- **모든 사용자 토큰 만료**: + - 0914eagle: 1일 8시간 전 만료 + - cdctfm: 1일 15시간 전 만료 + - happybell80: 1일 15시간 전 만료 +- **자동 갱신 실패**: refresh_token 존재하나 timezone 버그로 갱신 불가 ### 긴급도 - **높음**: 매일 오전 9시 사용자 영향 @@ -266,6 +247,19 @@ docker exec robeing-gateway tail -f /var/log/cron.log ## 11. OAuth 토큰 상태 검증 (2025-08-25 00:30) +### 토큰 갱신 API 테스트 +```bash +# API 호출 성공 +curl -X POST "http://localhost:9000/api/gmail/refresh/1e16e9d5-59f3-54da-a661-8abeabff4230" +# 응답: 200 OK, "status": "refreshed" + +# 그러나 DB 확인 시 여전히 만료 상태 +SELECT username, expiry FROM gmail_tokens WHERE username='happybell80'; +# expiry: 2025-08-24 16:30:10 (어제 시간으로 기록됨) +``` + +## 12. 토큰 자동 갱신 버그 분석 (2025-08-25 00:35) + ### DB 검증 결과 ```sql -- 토큰 데이터 확인 @@ -316,4 +310,36 @@ FROM gmail_tokens; --- +## 13. 필요한 조치사항 (로컬 개발자 액션) + +### 13.1 즉시 수정 필요 +1. **auth-server timezone 버그 수정** + - 파일: `/home/admin/auth-server/app/api/gmail_refresh.py` + - 라인: 132 + - 수정 코드: + ```python + # 현재 (버그) + new_expiry = datetime.now() + timedelta(seconds=expires_in) + + # 수정안 + from datetime import timezone + new_expiry = datetime.now(timezone.utc) + timedelta(seconds=expires_in) + ``` + +2. **토큰 자동 갱신 크론잡 구현** + - 매시간 만료 임박 토큰 체크 + - 만료 1시간 전 자동 갱신 + - 갱신 실패 시 알림 + +### 13.2 영향받는 서비스 +- rb8001 일일 요약 (매일 오전 9시) +- skill-email 이메일 조회 기능 +- 프론트엔드 Gmail 아이템 기능 + +### 13.3 긴급도 +- **매우 높음**: 모든 Gmail 관련 기능 작동 불가 +- 즉시 수정 및 배포 필요 + +--- + **문서 끝** \ No newline at end of file