# TODO 및 기술 부채 정리

## 작성일: 2025년 8월 31일
## 최종 수정: 2025년 8월 31일 16:35

## 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)
```

### 2. python-multipart 의존성 이슈 🟡

**문제 발생**:
- Slack OIDC의 `response_mode=form_post` 처리 실패
- `await request.form()` 호출 시 AssertionError 발생

**해결**:
- `requirements.txt`에 `python-multipart>=0.0.6` 추가
- Docker 이미지 재빌드 완료

**향후 고려사항**:
- CI/CD 파이프라인에 의존성 체크 추가
- 개발/프로덕션 requirements 분리 검토

## 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 직접 전달 계획 → 임시 코드로 변경

## 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 의존성 추가
   - Docker 이미지 재빌드
   - nginx 권한 문제 해결

### 미해결 과제 📋
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 <file>
git add <file>
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:<uuid>
```

## 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 로그인
- [ ] 기존 사용자 연동
- [ ] 신규 사용자 생성
- [ ] 토큰 만료 처리
- [ ] 에러 케이스
- [ ] 동시 로그인