docs: UUID/username 혼용 문제 - 51123 서버 확인 완료, auth-server 즉시 수정 가능

This commit is contained in:
happybell80 2025-08-27 16:05:07 +09:00
parent eb0f112a6b
commit 72147aeecc

View File

@ -28,17 +28,22 @@
## 2. 영향 분석
### 2.1 auth-server (51123)
### 2.1 auth-server (51123) - 확인 완료
```python
# /home/admin/auth-server/app/providers/gmail.py:208-209
# /home/admin/auth-server/app/providers/gmail.py
# Line 191: user_id_str = str(user.id) # UUID 접근 가능
# Line 209: "sub": username # 🔴 UUID 대신 username 사용
jwt_token = create_access_token(data={
"sub": username, # 🔴 UUID 대신 username
"sub": username, # username 사용 (UUID 사용 가능한데도!)
"email": user_email,
"name": user_name,
"username": username,
})
# Line 223: Redis에도 "user_id": username 저장
```
**문제**: JWT 표준에서 `sub`는 unique identifier여야 하는데 username 사용
**확인된 문제**:
- user.id (UUID) 접근 가능함에도 JWT sub에 username 사용
- Redis에도 username을 user_id로 저장
### 2.2 robeing-gateway (51123) - 확인 완료
```python
@ -111,21 +116,27 @@ slack_user_id: 'happybell80' -- 우회 저장
### 4.1 긴급 조치 (Phase 1)
#### auth-server 수정
#### auth-server 수정 (즉시 가능)
```python
# gmail.py:208 수정 필요
# gmail.py:209 수정 필요 (Line 191에서 이미 user.id 사용 가능)
jwt_token = create_access_token(data={
"sub": str(user.id), # UUID 사용
"sub": str(user.id), # Line 191의 user_id_str 사용
"username": username, # username은 별도 필드
"email": user_email,
"name": user_name,
})
# Line 223 Redis 저장도 수정
"user_id": str(user.id), # username 대신 UUID
```
#### Gateway username → UUID 매핑
#### Gateway username → UUID 매핑 (확인 완료)
```python
# 이미 구현되어 있음 (get_user_by_username)
# 하지만 JWT sub가 UUID면 불필요
# database.py:170-199 이미 완벽 구현
async def get_user_by_username(username: str):
# SELECT id::text as user_id FROM users WHERE username = :username
# username으로 UUID 조회 정상 작동
# JWT sub가 UUID로 바뀌면 이 변환 불필요해짐
```
### 4.2 중기 개선 (Phase 2)
@ -154,22 +165,24 @@ username = payload.get("username") # username
## 5. 테스트 시나리오
### 5.1 현재 상태 확인 (검증 완료)
### 5.1 현재 상태 확인 (51123 검증 완료)
```bash
# JWT payload 확인
curl -X POST http://localhost:9000/auth/gmail/login
# sub: "happybell80" (username)
# DB 확인
# Users 테이블 확인 (51123)
SELECT id, username FROM users WHERE username='happybell80';
# UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230 (UUID4)
# id: 1e16e9d5-59f3-54da-a661-8abeabff4230 (정상 UUID4)
# username: happybell80
# conversation_logs 확인
SELECT user_id, slack_user_id FROM conversation_logs;
# user_id: NULL (UUID 타입이라 username 저장 실패)
# slack_user_id: 'happybell80' (우회 저장)
# auth-server 코드 확인
# Line 191: user_id_str = str(user.id) # UUID 문자열 생성
# Line 209: "sub": username # 하지만 JWT에 username 사용
# Line 223: "user_id": username # Redis에도 username
# PostgreSQL 로그
# Gateway 변환 함수 확인
# database.py:184: SELECT id::text as user_id
# username → UUID 변환 정상 작동
# conversation_logs 확인 (51124 보고)
# user_id: NULL, slack_user_id: 'happybell80'
# "Non-UUID user_id" 에러 발생
```
@ -209,11 +222,17 @@ SELECT user_id, slack_user_id FROM conversation_logs;
3. rb8001: UUID와 username 구분 처리
### 예상 작업 시간
- auth-server 수정: 30분
- auth-server 수정: **10분** (Line 209, 223만 수정)
- Frontend 수정: 1시간
- rb8001 수정: 30분
- 테스트 및 검증: 1시간
- **총 예상: 3시간**
- **총 예상: 2시간 40분**
### 51123 서버 준비 완료
- users 테이블에 UUID 정상 저장됨
- Gateway UUID 변환 함수 구현 완료
- auth-server에서 user.id 접근 가능 확인
- **즉시 수정 가능한 상태**
---