diff --git a/design/backend/logical/logical-architecture.md b/design/backend/logical/logical-architecture.md index cc60fb5..cd47ae1 100644 --- a/design/backend/logical/logical-architecture.md +++ b/design/backend/logical/logical-architecture.md @@ -57,9 +57,9 @@ - 비동기 작업 상태 저장 **메시지 브로커** -- **RabbitMQ**: 이벤트 기반 통신 및 작업 큐 - - Topic Exchange를 통한 Pub/Sub 패턴 - - 작업 큐를 통한 부하 분산 +- **Azure Event Hubs**: 이벤트 기반 통신 및 스트리밍 + - Consumer Group을 통한 Pub/Sub 패턴 + - Partition을 통한 부하 분산 및 순서 보장 **외부 서비스** - **Azure Speech**: STT (Speech-to-Text) 엔진 @@ -254,10 +254,10 @@ | **TodoCompleted** | Meeting Service | Notification Service | 완료 알림 | | **TranscriptShared** | Meeting Service | Notification Service | 회의록 공유 알림 | -**RabbitMQ Exchange/Queue 구성**: -- **Topic Exchange**: `meeting.events`, `transcript.events`, `todo.events` -- **Queue 네이밍**: `{service}.{event-category}.queue` -- **Routing Key 패턴**: `{event}.{action}` (예: `meeting.ended`, `todo.created`) +**Azure Event Hubs 구성**: +- **Event Hub 네이밍**: `meeting-events`, `transcript-events`, `todo-events` +- **Consumer Group**: 서비스별 독립적인 Consumer Group (예: `ai-service-group`, `notification-service-group`) +- **Partition Key**: `{meetingId}` 또는 `{userId}` (동일 회의/사용자 이벤트 순서 보장) --- @@ -553,19 +553,19 @@ HPA (Horizontal Pod Autoscaler) 설정: ### 5.2 부하 분산 전략 -#### Queue-Based Load Leveling +#### Event Streaming-Based Load Leveling **적용 대상**: 장시간 작업, 트래픽 급증 가능 작업 -| 서비스 | 큐 이름 | Worker 수 | 목적 | -|--------|---------|----------|------| -| STT Service | `stt.processing.queue` | 3-10 | 음성 변환 부하 분산 | -| AI Service | `ai.processing.queue` | 2-5 | AI 처리 부하 분산 | -| Notification Service | `notification.queue` | 3-10 | 대량 알림 발송 | +| 서비스 | Event Hub | Consumer Group | Partition 수 | 목적 | +|--------|-----------|---------------|-------------|------| +| STT Service | `stt-processing` | `stt-worker-group` | 4-8 | 음성 변환 부하 분산 | +| AI Service | `ai-processing` | `ai-worker-group` | 4-8 | AI 처리 부하 분산 | +| Notification Service | `notification-events` | `notification-worker-group` | 4-8 | 대량 알림 발송 | -**Queue 설정**: -- Max Length: 1000-2000 메시지 -- Message TTL: 1-2시간 -- Consumer Concurrency: 동적 조정 (2-10) +**Event Hub 설정**: +- Throughput Units: 2-10 (자동 확장 가능) +- Message Retention: 1-7일 +- Partition Count: 4-8 (병렬 처리 수준) --- @@ -618,7 +618,7 @@ HPA (Horizontal Pod Autoscaler) 설정: #### 전송 중 암호화 - **HTTPS/TLS**: 모든 외부 통신 암호화 -- **RabbitMQ TLS**: 메시지 브로커 연결 암호화 +- **Event Hubs AMQP over TLS**: 메시지 스트리밍 연결 암호화 #### 저장 암호화 - **민감 정보 암호화**: 사용자 인증 정보, 비밀번호 @@ -778,18 +778,22 @@ HPA (Horizontal Pod Autoscaler) 설정: --- -### ADR-002: RabbitMQ 선택 +### ADR-002: Azure Event Hubs 선택 **날짜**: 2025-01-22 -**상태**: 승인 -**결정**: 메시지 브로커로 RabbitMQ 사용 +**상태**: 수정됨 (2025-01-23) +**결정**: 메시지 브로커로 Azure Event Hubs 사용 **이유**: -- Pub/Sub 및 Queue 패턴 모두 지원 -- 성숙한 기술, 안정적 운영 -- Spring AMQP와 원활한 통합 +- **완전 관리형 서비스**: 인프라 운영 부담 제거 +- **고성능 스트리밍**: 초당 수백만 이벤트 처리 가능 +- **자동 확장**: Throughput Units 자동 조정 +- **Azure 생태계 통합**: Azure Speech, Azure AI 서비스와 완벽한 연동 +- **Kafka 호환**: 기존 Kafka 클라이언트 재사용 가능 +- **메시지 보관**: 1-7일 이벤트 재처리 가능 **대안**: -- Apache Kafka: 고처리량이지만 운영 복잡도 높음 -- AWS SQS: 클라우드 종속성 발생 +- RabbitMQ: 자체 운영 필요, 확장성 제한 +- Apache Kafka: 자체 운영 복잡도 높음 +- AWS Kinesis: Azure 환경에서 최적화 부족 --- diff --git a/design/backend/logical/logical-architecture.mmd b/design/backend/logical/logical-architecture.mmd index a52edd9..16a337f 100644 --- a/design/backend/logical/logical-architecture.mmd +++ b/design/backend/logical/logical-architecture.mmd @@ -37,7 +37,7 @@ graph TB Redis["Redis
- 분산 캐시 (Cache-Aside)
- 작업 상태 저장
- 세션 관리"] %% 메시지 브로커 - RabbitMQ["RabbitMQ
- Pub/Sub 패턴
- Queue-Based Load Leveling"] + EventHubs["Azure Event Hubs
- Pub/Sub 패턴 (Consumer Groups)
- Partition 기반 부하 분산
- 이벤트 스트리밍"] end %% ======================================== @@ -79,18 +79,18 @@ graph TB %% ======================================== %% ======================================== - %% 서비스 → RabbitMQ (이벤트 발행) + %% 서비스 → Event Hubs (이벤트 발행) %% ======================================== - MeetingSvc ==>|"이벤트 발행"| RabbitMQ - STTSvc ==>|"이벤트 발행"| RabbitMQ - AISvc ==>|"이벤트 발행"| RabbitMQ + MeetingSvc ==>|"이벤트 발행
(meeting-events)"| EventHubs + STTSvc ==>|"이벤트 발행
(transcript-events)"| EventHubs + AISvc ==>|"이벤트 발행
(transcript-events)"| EventHubs %% ======================================== %% 이벤트 구독 정보 (노트) %% ======================================== Note1["📋 이벤트 구독 매핑

Meeting Service:
- TranscriptSummaryCreated

STT Service:
- MeetingEnded

AI Service:
- MeetingCreated
- MeetingEnded
- TranscriptReady

Notification Service:
- MeetingCreated
- MeetingEnded
- TranscriptCreated
- TodoCreated
- TodoCompleted"] - Note1 -.->|"참조"| RabbitMQ + Note1 -.->|"참조"| EventHubs %% ======================================== %% 서비스 → 외부 시스템 @@ -117,5 +117,5 @@ graph TB class STTSvc,AISvc special class NotifySvc support class Redis infra - class RabbitMQ mq + class EventHubs mq class AzureSpeech,LLM,EmailSMS external