docs: UUID 체계 전환 및 대화 저장 오류 트러블슈팅
This commit is contained in:
parent
136acefeac
commit
ae7654d895
81
troubleshooting/250911_happybell80_UUID_체계_전환_및_대화저장_오류.md
Normal file
81
troubleshooting/250911_happybell80_UUID_체계_전환_및_대화저장_오류.md
Normal file
@ -0,0 +1,81 @@
|
||||
# UUID 체계 전환 및 대화 저장 오류 해결
|
||||
|
||||
## 작성일: 2025-09-11
|
||||
## 작성자: happybell80
|
||||
|
||||
---
|
||||
|
||||
## 문제 상황
|
||||
1. **PostgreSQL 테이블명 단수형 통일 후 발생한 연쇄 문제**
|
||||
- conversation_log 테이블 id 자동증가 미작동
|
||||
- Slack ID를 UUID 필드에 저장 시도로 타입 오류
|
||||
- Gateway와 rb8001 간 UUID 전달 미구현
|
||||
|
||||
2. **주요 오류 메시지**
|
||||
```
|
||||
- null value in column "id" of relation "conversation_log" violates not-null constraint
|
||||
- invalid input syntax for type uuid: "U09C98KBGHX"
|
||||
- 'MemoryManager' object has no attribute 'collection_name'
|
||||
- 'RobeingRouter' object has no attribute 'is_valid_uuid'
|
||||
```
|
||||
|
||||
## 해결 과정
|
||||
|
||||
### 1. rb8001 UUID 체계 전환
|
||||
```python
|
||||
# app/router/router.py - X-User-Id 헤더 우선 사용
|
||||
if request and hasattr(request, 'headers'):
|
||||
x_user_id = request.headers.get('X-User-Id')
|
||||
if x_user_id and self.is_valid_uuid(x_user_id):
|
||||
final_uuid = x_user_id
|
||||
```
|
||||
|
||||
### 2. conversation_log id 자동증가 해결
|
||||
```python
|
||||
# 테이블에 SERIAL 없어서 명시적 생성
|
||||
max_id_result = db.execute(text("SELECT COALESCE(MAX(id), 0) FROM conversation_log"))
|
||||
next_id = max_id_result.scalar() + 1
|
||||
conversation_log = ConversationLog(id=next_id, ...)
|
||||
```
|
||||
|
||||
### 3. Gateway Slack ID→UUID 변환
|
||||
```sql
|
||||
-- 잘못된 쿼리 (username 사용)
|
||||
WHERE u.username = :slack_user_id
|
||||
|
||||
-- 올바른 쿼리 (oauth_id 사용)
|
||||
WHERE u.oauth_id = :slack_user_id AND u.oauth_provider = 'slack'
|
||||
```
|
||||
|
||||
### 4. Slack Handler UUID 처리
|
||||
```python
|
||||
# X-User-Id 헤더에서 UUID 추출
|
||||
user_uuid = request.headers.get("X-User-Id")
|
||||
if user_uuid:
|
||||
context["user_uuid"] = user_uuid
|
||||
context["original_slack_id"] = user_id # 원본 보존
|
||||
```
|
||||
|
||||
## 데이터 흐름 정리
|
||||
|
||||
### Frontend → Gateway → rb8001
|
||||
1. JWT에서 UUID 추출: `3550cef6-63e1-4ceb-8802-a25c9d1c6917`
|
||||
2. X-User-Id 헤더로 전달
|
||||
3. 정상 저장 및 조회
|
||||
|
||||
### Slack → Gateway → rb8001
|
||||
1. Slack ID: `U09C98KBGHX`
|
||||
2. Gateway에서 oauth_id로 UUID 조회: `53529291-5050-4daa-89fb-008b546feb63`
|
||||
3. X-User-Id 헤더로 전달
|
||||
4. 정상 저장 및 조회
|
||||
|
||||
## 수정된 파일
|
||||
- rb8001/app/router/router.py
|
||||
- rb8001/app/state/database.py
|
||||
- rb8001/app/router/slack_handler.py
|
||||
- robeing-gateway/app/main.py
|
||||
|
||||
## 교훈
|
||||
- DB 스키마와 코드 모델 일치 필수
|
||||
- UUID 체계 전환 시 모든 경로 점검
|
||||
- 헤더 기반 인증 정보는 일관된 위치에서 처리
|
||||
Loading…
x
Reference in New Issue
Block a user