graph TB
%% ========================================
%% 클라이언트 레이어
%% ========================================
subgraph Client["클라이언트 레이어"]
WebApp["웹 애플리케이션
(React/Vue SPA)"]
end
%% ========================================
%% API Gateway 레이어
%% ========================================
subgraph Gateway["API Gateway 레이어"]
APIGateway["API Gateway
- JWT 인증/인가
- 서비스 라우팅
- Rate Limiting
- CORS 처리"]
end
%% ========================================
%% 마이크로서비스 레이어
%% ========================================
subgraph Services["마이크로서비스 레이어"]
%% 핵심 서비스
UserSvc["User Service
- 사용자 인증 (LDAP)
- JWT 토큰 발급"]
MeetingSvc["Meeting Service
- 회의 생애주기 관리
- 회의록 CRUD
- 템플릿 관리
- 회의 통계
- Todo 관리
- 실시간 동기화 (WebSocket)
- 버전 관리"]
%% 전문 서비스
STTSvc["STT Service
- 음성 녹음
- 텍스트 변환
- 화자 식별"]
AISvc["AI Service
- 회의록 자동 작성
- Todo 추출
- 프롬프팅 개선
- 전문용어 감지 (RAG)
- 맥락 기반 설명 (RAG)
- 관련 회의록 연결"]
%% 지원 서비스
NotifySvc["Notification Service
- 알림 발송
- 리마인더 관리"]
end
%% ========================================
%% 인프라 레이어
%% ========================================
subgraph Infrastructure["인프라 레이어"]
%% 캐시
Redis["Redis
- 분산 캐시 (Cache-Aside)
- 작업 상태 저장
- 세션 관리"]
%% 메시지 브로커
EventHubs["Azure Event Hubs
- Pub/Sub 패턴 (Consumer Groups)
- Partition 기반 부하 분산
- 이벤트 스트리밍"]
end
%% ========================================
%% 외부 시스템
%% ========================================
subgraph External["외부 시스템"]
AzureSpeech["Azure Speech
(STT 엔진)"]
LLM["AI Model Server
(LLM)"]
EmailSMS["Email/SMS Service"]
end
%% ========================================
%% 클라이언트 → API Gateway (동기)
%% ========================================
WebApp -->|"HTTPS
모든 API 요청"| APIGateway
%% ========================================
%% API Gateway → 서비스 (동기 라우팅)
%% ========================================
APIGateway -->|"/api/users/**"| UserSvc
APIGateway -->|"/api/meetings/**
/api/todos/**"| MeetingSvc
APIGateway -->|"/api/stt/**"| STTSvc
APIGateway -->|"/api/ai/**"| AISvc
APIGateway -->|"/api/notifications/**"| NotifySvc
%% ========================================
%% 클라이언트 → Meeting (WebSocket)
%% ========================================
WebApp -.->|"WebSocket
실시간 동기화"| MeetingSvc
%% ========================================
%% 서비스 → Redis (캐시 우선 전략)
%% ========================================
MeetingSvc -.->|"Cache-Aside
회의 정보/참여자/Todo"| Redis
AISvc -.->|"작업 상태 저장
Async Request-Reply"| Redis
%% ========================================
%% 서비스 간 동기 통신 제거 (프론트엔드에서 사용자 정보 전송)
%% ========================================
%% ========================================
%% 서비스 → Event Hubs (이벤트 발행)
%% ========================================
MeetingSvc ==>|"이벤트 발행
(meeting-events)"| EventHubs
STTSvc ==>|"이벤트 발행
(transcript-events)"| EventHubs
AISvc ==>|"이벤트 발행
(transcript-events)"| EventHubs
%% ========================================
%% 이벤트 구독 정보 (노트)
%% ========================================
Note1["📋 이벤트 구독 매핑
Meeting Service:
- TranscriptSummaryCreated
STT Service:
- MeetingEnded
AI Service:
- TranscriptReady
Notification Service:
- NotificationRequest"]
Note1 -.->|"참조"| EventHubs
%% ========================================
%% 서비스 → 외부 시스템
%% ========================================
STTSvc -.->|"음성 변환 요청"| AzureSpeech
AISvc -.->|"LLM 요청"| LLM
NotifySvc -.->|"이메일/SMS 발송"| EmailSMS
%% ========================================
%% 스타일 정의
%% ========================================
classDef client fill:#e3f2fd,stroke:#1976d2,stroke-width:3px
classDef gateway fill:#fff9c4,stroke:#f57f17,stroke-width:3px
classDef core fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
classDef special fill:#f8bbd0,stroke:#c2185b,stroke-width:2px
classDef support fill:#d1c4e9,stroke:#512da8,stroke-width:2px
classDef infra fill:#b2ebf2,stroke:#00838f,stroke-width:2px
classDef mq fill:#ffe0b2,stroke:#e65100,stroke-width:3px
classDef external fill:#cfd8dc,stroke:#455a64,stroke-width:2px
class WebApp client
class APIGateway gateway
class UserSvc,MeetingSvc core
class STTSvc,AISvc special
class NotifySvc support
class Redis infra
class EventHubs mq
class AzureSpeech,LLM,EmailSMS external