DOCS/troubleshooting/250909_happybell80_gmail_refresh_token_불일치.md
happybell80 cf7e7cc6f5 Fix: Gmail 토큰 문서 JSONB 전용으로 정리
- 임시 DB 동기화 방안 제거
- JSONB 전용 전환 방향으로 통일
- 교훈 부분 간소화 (52줄)
2025-09-10 00:31:19 +09:00

52 lines
1.4 KiB
Markdown

# Gmail refresh_token 컬럼/JSONB 불일치 문제
**작성일**: 2025-09-09
**작성자**: happybell80 & Claude
**영향 서비스**: skill-email, auth-server
## 문제 상황
Gmail 토큰 테이블에서 refresh_token이 두 곳에 저장:
- `refresh_token` 컬럼 (오래된 무효 토큰)
- `token_data` JSONB (실제 유효 토큰)
## 발견 과정
```python
# refresh_token 컬럼 토큰 테스트
토큰: 1//0g53CfEfA9Pw6...
결과: 400 invalid_grant (만료/무효)
# token_data JSONB 토큰 테스트
토큰: 1//0glv3xMaPHgvW...
결과: 200 OK (정상 작동)
```
## DB 현황 (23:36 갱신)
김종태: token_data와 컬럼 불일치 (다른 토큰)
Heejae: 양쪽 일치 (동일 토큰)
HanYong: token_data 비어있음 (8/30 이후)
## 코드 분석
### skill-email (문제)
- 63번: refresh_token 컬럼 조회 → 무효 토큰 사용
- 166번: 컬럼만 업데이트 → JSONB 동기화 안됨
### auth-server (정상)
- token_data JSONB 사용 중
## 해결 방안
```sql
-- skill-email 코드 JSONB 전용으로 수정
-- 63번: token_data->>'refresh_token' as refresh_token
-- 166번: token_data = jsonb_set(...) 사용
-- 개별 컬럼 삭제 (코드 수정 후)
ALTER TABLE gmail_tokens
DROP COLUMN access_token,
DROP COLUMN refresh_token,
DROP COLUMN token_type,
DROP COLUMN expires_at;
```
## 교훈
- JSONB만 사용하여 데이터 일관성 확보
- 중복 저장 구조는 반드시 제거