DOCS/journey/troubleshooting/250903_gmail_token_permission_denied_issue.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

2.8 KiB

Gmail 토큰 파일 권한 오류 - unknown_gmail.json

작성일: 2025-09-03

작성자: 51123 서버 관리자

상태: 해결 완료

영향: Gmail OAuth 토큰 교환 실패, 사용자 인증 불가


1. 오류 메시지

[Errno 13] Permission denied: '/code/tokens/unknown_gmail.json'

2. 문제 발생 환경

  • 서버: 51124 (192.168.219.52)
  • 서비스: skill-email (포트 8501)
  • 컨테이너: skill_email-skill-email
  • 경로: /code/tokens/ (Docker 컨테이너 내부)

3. 확인된 사실 (문서 기반)

  • 2025-08-25 DB 기반 토큰 저장으로 전환 완료 (마이그레이션 문서)
  • auth-server는 gmail_token 테이블에만 토큰 저장 (시퀀스 다이어그램)
  • skill-email은 DB에서 토큰 조회하도록 설계됨 (서비스 간 직접 전달 없음)
  • Docker 컨테이너 /code 디렉토리 쓰기 권한 없음 (에러 메시지)
  • access_token, refresh_token은 TEXT 타입으로 암호화 저장 (테이블 스키마)
  • skill-email이 401 에러 시 refresh_token으로 자체 갱신 (시퀀스 다이어그램)

4. 확인된 원인 (코드 분석)

auth-server 레거시 코드

  • 위치: auth-server/app/providers/gmail.py:134
  • 문제: DB 저장 후에도 파일 저장 시도하는 중복 로직
  • unknown 생성: 라인 88에서 state_data.get("user_id", "unknown") 사용
  • 파일 경로: /code/tokens/{user_id}_gmail.json 형식
  • 디렉토리 생성: 라인 132에서 os.makedirs 시도 → 권한 오류

skill-email 레거시 코드

  • 위치: skill-email/services/gmail_service.py:30-63 (FileCredentialsProvider)
  • 조건: TOKEN_PROVIDER != "database"면 파일 기반 사용 (main.py:62-65)
  • 경로 문제: ../auth-server/tokens 접근 시도 (Docker 환경에서 불가능)
  • DB Provider: db_credentials_provider.py는 정상 (DB 전용)

5. 해결된 문제

  • Gmail OAuth 토큰 저장 정상 작동
  • Permission denied 오류 해결
  • DB 전용 토큰 관리로 전환 완료

6. 수행된 작업

6.1 auth-server 수정 완료

  • 파일: auth-server/app/providers/gmail.py
  • 작업: 라인 127-136 파일 저장 코드 블록 삭제
  • 결과: DB 저장만 수행

6.2 skill-email 수정 완료

  • 파일1: skill-email/services/gmail_service.py
    • FileCredentialsProvider 클래스 완전 삭제
  • 파일2: skill-email/main.py
    • FileCredentialsProvider import 제거
    • TOKEN_PROVIDER 조건문 제거, DB provider 전용 사용

6.3 배포 및 재시작

  • 51124 서버: skill-email 컨테이너 재빌드 및 재시작
  • 최신 코드 반영 확인

7. 검증 완료

  1. 프론트엔드 Gmail OAuth 성공
  2. Permission denied 오류 없음
  3. unknown_gmail.json 생성 시도 없음
  4. gmail_token 테이블 정상 저장
  5. 파일 시스템 의존성 완전 제거