fix: rb8001 크론잡 트러블슈팅 문서 개선 및 토큰 갱신 버그 분석 추가
- 해결된 부분과 미해결 문제 명확히 구분 - Gmail 토큰 자동 갱신 timezone 버그 상세 분석 추가 - auth-server의 datetime.now() UTC 처리 문제 - API는 정상 작동하나 expiry 필드 잘못 저장 - 로컬 개발자를 위한 즉시 수정 액션 아이템 추가 - app/api/gmail_refresh.py:132 수정 필요 - timezone.utc 사용 권장 - 불필요한 중복 해결책 제거, 현재 문제에 집중
This commit is contained in:
parent
52ea633cdb
commit
1d4fbf68c2
@ -115,48 +115,29 @@ NameError: name 'datetime' is not defined
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. 해결 방안
|
## 5. 현재 미해결 문제
|
||||||
|
|
||||||
### 5.1 즉시 조치 (임시)
|
### 5.1 Gmail 토큰 자동 갱신 실패
|
||||||
```bash
|
**근본 원인**: auth-server의 timezone 버그
|
||||||
# skill-email 환경 변경 (database → file 모드)
|
- 파일: `/home/admin/auth-server/app/api/gmail_refresh.py:132`
|
||||||
cd /home/admin/ivada_project/skill_email
|
- 문제: `datetime.now()`가 timezone-naive datetime 생성
|
||||||
vi .env
|
- 영향: DB에 UTC로 저장되어 8시간 전 시간으로 기록 (항상 만료 상태)
|
||||||
# TOKEN_PROVIDER=file 로 변경
|
|
||||||
|
|
||||||
# 서비스 재시작
|
**필요 조치**:
|
||||||
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
|
```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. 검증 방법
|
## 6. 검증 방법
|
||||||
@ -245,18 +226,18 @@ docker exec robeing-gateway tail -f /var/log/cron.log
|
|||||||
- **auth_db → main_db 마이그레이션**: 완료 ✅
|
- **auth_db → main_db 마이그레이션**: 완료 ✅
|
||||||
- **main_db gmail_tokens**: 테이블 존재, 토큰 데이터 NULL ❌
|
- **main_db gmail_tokens**: 테이블 존재, 토큰 데이터 NULL ❌
|
||||||
|
|
||||||
### 조치 사항 (2025-08-25 00:12)
|
### 해결된 사항 (2025-08-25 00:12)
|
||||||
- **skill-email .env 수정**:
|
- **skill-email DB 연결 문제**: ✅ 해결
|
||||||
- 변경 전: `postgresql://robeings:robeings@192.168.219.45:5432/main_db`
|
- .env 수정: `postgresql://robeings:robeings@localhost:5433/main_db`
|
||||||
- 변경 후: `postgresql://robeings:robeings@localhost:5433/main_db`
|
- auth_db → main_db 마이그레이션 완료
|
||||||
- **서비스 재시작**: docker compose 재빌드 완료
|
- 서비스 재시작 완료
|
||||||
|
|
||||||
### 남은 문제
|
### 현재 문제 상태
|
||||||
- **Gmail OAuth 토큰 부재**: 모든 사용자의 token_data가 NULL
|
- **모든 사용자 토큰 만료**:
|
||||||
- b6ea2ee0 (전희재/U091UNVE41M): token_data = NULL
|
- 0914eagle: 1일 8시간 전 만료
|
||||||
- 1e16e9d5 (김종태/U0925SXQFDK): token_data = NULL
|
- cdctfm: 1일 15시간 전 만료
|
||||||
- 69ae4ea9 (HanYong Hwang/U092F7FQ55L): token_data = NULL
|
- happybell80: 1일 15시간 전 만료
|
||||||
- **해결 필요**: 사용자들이 프론트엔드에서 Gmail 재인증 필요
|
- **자동 갱신 실패**: refresh_token 존재하나 timezone 버그로 갱신 불가
|
||||||
|
|
||||||
### 긴급도
|
### 긴급도
|
||||||
- **높음**: 매일 오전 9시 사용자 영향
|
- **높음**: 매일 오전 9시 사용자 영향
|
||||||
@ -266,6 +247,19 @@ docker exec robeing-gateway tail -f /var/log/cron.log
|
|||||||
|
|
||||||
## 11. OAuth 토큰 상태 검증 (2025-08-25 00:30)
|
## 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 검증 결과
|
### DB 검증 결과
|
||||||
```sql
|
```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 관련 기능 작동 불가
|
||||||
|
- 즉시 수정 및 배포 필요
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**문서 끝**
|
**문서 끝**
|
||||||
Loading…
x
Reference in New Issue
Block a user