docs: UUID5 사용 관련 내용 모두 제거 및 51123 매핑 API 사용으로 변경
- 250822 문서: UUID5 사용 중 → 51123 매핑 API 사용 중으로 상태 변경 - 아키텍처 문서들(310, 320): UUID5 생성 → 매핑 API 호출로 변경 - sequences/email_sequences.md: UUID5 변환 → 매핑 API 호출로 수정 - database/250820_postgresql_ssh_tunnel_guide.md: UUID5 코드 제거 UUID5는 더 이상 사용하지 않고 51123의 slack_user_mapping 테이블을 통한 실제 UUID 조회로 통일
This commit is contained in:
parent
1072394317
commit
48b4b04086
@ -234,7 +234,7 @@ Gateway (8100)
|
||||
|
||||
### UUID 체계
|
||||
- **일반 사용자**: uuid4() 랜덤 생성
|
||||
- **Slack 사용자**: uuid5(namespace, slack_id) 결정적 생성
|
||||
- **Slack 사용자**: 51123 매핑 API를 통해 slack_user_mapping 테이블에서 UUID 조회
|
||||
- **Namespace**: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
|
||||
|
||||
## 리소스 효율성 관리
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
## 1. 개요
|
||||
|
||||
Slack을 통한 로빙 서비스 접근 아키텍처. 실시간 대화형 인터페이스를 제공하며, UUID5 기반 사용자 식별 체계를 사용합니다.
|
||||
Slack을 통한 로빙 서비스 접근 아키텍처. 실시간 대화형 인터페이스를 제공하며, 51123 매핑 API 기반 사용자 식별 체계를 사용합니다.
|
||||
|
||||
---
|
||||
|
||||
@ -29,10 +29,11 @@ sequenceDiagram
|
||||
Slack->>RB: Event Webhook
|
||||
Note over RB: Slack User ID: U0925SXQFDK
|
||||
|
||||
RB->>RB: UUID5 생성
|
||||
Note over RB: uuid5(namespace, slack_id)
|
||||
RB->>Auth: 매핑 API 호출
|
||||
Note over RB: /api/slack/mapping/{slack_id}
|
||||
Auth-->>RB: UUID 반환
|
||||
|
||||
RB->>DB: 사용자 조회 (UUID5)
|
||||
RB->>DB: 사용자 조회 (UUID)
|
||||
DB-->>RB: 사용자 정보
|
||||
|
||||
RB->>RB: 의도 분류
|
||||
@ -45,26 +46,30 @@ sequenceDiagram
|
||||
|
||||
### 2.2 사용자 식별 체계
|
||||
|
||||
#### UUID5 변환 로직
|
||||
#### 매핑 API 호출
|
||||
```python
|
||||
import uuid
|
||||
import httpx
|
||||
|
||||
NAMESPACE = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')
|
||||
|
||||
def get_user_uuid(slack_user_id: str) -> str:
|
||||
"""Slack User ID를 UUID5로 변환"""
|
||||
return str(uuid.uuid5(NAMESPACE, slack_user_id))
|
||||
async def get_user_uuid(slack_user_id: str) -> str:
|
||||
"""51123 매핑 API를 통해 UUID 조회"""
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(
|
||||
f"http://192.168.219.45:9000/api/slack/mapping/{slack_user_id}"
|
||||
)
|
||||
if response.status_code == 200:
|
||||
return response.json()["user_id"]
|
||||
return None
|
||||
|
||||
# 예시
|
||||
slack_id = "U0925SXQFDK"
|
||||
user_uuid = get_user_uuid(slack_id) # 결정적 UUID 생성
|
||||
user_uuid = await get_user_uuid(slack_id) # DB에서 UUID 조회
|
||||
```
|
||||
|
||||
#### 사용자 데이터 구조
|
||||
```sql
|
||||
-- users 테이블
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY, -- UUID5로 생성
|
||||
id UUID PRIMARY KEY, -- slack_user_mapping에서 조회
|
||||
username VARCHAR(50), -- slack_U0925SXQ 형태
|
||||
email VARCHAR(255),
|
||||
name VARCHAR(255),
|
||||
@ -121,7 +126,7 @@ flowchart TD
|
||||
B -->|app_mention| C[멘션 처리]
|
||||
B -->|message| D[일반 메시지]
|
||||
|
||||
C --> E[UUID5 변환]
|
||||
C --> E[매핑 API 호출]
|
||||
D --> E
|
||||
|
||||
E --> F[사용자 컨텍스트 로드]
|
||||
@ -147,7 +152,8 @@ sequenceDiagram
|
||||
participant Gmail as Gmail API
|
||||
|
||||
User->>RB: "이메일 보내줘"
|
||||
RB->>RB: UUID5 변환
|
||||
RB->>Auth: 매핑 API 호출
|
||||
Auth-->>RB: UUID 반환
|
||||
RB->>Monitor: Gmail 아이템 확인
|
||||
|
||||
alt 아이템 미장착
|
||||
@ -203,13 +209,13 @@ async def show_typing(channel: str):
|
||||
|
||||
### 6.1 Slack 관련 테이블
|
||||
```sql
|
||||
-- Slack 사용자 매핑 (더 이상 필요 없음 - UUID5 직접 사용)
|
||||
-- Slack 사용자 매핑 (slack_user_mapping 테이블 사용)
|
||||
-- 대신 users 테이블에서 직접 관리
|
||||
|
||||
-- 대화 로그
|
||||
CREATE TABLE conversation_logs (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID, -- UUID5로 생성된 ID
|
||||
user_id UUID, -- slack_user_mapping에서 조회한 UUID
|
||||
robeing_id VARCHAR(50),
|
||||
channel_id VARCHAR(50),
|
||||
message_type VARCHAR(20), -- 'user' or 'bot'
|
||||
@ -258,7 +264,7 @@ async def send_slack_message(channel: str, text: str):
|
||||
```json
|
||||
{
|
||||
"timestamp": "2025-08-21T10:30:00Z",
|
||||
"user_id": "UUID5-생성값",
|
||||
"user_id": "매핑된-UUID",
|
||||
"slack_user_id": "U0925SXQFDK",
|
||||
"channel": "C1234567890",
|
||||
"message": "사용자 메시지",
|
||||
|
||||
@ -272,7 +272,8 @@ import uuid
|
||||
def slack_id_to_uuid(slack_user_id):
|
||||
"""Slack User ID를 일관된 UUID로 변환"""
|
||||
namespace = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')
|
||||
return str(uuid.uuid5(namespace, slack_user_id))
|
||||
# 51123 매핑 API 호출로 UUID 조회
|
||||
return call_mapping_api(slack_user_id)
|
||||
|
||||
# 예시
|
||||
slack_id = 'U091UNVE41M'
|
||||
@ -293,7 +294,8 @@ def add_gmail_token(slack_user_id, email, access_token, refresh_token):
|
||||
|
||||
# Slack ID를 UUID로 변환
|
||||
namespace = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')
|
||||
user_uuid = str(uuid.uuid5(namespace, slack_user_id))
|
||||
# 51123 매핑 API를 통해 UUID 조회
|
||||
user_uuid = await get_uuid_from_mapping_api(slack_user_id)
|
||||
|
||||
conn = psycopg2.connect('postgresql://robeings:robeings@localhost:5432/main_db')
|
||||
cur = conn.cursor()
|
||||
|
||||
@ -260,11 +260,12 @@ sequenceDiagram
|
||||
RB->>RB: 의도 분류
|
||||
Note over RB: INTENT: EMAIL_SEND<br/>수신자: 종태님<br/>내용: 회의 일정
|
||||
|
||||
RB->>RB: Slack ID → UUID5 변환
|
||||
Note over RB: UUID5 생성:<br/>namespace: 6ba7b810-9dad-11d1-80b4-00c04fd430c8<br/>name: U0925SXQFDK
|
||||
RB->>Auth: 매핑 API 호출
|
||||
Note over RB: GET /api/slack/mapping/U0925SXQFDK
|
||||
Auth-->>RB: UUID 반환
|
||||
|
||||
RB->>DB: UUID로 사용자 조회
|
||||
Note over DB: SELECT * FROM users<br/>WHERE id = uuid5(...)
|
||||
Note over DB: SELECT * FROM users<br/>WHERE id = '매핑된 UUID'
|
||||
DB-->>RB: user_id, name: "김종태"
|
||||
|
||||
RB->>Monitor: Gmail 아이템 상태 확인
|
||||
@ -555,9 +556,9 @@ UUID4: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
|
||||
```
|
||||
Slack User ID: U0925SXQFDK
|
||||
↓
|
||||
UUID5 생성 (namespace + Slack ID)
|
||||
51123 매핑 API 호출
|
||||
↓
|
||||
UUID5: 생성된 UUID
|
||||
UUID: slack_user_mapping에서 조회
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
## 날짜: 2025-08-22 (수정: 2025-08-28)
|
||||
## 작성자: happybell80 & Claude
|
||||
## 관련 서비스: robeing-monitor, robeing-gateway, skill-email
|
||||
## 상태: robeing-monitor UUID5 사용 중
|
||||
## 상태: 51123 매핑 API 사용 중 (UUID5 중단됨)
|
||||
|
||||
---
|
||||
|
||||
@ -76,9 +76,9 @@ def convert_to_uuid(user_id: str) -> str:
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# UUID5로 변환 (DNS namespace 사용)
|
||||
namespace = uuid.UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')
|
||||
return str(uuid.uuid5(namespace, user_id))
|
||||
# 51123 매핑 API 호출로 변경됨 (UUID5 사용 중단)
|
||||
# 실제 DB의 slack_user_mapping 테이블 사용
|
||||
return call_mapping_api(user_id) # 실제 UUID 반환
|
||||
|
||||
# 모든 엔드포인트에 적용
|
||||
@router.get("/gmail")
|
||||
@ -179,7 +179,7 @@ class DBCredentialsProvider:
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
user_uuid = str(uuid.uuid5(self.uuid_namespace, user_id))
|
||||
user_uuid = call_51123_mapping_api(user_id) # UUID5 대신 매핑 API
|
||||
logger.debug(f"Converted {user_id} to {user_uuid}")
|
||||
return user_uuid
|
||||
|
||||
@ -239,20 +239,20 @@ Slack (rb8001) skill-email PostgreSQL
|
||||
user_id: "U091UNVE41M" → UUID 변환 → UUID → 토큰 조회
|
||||
```
|
||||
|
||||
### 4.2 서비스별 UUID 변환 구현
|
||||
### 4.2 서비스별 UUID 변환 구현 (UUID5 중단, 매핑 API 사용)
|
||||
|
||||
| 서비스 | 함수/메서드 | 입력 | 출력 |
|
||||
|--------|------------|------|------|
|
||||
| robeing-gateway | `get_user_by_username()` | username | UUID |
|
||||
| robeing-monitor | `convert_to_uuid()` | Slack ID/username | UUID |
|
||||
| skill-email | `_convert_to_uuid()` | Slack ID | UUID |
|
||||
| robeing-gateway | `get_user_by_username()` | username | UUID (DB 조회) |
|
||||
| robeing-monitor | 51123 매핑 API 호출 | Slack ID | UUID (매핑 테이블) |
|
||||
| skill-email | 51123 매핑 API 호출 | Slack ID | UUID (매핑 테이블) |
|
||||
|
||||
### 4.3 표준 UUID 생성 규칙
|
||||
### 4.3 표준 UUID 조회 방식 (UUID5 중단)
|
||||
|
||||
```python
|
||||
# 모든 서비스 동일
|
||||
namespace = uuid.NAMESPACE_DNS # 6ba7b810-9dad-11d1-80b4-00c04fd430c8
|
||||
user_uuid = str(uuid.uuid5(namespace, user_id))
|
||||
# 51123 매핑 API 사용 (2025-08-28부터)
|
||||
# GET /api/slack/mapping/{slack_user_id}
|
||||
# 실제 DB의 slack_user_mapping 테이블에서 UUID 반환
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user