docs: Gateway UUID 403 차단 구현 방안 업데이트

- 라우터 분리 아키텍처 문서화
- 파일 구조 및 핵심 로직 정리
- 영향 범위 명시
This commit is contained in:
happybell80 2025-09-24 14:46:37 +09:00
parent 0a52606825
commit 417332d9e5

View File

@ -72,32 +72,45 @@
---
## 2025-09-24 추가 수정: Slack UUID 변환 실패 시 에러 처리
## 2025-09-24 Gateway UUID 변환 실패 시 403 차단
### 문제 상황
- Gateway에서 Slack ID를 UUID로 변환 실패 시 경고만 출력하고 요청 계속 진행
- rb8001에서 X-User-Id 헤더 없을 때 Slack ID를 UUID로 저장 시도하여 타입 오류 발생
### 구현 방안: 라우터 분리
### 해결 방안
#### 파일 구조
```
robeing-gateway/app/
├── routers/slack.py # Slack 엔드포인트
├── services/slack_proxy.py # UUID 변환 및 포워딩
└── exceptions.py # UserNotRegisteredError
```
#### 1. /home/admin/robeing-gateway/app/main.py 수정
#### 핵심 로직
- **url_verification**: 항상 200 반환 (UUID 체크 제외)
- **이벤트/인터랙티브**: UUID 변환 실패 시 403 반환
- **X-User-Id 헤더**: UUID 변환 성공 시에만 추가
**라인 526-532** - `/slack/events` 엔드포인트:
- 현재: 경고만 출력
- 수정: UUID 없으면 403 에러 반환
### 영향 범위
- **변경 없음**: nginx, Slack 앱 설정, rb8001
- **필수 작업**: user 테이블에 oauth_id 사전 등록
**라인 583-585** - `/slack/interactive` 엔드포인트:
- 동일하게 UUID 변환 실패 시 403 에러 반환
---
#### 2. /home/admin/robeing-gateway/app/database.py 수정 (선택사항)
## 2025-09-24 UUID 중심 원칙 확립
**라인 376-381** - `slack_user_to_uuid` 함수:
- 현재: None 반환
- 선택적 수정: ValueError 예외 발생
### 원칙
- 모든 내부 로직은 UUID만 사용
- Gateway가 UUID 변환 책임
- UUID 없으면 403 차단
### 기대 효과
- Slack 사용자가 시스템에 등록되지 않은 경우 명확한 에러 메시지 반환
- 잘못된 UUID로 인한 데이터 오염 방지
### 영향받는 서비스
- **rb8001:8001**: X-User-Id 헤더 필수
- **Slack 인터랙티브**: UUID 없으면 버튼 액션 실패
- **예외**: url_verification은 200 반환 필수
### 필수 작업
1. Gateway에서 UUID 변환 실패 시 403 반환
2. user 테이블에 Slack 사용자 사전 등록
3. ChromaDB 검색 시 UUID만 사용
- 디버깅 시간 단축 (명확한 에러로 원인 파악 용이)
### 관련 문제