# 기술 부채 정리 ## 작성일: 2025년 8월 31일 ## 최종 수정: 2025년 9월 4일 ## 250831 Slack OAuth 구현 완료 후 남은 과제 ### 1. 임시 코드 방식 통일 🔴 **현재 상황**: - Gmail 로그인: 임시 코드 → `/auth/verify` → JWT - Slack 로그인: 임시 코드 → `/auth/verify` → JWT - 프론트엔드가 통일된 방식 사용 중 **문제점**: - 임시 코드 사용이 불필요한 복잡도 추가 - Redis 의존성 증가 - 60초 TTL로 인한 타이밍 이슈 가능성 **개선 방안**: ```javascript // Option 1: JWT 직접 전달 (보안 검토) return RedirectResponse(f"{redirect_uri}#token={jwt_token}") // Option 2: Secure cookie 사용 response = RedirectResponse(redirect_uri) response.set_cookie("auth_token", jwt_token, secure=True, httponly=True) ``` ### ✅ python-multipart 의존성 이슈 해결 완료 **해결일**: 2025-09-04 **해결 방법**: - `requirements.txt`에 `python-multipart>=0.0.6` 추가 완료 - Docker 이미지 재빌드 완료 - 의존성 확인 완료 ## 2. 긴급 해결 사항 🔴 ### ✅ Git Merge Conflict 해결 완료 **해결일**: 2025-08-31 16:15 **해결 방법**: - rebase 대신 merge 전략으로 변경 - `git config pull.rebase false` 설정 - 충돌 파일 수동 병합 후 push 완료 - 커밋: `5bb14a6` - merge: Slack OAuth implementation with upstream changes ### DB 스키마 불일치 **문제**: - `companies` 테이블 vs `workspaces` 테이블 공존 - `SlackWorkspace` 모델이 잘못된 FK 참조 - Relationship 주석 처리로 임시 해결 중 **현재 상태**: ```sql -- 실제 DB slack_workspaces.company_id → companies.id workspace_members.workspace_id → workspaces.id -- 모델 파일 (잘못됨) SlackWorkspace.workspace_id → workspaces.id (실제로는 company_id) ``` **해결 계획**: 1. 데이터 백업 2. companies 데이터를 workspaces로 마이그레이션 3. FK 관계 재설정 4. 모델 파일 통일 ### 3. 환경 변수 하드코딩 제거 🟡 **현재 하드코딩된 값들**: ```python # app/providers/slack.py login_callback_url = "https://auth.ro-being.com/auth/slack/login/callback" # Line 175 redirect_uri = state_info.get("redirect_uri", "http://localhost:3000") # Line 268 # frontend-customer/src/contexts/auth-context.tsx fetch('https://auth.ro-being.com/auth/verify', { # Line 79 ``` **개선 방안**: - 환경변수로 추출 - 개발/스테이징/프로덕션 환경 분리 ### 4. 사용자 매핑 로직 개선 🟡 **현재 로직**: 1. slack_user_mapping 확인 2. 없으면 email로 사용자 조회 3. 없으면 새 사용자 생성 **문제점**: - email이 변경되면 중복 계정 생성 가능 - workspace 없이 로그인 시 매핑 생성 불가 - username 생성 로직이 분산됨 **개선 방안**: ```python # 통합 사용자 식별 서비스 필요 class UserIdentityService: def find_or_create_user(provider, provider_id, email, metadata) def link_accounts(user_id, provider, provider_id) def merge_duplicate_users(primary_id, duplicate_ids) ``` ## 3. 중요도 높음 🟡 ### ✅ Frontend-Backend 인증 방식 불일치 해결 완료 **해결일**: 2025-08-31 16:25 **해결 방법**: - 프론트엔드 코드 수정하여 `/auth/verify` 엔드포인트 사용 - Gmail과 Slack 모두 동일한 임시 코드 방식으로 통일 - 커밋: `4cd28f1` - fix: Slack OAuth 로그인 ### Frontend-Backend 인증 방식 최종 개선 **현재 상태**: - Frontend: Gmail 방식 (`/auth/verify` 임시 코드) - Slack: JWT 직접 전달 계획 → 임시 코드로 변경 ## 250904 해결된 인프라 문제 ✅ ### Redis - **Redis 키 TTL**: 자동 만료 정상 작동 중, 만료된 키 없음 확인 - **oauth:state 키**: 60초 TTL 정상 작동 ### PostgreSQL - **테이블 소유권**: 모든 테이블 robeings 사용자 소유 확인 완료 - **테이블 목록**: companies, conversation_logs, gmail_audit_logs, gmail_tokens 등 ### Docker & 로그 - **로그 모니터링**: /mnt/hdd/logs/ 구조화 저장 중 - **로그 정리**: 매일 새벽 4시 자동 실행, 30일 보관 - **Docker 이미지 정리**: 2025-09-04 dangling 이미지 39개 제거 (3.9GB 회수) ### 환경변수 - **Frontend**: VITE_AUTH_SERVER_URL 환경변수 사용 중 - **auth-server**: .env 파일로 관리 중 ### Git 설정 - **pull.rebase**: false 설정 완료 (2025-09-04) - **전략**: merge 방식으로 통일 - **적용 범위**: 51123 admin, 51124 admin, happybell80 ## 4. 250831 작업 요약 ### 완료된 작업 ✅ 1. **Slack OAuth 2.0 (OIDC) 로그인 구현** - `/auth/slack/login` 엔드포인트 구현 - `/auth/slack/login/callback` POST/GET 지원 - JWT 토큰 발급 (30일 유효기간) - Redis 임시 코드 저장 (60초 TTL) 2. **사용자 매핑 시스템** - slack_user_mapping 테이블 활용 - 하이브리드 접근: Slack ID → Email fallback - 자동 사용자 생성 3. **프론트엔드 통합** - auth-context.tsx 수정 - `/auth/verify` 엔드포인트 사용 - Gmail과 동일한 방식으로 통일 4. **배포 및 운영** - ✅ python-multipart 의존성 추가 (2025-09-04 완료) - Docker 이미지 재빌드 - ✅ nginx 권한 문제 해결 (2025-09-04 확인 - 644 권한 정상) ### 미해결 과제 📋 1. **기술 부채** - 임시 코드 방식 제거 검토 - DB 스키마 통일 (companies → workspaces) 2. **개선 사항** - 사용자 통합 인증 서비스 - OAuth 토큰 갱신 로직 - 에러 핸들링 강화 3. **문서화** - API 문서 업데이트 - 배포 가이드 작성 - 트러블슈팅 가이드 추가 **영향**: - 불필요한 Redis 호출 - 60초 시간 제한 - 복잡한 인증 플로우 **해결 방법**: 1. Frontend `auth-context.tsx` 수정 - JWT 직접 처리 로직 구현 - Provider별 분기 처리 2. 또는 통합 인증 서비스 구현 ### 하드코딩된 설정값 **위치 및 내용**: ```python # /home/admin/auth-server/app/providers/slack.py redirect_uri = "http://localhost:3000" # 하드코딩 login_callback_url = "https://auth.ro-being.com/auth/slack/login/callback" # docker-compose.yml DATABASE_URL=postgresql://robeings:robeings@192.168.219.45/main_db ``` **해결**: - `.env` 파일로 이동 - 환경별 설정 분리 (dev/staging/prod) ## 3. 개선 사항 🟢 ### 코드 품질 1. **에러 처리 개선** - 구체적인 에러 메시지 - 사용자 친화적 에러 페이지 - 로깅 강화 2. **테스트 추가** - 단위 테스트 - 통합 테스트 - E2E 테스트 3. **문서화** - API 문서 (OpenAPI/Swagger) - 시퀀스 다이어그램 - 배포 가이드 ### 보안 강화 1. **토큰 관리** - Refresh Token 구현 - 토큰 암호화 저장 - Rate Limiting 2. **OAuth 개선** - PKCE 구현 - State 파라미터 강화 - Nonce 추가 ## 4. 장기 로드맵 📅 ### Q4 2025 - [ ] DB 스키마 통일 - [ ] Frontend 인증 방식 통일 - [ ] 환경변수 정리 - [ ] Git 충돌 해결 ### Q1 2026 - [ ] Multi-tenant 아키텍처 - [ ] SSO 구현 - [ ] 2FA 지원 - [ ] 감사 로그 ### Q2 2026 - [ ] 마이크로서비스 분리 - [ ] API Gateway 도입 - [ ] 중앙 인증 서버 - [ ] 모니터링 대시보드 ## 5. 현재 작업 중인 파일 목록 ### 수정된 파일 (commit 필요) ```bash /home/admin/auth-server/ ├── app/ │ ├── api/gmail_refresh.py (CONFLICT) │ ├── models/workspace.py │ ├── providers/ │ │ ├── gmail.py (CONFLICT) │ │ ├── gmail_passport.py (CONFLICT) │ │ └── slack.py (NEW IMPLEMENTATION) ├── docker-compose.yml └── tokens/unknown_gmail.json /home/heejae/frontend-customer/ └── src/contexts/auth-context.tsx ``` ### 신규 생성된 문서 ```bash /home/heejae/DOCS/ ├── troubleshooting/ │ └── 250831_slack_oauth_login_implementation.md ├── 300_architecture/ │ └── 380_authentication_system.md └── plans/ └── 250831_todo_and_tech_debt.md (this file) ``` ## 6. 명령어 참조 ### Docker 관련 ```bash # Auth server 재시작 cd /home/admin/auth-server docker compose down && docker compose up -d --build # 로그 확인 docker logs auth-server --tail 100 -f docker logs auth-redis --tail 50 ``` ### Git 관련 ```bash # 충돌 해결 git status git diff git add git commit -m "fix: resolve conflicts" # 변경사항 확인 git log --oneline -10 git diff HEAD~1 ``` ### DB 관련 ```bash # PostgreSQL 접속 PGPASSWORD=robeings psql -h localhost -U robeings -d main_db # 테이블 구조 확인 \d companies \d workspaces \d slack_workspaces \d users \d slack_user_mapping # 데이터 확인 SELECT * FROM companies; SELECT * FROM workspaces; SELECT * FROM slack_workspaces; ``` ### Redis 관련 ```bash # Redis CLI docker exec -it auth-redis redis-cli # Keys 확인 KEYS oauth:state:* KEYS auth:temp:* # TTL 확인 TTL oauth:state: ``` ## 7. 연락처 및 참고 ### 관련 시스템 - Auth Server: https://auth.ro-being.com (포트 9000) - Frontend: https://ro-being.com (포트 3000) - Gitea: https://git.ro-being.com - PostgreSQL: 192.168.219.45:5432 - Redis: localhost:6379 ### 환경변수 위치 - `/home/admin/auth-server/.env` - `/home/heejae/frontend-customer/.env` ### 주요 문서 - [Slack OAuth 구현 상세](./troubleshooting/250831_slack_oauth_login_implementation.md) - [인증 시스템 아키텍처](./300_architecture/380_authentication_system.md) - [UUID 변환 시스템](./300_architecture/uuid_conversion_system.md) ## 8. 체크리스트 ### 배포 전 확인사항 - [ ] Git 충돌 해결 - [ ] 환경변수 설정 - [ ] DB 마이그레이션 - [ ] Docker 이미지 빌드 - [ ] 로그 모니터링 - [ ] 에러 처리 테스트 - [ ] 롤백 계획 수립 ### 테스트 시나리오 - [ ] Gmail 로그인 - [ ] Slack 로그인 - [ ] 기존 사용자 연동 - [ ] 신규 사용자 생성 - [ ] 토큰 만료 처리 - [ ] 에러 케이스 - [ ] 동시 로그인