From c90c3b1c99e099d65334f5bd14949db5d439d29b Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 3 Sep 2025 14:27:48 +0900 Subject: [PATCH] =?UTF-8?q?Gmail=20=ED=86=A0=ED=81=B0=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0=20=EC=99=84=EB=A3=8C?= =?UTF-8?q?=20-=20=EA=B2=80=EC=A6=9D=EB=90=9C=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=EB=A7=8C=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Permission denied 오류 해결 - 레거시 파일 저장 코드 제거 완료 - DB 전용 토큰 관리로 전환 - 프론트엔드 OAuth 테스트 성공 --- ...903_gmail_token_permission_denied_issue.md | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 troubleshooting/250903_gmail_token_permission_denied_issue.md diff --git a/troubleshooting/250903_gmail_token_permission_denied_issue.md b/troubleshooting/250903_gmail_token_permission_denied_issue.md new file mode 100644 index 0000000..59e49cc --- /dev/null +++ b/troubleshooting/250903_gmail_token_permission_denied_issue.md @@ -0,0 +1,71 @@ +# 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_tokens 테이블에만 토큰 저장 (시퀀스 다이어그램) +- 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_tokens 테이블 정상 저장 +5. ✅ 파일 시스템 의존성 완전 제거 \ No newline at end of file