From 72147aeecc866d000f0428f3099e1dfc3e71d76a Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 27 Aug 2025 16:05:07 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20UUID/username=20=ED=98=BC=EC=9A=A9=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20-=2051123=20=EC=84=9C=EB=B2=84=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20=EC=99=84=EB=A3=8C,=20auth-server=20=EC=A6=89?= =?UTF-8?q?=EC=8B=9C=20=EC=88=98=EC=A0=95=20=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../250827_UUID_username_혼용_CRITICAL.md | 67 ++++++++++++------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/troubleshooting/250827_UUID_username_혼용_CRITICAL.md b/troubleshooting/250827_UUID_username_혼용_CRITICAL.md index bcb891b..97800e5 100644 --- a/troubleshooting/250827_UUID_username_혼용_CRITICAL.md +++ b/troubleshooting/250827_UUID_username_혼용_CRITICAL.md @@ -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 접근 가능 확인 +- **즉시 수정 가능한 상태** ---