diff --git a/300_architecture/310_전체_시스템_구조_컨테이너와_마이크로서비스.md b/300_architecture/310_전체_시스템_구조_컨테이너와_마이크로서비스.md index 93cb802..abcd2d5 100644 --- a/300_architecture/310_전체_시스템_구조_컨테이너와_마이크로서비스.md +++ b/300_architecture/310_전체_시스템_구조_컨테이너와_마이크로서비스.md @@ -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 ## 리소스 효율성 관리 diff --git a/300_architecture/320_Slack_기반_인터페이스_설계.md b/300_architecture/320_Slack_기반_인터페이스_설계.md index 2017a63..84e3493 100644 --- a/300_architecture/320_Slack_기반_인터페이스_설계.md +++ b/300_architecture/320_Slack_기반_인터페이스_설계.md @@ -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": "사용자 메시지", diff --git a/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md b/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md index 3869697..99d16bf 100644 --- a/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md +++ b/300_architecture/database/250820_postgresql_ssh_tunnel_guide.md @@ -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() diff --git a/300_architecture/sequences/email_sequences.md b/300_architecture/sequences/email_sequences.md index b9ca8ae..f25343c 100644 --- a/300_architecture/sequences/email_sequences.md +++ b/300_architecture/sequences/email_sequences.md @@ -260,11 +260,12 @@ sequenceDiagram RB->>RB: 의도 분류 Note over RB: INTENT: EMAIL_SEND
수신자: 종태님
내용: 회의 일정 - RB->>RB: Slack ID → UUID5 변환 - Note over RB: UUID5 생성:
namespace: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
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
WHERE id = uuid5(...) + Note over DB: SELECT * FROM users
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에서 조회 ``` --- diff --git a/troubleshooting/250822_happybell80_Gmail통합_UUID변환_문제해결.md b/troubleshooting/250822_happybell80_Gmail통합_UUID변환_문제해결.md index 25177b1..9de8212 100644 --- a/troubleshooting/250822_happybell80_Gmail통합_UUID변환_문제해결.md +++ b/troubleshooting/250822_happybell80_Gmail통합_UUID변환_문제해결.md @@ -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 반환 ``` ---