# 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만 사용하여 데이터 일관성 확보 - 중복 저장 구조는 반드시 제거