# Gmail Token 조회 실패 - slack_user_id 컬럼 없음 ## 현재 문제 (2025-09-18) - **증상**: Gmail 토큰 갱신 실패 → HTTP 500 에러 - **영향**: 3개 계정 (0914eagle@gmail.com, goeun2dc@gmail.com, cdctfm@gmail.com) - **원인**: 코드가 존재하지 않는 `slack_user_id` 컬럼 사용 ## 실제 상태 ### 코드 문제 ```python # 현재 코드 (잘못됨) cur.execute(""" SELECT ... FROM gmail_tokens WHERE slack_user_id = %s # 존재하지 않는 컬럼 """, (user_id,)) # 올바른 방법 cur.execute(""" SELECT gt.* FROM gmail_token gt JOIN user u ON gt.user_id = u.id WHERE u.oauth_id = %s AND gt.is_equipped = true """, (slack_id,)) ``` ### DB 스키마 (실제) ```sql CREATE TABLE gmail_token ( id UUID PRIMARY KEY, user_id UUID NOT NULL, -- user 테이블 FK token_data JSONB, -- access_token, refresh_token 포함 equipped_to VARCHAR(50), -- Gmail 계정 is_equipped BOOLEAN DEFAULT false ); -- user.oauth_id에 Slack ID 저장됨 ``` ## 토큰 자동 갱신 (정상 작동) ```python if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) self.creds_provider.save_credentials(user_id, creds) ``` ## 트러블슈팅 ### 토큰 조회 실패 - `slack_user_id` 컬럼 없음 → JOIN 사용 필요 - `is_equipped = true` 확인 ### 자동 갱신 실패 - `refresh_token` 존재 여부 - Google OAuth 설정 확인 ## 해결 방법 ### 수정 필요 파일 `/home/admin/ivada_project/skill_email/services/db_credentials_provider.py` - 68번 줄: get_credentials() - 170번 줄: save_credentials() - 234번 줄: has_equipped_token() ### 수정 내용 ```python # 기존 (잘못됨) WHERE slack_user_id = %s # 수정 (JOIN 사용) FROM gmail_token gt JOIN user u ON gt.user_id = u.id WHERE u.oauth_id = %s ``` ## 관련 문서 - [250831_skill-email_UUID_inconsistency_URGENT.md](./250831_happybell80_skill-email_UUID_inconsistency_URGENT.md)