# Auth Server 구축 및 Email Skill 클린 아키텍처 리팩토링 **날짜**: 2025-07-17 **작업자**: happybell80 & Claude ## 오후 5시 37분 ### Gmail OAuth 구현 및 파일 기반 토큰 저장 **배경**: - email skill을 사용하기 위해 Gmail OAuth 인증 필요 - 중앙 인증 서버(auth.ro-being.com) 구축하여 토큰 관리 **주요 작업 내용**: 1. **초기 상태 확인** - auth-server 컨테이너는 실행 중이었으나 Gmail OAuth 구현 안됨 - 서버와 로컬 코드 불일치 (서버에 placeholder만 존재) 2. **Google OAuth 설정 문제** - Google Client Secret이 실제 값이 아님 - OAuth consent screen이 테스트 모드 - 테스트 사용자 추가 필요 (goeun2dc@gmail.com, happybell80@naver.com) 3. **Scope 문제 해결** - Google이 scope 순서를 자동 변경하여 오류 발생 - 처음 시도: openid, email scope 추가 → 실패 - 해결: gmail.modify scope 사용 (읽기/쓰기/전송 모두 포함) - 최종 해결: requests.post()로 직접 토큰 교환하여 scope 검증 우회 4. **파일 권한 문제** - `/code/tokens` 디렉토리 권한 부족으로 토큰 저장 실패 - 해결: `chmod 777 tokens`로 모든 권한 부여 5. **구현 내용** - 파일 기반 토큰 저장 (`/code/tokens/{user_id}_gmail.json`) - status API: 토큰 상태 확인 - tokens API: 저장된 토큰 조회 - aiofiles 패키지 추가 **최종 결과**: - Gmail OAuth 인증 성공 - 토큰 파일 생성 및 저장 완료 - Access Token과 Refresh Token 모두 획득 - auth-server API 정상 작동 **다음 단계**: - email skill과 auth-server 연동 - PostgreSQL 기반 영구 저장소 구현 ## 오후 10시 00분 ### Email Skill 클린 아키텍처 리팩토링 **배경**: - Email skill이 절차형 코드로 작성되어 테스트와 확장이 어려움 - 로빙 프로젝트의 함수형 프로그래밍 패러다임과 불일치 - 비즈니스 로직과 API 레이어가 혼재 **주요 리팩토링 작업**: 1. **아키텍처 개선** - 비즈니스 로직을 `GmailService` 클래스로 분리 - `CredentialsProvider` 인터페이스로 토큰 제공자 추상화 - FastAPI 의존성 주입 패턴 적용 2. **함수형 프로그래밍 적용** - `Result[T, E]` 타입으로 성공/실패 명시적 처리 - 순수 함수와 부작용(IO) 분리 - 불변 데이터 구조 사용 (`@dataclass(frozen=True)`) 3. **테스트 코드 작성** - 단위 테스트: `test_gmail_service.py` (서비스 로직) - 통합 테스트: `test_api.py` (API 엔드포인트) - Mock 객체로 외부 의존성 격리 4. **코드 정리** - 중복 파일 제거 (read_email.py, send_email.py 등) - 함수형 실험 파일 통합 완료 - README 업데이트 및 .gitignore 추가 **최종 파일 구조**: ``` skill_email/ ├── main.py # FastAPI 애플리케이션 (리팩토링됨) ├── functional_types.py # Result, IO 등 함수형 타입 ├── services/ │ └── gmail_service.py # Gmail 비즈니스 로직 └── tests/ ├── test_gmail_service.py # 서비스 단위 테스트 └── test_api.py # API 통합 테스트 ``` **테스트 결과**: - 12/13 테스트 통과 (92% 성공률) - API 서버 정상 작동 (http://localhost:8100) - 실제 이메일 전송 성공 (Message ID: 198184a9bd05587a) - auth-server 토큰으로 Gmail API 정상 연동 **기술적 성과**: - 테스트 가능한 구조로 개선 (Mock 주입) - 확장 가능한 설계 (Provider 패턴) - 타입 안전성 확보 (Result 패턴) - 로빙 프로젝트 함수형 철학 구현 **개발 프로세스**: - happybell80 브랜치로 작업 - 상세한 PR 작성 및 코드 리뷰 준비 - 서버에서 실제 환경 테스트 완료 **다음 계획**: - PostgreSQL 기반 토큰 저장소 구현 (`DbCredentialsProvider`) - 토큰 자동 갱신 로직 추가 - 로빙과 연동 (rb10508_test에서 email skill 호출)