diff --git a/troubleshooting/250827_UUID_username_혼용_CRITICAL.md b/troubleshooting/250827_UUID_username_혼용_CRITICAL.md index c84a367..1cf9245 100644 --- a/troubleshooting/250827_UUID_username_혼용_CRITICAL.md +++ b/troubleshooting/250827_UUID_username_혼용_CRITICAL.md @@ -2,7 +2,7 @@ ## 작성일: 2025-08-27 ## 작성자: 51123 서버 관리자 -## 상태: ⚠️ PARTIAL - 2025-08-27 16:45 Gateway 쿼리 문제 발견 +## 상태: 🔴 INCOMPLETE - 2025-08-27 16:50 Gateway UUID 조회 미구현 ## 영향 범위: 전체 시스템 (Auth, Gateway, Frontend, rb8001, DB) ## 위험 수준: ~~매우 높음~~ → 해결됨 @@ -214,22 +214,18 @@ SELECT id, username FROM users WHERE username='happybell80'; ## 8. 결론 -**⚠️ UUID vs username 혼용 문제 부분 해결** +**🔴 UUID vs username 혼용 문제 미완료 - Gateway 수정 필수** ### 적용된 해결책: 1. auth-server: JWT `sub`에 UUID 사용 ✅ 2. Frontend: localStorage에 UUID 저장 ✅ 3. rb8001: UUID와 username 구분 처리 ✅ -4. Gateway: UUID 기반 인증 ✅, DB 조회 ❌ +4. Gateway: JWT에서 UUID 추출 ✅, DB 조회 실패 ❌ (username으로 조회 시도) -### 추가 발견 및 해결: -- workspace_members.robeing_url 불일치 문제 해결 -- ~~happybell80 → rb10508_micro로 정상 라우팅~~ - -### 🔴 잔여 문제 (16:45 발견): -- Gateway `get_robeing_info()` 함수가 UUID를 username으로 조회 -- database.py:108 `WHERE u.username = :username` - UUID 처리 불가 -- 결과: "No active workspace found" → 기본 10508 사용 +### 실패 원인: +- JWT/Frontend/rb8001은 UUID로 변경했으나 +- **Gateway DB 조회 로직은 여전히 username 기반** +- 시스템 전체가 UUID로 통일되지 않음 ## 9. 해결 과정 (2025-08-27 15:45 ~ 16:45) @@ -256,16 +252,18 @@ SELECT id, username FROM users WHERE username='happybell80'; - Gateway 인증: UUID 사용 확인 ✅ - Frontend: UUID 전송 확인 ✅ -### 미해결 문제 (16:45) -- Gateway `get_robeing_info(username: str)` 함수 - - JWT sub에서 UUID 받음: `1e16e9d5-59f3-54da-a661-8abeabff4230` - - DB 쿼리: `WHERE u.username = :username` (UUID로 조회 불가) - - 결과: workspace 찾기 실패 → default robeing(10508) 사용 +### 핵심 미해결 문제 (16:50) +- **Gateway `get_robeing_info(username: str)` 함수 설계 오류** + - 현재: JWT sub(UUID) → `username` 파라미터로 전달 + - DB 쿼리: `WHERE u.username = :username` + - UUID를 username으로 조회 → 실패 → default robeing(10508) 사용 + - **근본 원인**: Gateway가 UUID 시대로 업데이트 안 됨 -### 해결 방안 -1. database.py 수정: `WHERE u.username = :username OR u.id::text = :username` -2. 또는 Gateway가 JWT payload의 username 사용 -3. 또는 별도 함수 `get_robeing_info_by_uuid()` 추가 +### 해결 방안 (정확한 방향) +1. **필수**: database.py `get_robeing_info()` UUID 조회로 수정 + - 파라미터명: `username` → `user_id` + - 쿼리: `WHERE u.id::text = :user_id` +2. **주의**: username으로 회귀하면 안 됨 (UUID가 primary identifier) ---