docs: rb8001 PostgreSQL 저장 완전 해결 - Foreign key 처리 추가

- 1차 시도: UUID 변환 (Foreign key 위반 발생)
- 2차 해결: users 테이블 확인 로직 추가
- 등록 사용자만 user_id, 비등록은 slack_user_id 사용
- Foreign key 제약 유지하며 모든 대화 저장 가능
- 커밋: 84d124a, 5a0af8a
This commit is contained in:
happybell80 2025-08-26 20:25:29 +09:00
parent a23c02a659
commit ec4865aefd

View File

@ -2,9 +2,9 @@
## 작성일: 2025-08-26
## 작성자: 51124 서버 담당
## 상태: 부분 해결 (ChromaDB ✅, PostgreSQL ❌)
## 영향: PostgreSQL conversation_logs 저장 실패 (UUID 타입 불일치)
## 최종 업데이트: 2025-08-26 18:30
## 상태: ✅ 완전 해결 (ChromaDB ✅, PostgreSQL ✅, Foreign key ✅)
## 영향: PostgreSQL conversation_logs 정상 저장
## 최종 업데이트: 2025-08-26 19:30
---
@ -215,9 +215,9 @@ print('Collections:', client.list_collections())
## 10. 우선순위
**중간** - ChromaDB는 정상 작동하므로 기본 기능은 유지됨. PostgreSQL 저장만 실패
## 11. 수정 후 상태 (2025-08-26 18:30 업데이트)
## 11. 수정 후 상태 (2025-08-26 19:00 업데이트)
- **ChromaDB**: ✅ 정상 저장 및 조회 가능
- **PostgreSQL**: ❌ UUID 타입 에러로 저장 실패 (수정 필요)
- **PostgreSQL**: ✅ UUID 변환 로직 추가로 정상 저장
---
@ -249,7 +249,45 @@ print('Collections:', client.list_collections())
### 12.4 핵심 문제
**51124 서버의 rb8001이 UUID 형식이 아닌 user_id를 보내서 PostgreSQL 저장 실패**
### 12.5 다음 단계
1. rb8001 코드에 UUID 변환 로직 추가 필요
2. slack_user_id 필드 활용하여 원본 ID 보존
3. Gateway JWT 시크릿 키 동기화 확인
### 12.5 해결 과정
#### 1차 시도 (2025-08-26 19:00) - UUID 변환
✅ **적용된 해결책**
- **router.py:309-378** UUID 변환 로직 추가
- UUID가 아닌 경우 UUID5로 변환
- **문제 발견**: Foreign key 제약 위반 (users 테이블에 없는 UUID)
#### 2차 해결 (2025-08-26 19:30) - Foreign key 처리
✅ **최종 해결책**
1. **router.py:344-391** users 테이블 확인 로직 추가
- UUID 형식 & users 테이블 존재 → user_id에 저장
- UUID 형식 & users 테이블 없음 → user_id는 NULL, slack_user_id에 저장
- 비-UUID (Slack ID, 문자열) → user_id는 NULL, slack_user_id에 저장
2. **database.py:56** 스키마 수정 유지
- slack_user_id 컬럼 (VARCHAR) - 원본 ID 보존
- user_id (UUID/NULL) - Foreign key 제약 준수
3. **Git 커밋 및 배포**
- 1차 커밋: 84d124a (UUID 변환)
- 2차 커밋: 5a0af8a (Foreign key 해결)
- Gitea Actions 자동 배포 → 51124 서버
### 12.6 최종 처리 로직
| 케이스 | users 테이블 | user_id 저장 | slack_user_id 저장 |
|--------|-------------|-------------|------------------|
| 등록된 UUID 사용자 | ✅ 존재 | UUID 값 | NULL |
| 미등록 UUID | ❌ 없음 | NULL | UUID 값 |
| Slack ID (U0925SXQFDK) | - | NULL | U0925SXQFDK |
| 문자열 (test_user) | - | NULL | test_user |
| happybell80 | - | NULL | happybell80 |
### 12.7 검증된 장점
- ✅ Foreign key 제약 유지
- ✅ 모든 대화 저장 가능
- ✅ users 테이블 오염 방지
- ✅ slack_user_id로 사용자 추적 가능
- ✅ 나중에 사용자 등록 시 매핑 가능
### 12.8 남은 작업
⚠️ **Gateway JWT 에러**: "Signature verification failed" (별도 이슈로 처리)