From 1d4fbf68c2ae5534429fecb66d18f1c1b11a4433 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 25 Aug 2025 00:38:33 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20rb8001=20=ED=81=AC=EB=A1=A0=EC=9E=A1=20?= =?UTF-8?q?=ED=8A=B8=EB=9F=AC=EB=B8=94=EC=8A=88=ED=8C=85=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20=ED=86=A0=ED=81=B0?= =?UTF-8?q?=20=EA=B0=B1=EC=8B=A0=20=EB=B2=84=EA=B7=B8=20=EB=B6=84=EC=84=9D?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 해결된 부분과 미해결 문제 명확히 구분 - Gmail 토큰 자동 갱신 timezone 버그 상세 분석 추가 - auth-server의 datetime.now() UTC 처리 문제 - API는 정상 작동하나 expiry 필드 잘못 저장 - 로컬 개발자를 위한 즉시 수정 액션 아이템 추가 - app/api/gmail_refresh.py:132 수정 필요 - timezone.utc 사용 권장 - 불필요한 중복 해결책 제거, 현재 문제에 집중 --- ...50824_rb8001_daily_summary_cron_failure.md | 120 +++++++++++------- 1 file changed, 73 insertions(+), 47 deletions(-) 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