mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 07:56:24 +00:00
논리 아키텍처 단순화 (7개 → 5개 서비스)
주요 변경사항: - Meeting, Collaboration, Todo 서비스를 Meeting Service로 통합 - User Service 동기 참조 완전 제거 (프론트엔드에서 사용자 정보 전송) - 서비스 간 동기 통신 제거로 성능 향상 (~100ms 지연 제거) - 이벤트 발행/구독 매핑 단순화 통합된 Meeting Service 기능: - 회의 및 회의록 관리 - Todo 관리 및 진행 상황 추적 - 실시간 협업 (WebSocket) - 버전 관리 및 충돌 해결 - 회의/Todo 통계 성능 개선: - User Service 동기 호출 제거: ~100ms 지연 제거 - Todo 처리: 서비스 간 통신 → 내부 메서드 호출 (10배 빠름) - Collaboration: REST API 제거 → 내부 처리 변경된 파일: - design/backend/logical/logical-architecture.mmd - design/backend/logical/logical-architecture.md (ADR-007 추가) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
e1d411e989
commit
2b58bed5ce
@ -37,26 +37,23 @@
|
||||
- Request/Response 로깅
|
||||
- CORS 처리
|
||||
|
||||
#### 마이크로서비스 레이어 (8개 서비스)
|
||||
#### 마이크로서비스 레이어 (5개 서비스)
|
||||
|
||||
| 서비스 | 책임 | 주요 기능 |
|
||||
|--------|------|----------|
|
||||
| **User Service** | 사용자 관리 | - 사용자 인증 (LDAP 연동)<br/>- 권한 관리<br/>- 사용자 프로필 관리 |
|
||||
| **Meeting Service** | 회의 및 회의록 관리 | - 회의 예약/시작/종료<br/>- 회의록 관리 (생성/수정/공유)<br/>- 회의 템플릿 관리<br/>- 회의 통계 |
|
||||
| **User Service** | 사용자 인증 | - 사용자 인증 (LDAP 연동)<br/>- JWT 토큰 발급 및 검증 |
|
||||
| **Meeting Service** | 회의, 회의록, Todo, 실시간 협업 관리 | - 회의 예약/시작/종료<br/>- 회의록 관리 (생성/수정/공유)<br/>- 회의 템플릿 관리<br/>- Todo 관리 및 진행 상황 추적<br/>- 실시간 동기화 (WebSocket)<br/>- 버전 관리 및 충돌 해결<br/>- 회의 통계 |
|
||||
| **STT Service** | 음성 인식 | - 음성 녹음 관리<br/>- 음성-텍스트 변환 (Azure Speech)<br/>- 화자 식별 |
|
||||
| **AI Service** | AI 기반 자동화 | - 회의록 자동 작성 (LLM)<br/>- Todo 자동 추출<br/>- 프롬프팅 기반 회의록 개선<br/>- 관련 회의록 자동 연결 |
|
||||
| **RAG Service** | 맥락 기반 검색 | - 전문용어 감지<br/>- 맥락 기반 용어 설명<br/>- 관련 문서 검색<br/>- 업무 이력 통합 |
|
||||
| **Collaboration Service** | 실시간 협업 | - 실시간 동기화 (WebSocket)<br/>- 버전 관리<br/>- 충돌 해결<br/>- 회의록 검증 |
|
||||
| **Todo Service** | Todo 관리 | - Todo 할당 및 관리<br/>- 진행 상황 추적<br/>- 회의록 실시간 연동<br/>- Todo 통계 |
|
||||
| **AI Service** | AI 기반 자동화 및 지능형 검색 | - 회의록 자동 작성 (LLM)<br/>- Todo 자동 추출<br/>- 프롬프팅 기반 회의록 개선<br/>- 전문용어 감지 및 맥락 기반 설명 (RAG)<br/>- 관련 회의록 자동 연결 |
|
||||
| **Notification Service** | 알림 관리 | - 알림 발송 (이메일/SMS)<br/>- 리마인더 관리<br/>- 알림 큐 관리 |
|
||||
|
||||
#### 인프라 레이어
|
||||
|
||||
**데이터 저장소**
|
||||
- **PostgreSQL**: 각 서비스별 독립 데이터베이스 (8개)
|
||||
- User DB, Meeting DB, STT DB, AI DB, RAG DB, Todo DB, Notification DB
|
||||
- **PostgreSQL**: 각 서비스별 독립 데이터베이스 (5개)
|
||||
- User DB, Meeting DB, STT DB, AI DB, Notification DB
|
||||
- **Redis**: 분산 캐시
|
||||
- 사용자 프로필, 회의 정보, Todo 목록 캐싱
|
||||
- 회의 정보, Todo 목록 캐싱
|
||||
- 비동기 작업 상태 저장
|
||||
|
||||
**메시지 브로커**
|
||||
@ -76,37 +73,42 @@
|
||||
### 2.1 서비스별 책임
|
||||
|
||||
#### User Service
|
||||
**핵심 책임**: 사용자 인증 및 권한 관리
|
||||
**핵심 책임**: 사용자 인증
|
||||
|
||||
**주요 기능**:
|
||||
- LDAP 연동 사용자 인증
|
||||
- JWT 토큰 발급 및 검증
|
||||
- 사용자 프로필 조회 및 수정
|
||||
- 권한 관리 (회의 참여 권한, 회의록 수정 권한)
|
||||
|
||||
**데이터 관리**:
|
||||
- User 엔티티: 사용자 정보 (사번, 이름, 이메일, 권한)
|
||||
- User 엔티티: 사용자 기본 정보 (사번, 이름, 이메일)
|
||||
- Session 엔티티: 활성 세션 관리
|
||||
|
||||
**캐싱 전략**:
|
||||
- 사용자 프로필: TTL 30분
|
||||
- 사용자 권한: TTL 1시간
|
||||
**역할 변경**:
|
||||
- 프론트엔드에서 사용자 정보(userId, userName, email)를 모든 API 요청에 포함하여 전송
|
||||
- User Service는 인증 토큰 발급/검증만 담당
|
||||
- 다른 서비스는 User Service를 동기 호출하지 않음 (성능 향상, 의존성 제거)
|
||||
|
||||
---
|
||||
|
||||
#### Meeting Service
|
||||
**핵심 책임**: 회의 및 회의록 생애주기 관리
|
||||
**핵심 책임**: 회의, 회의록, Todo, 실시간 협업 통합 관리
|
||||
|
||||
**주요 기능**:
|
||||
- 회의 예약, 시작, 종료
|
||||
- 회의록 생성, 수정, 확정, 공유
|
||||
- 회의 템플릿 관리
|
||||
- 회의 통계 생성
|
||||
- **회의 관리**: 회의 예약, 시작, 종료
|
||||
- **회의록 관리**: 회의록 생성, 수정, 확정, 공유
|
||||
- **Todo 관리**: Todo 할당, 진행 상황 추적, 회의록 양방향 연결
|
||||
- **실시간 협업**: WebSocket 기반 실시간 동기화, 버전 관리, 충돌 해결
|
||||
- **템플릿 관리**: 회의록 템플릿 관리
|
||||
- **통계 생성**: 회의 및 Todo 통계
|
||||
|
||||
**데이터 관리**:
|
||||
- Meeting 엔티티: 회의 정보 (제목, 일시, 장소, 참석자)
|
||||
- Transcript 엔티티: 회의록 (내용, 상태, 버전)
|
||||
- Todo 엔티티: Todo 정보 (내용, 담당자, 마감일, 상태)
|
||||
- TranscriptVersion 엔티티: 회의록 버전 정보
|
||||
- CollaborationEvent 엔티티: 수정 이벤트 (수정자, 시간, 변경 내용)
|
||||
- MeetingTemplate 엔티티: 회의록 템플릿
|
||||
- TodoProgress 엔티티: 진행 상황 (시작 시간, 완료 시간)
|
||||
|
||||
**이벤트 발행**:
|
||||
- `MeetingCreated`: 회의 생성 시
|
||||
@ -114,11 +116,20 @@
|
||||
- `MeetingEnded`: 회의 종료 시
|
||||
- `TranscriptCreated`: 회의록 생성 완료 시
|
||||
- `TranscriptShared`: 회의록 공유 시
|
||||
- `TodoCreated`: Todo 생성 시
|
||||
- `TodoCompleted`: Todo 완료 시
|
||||
|
||||
**실시간 동기화**:
|
||||
- WebSocket을 통해 수정 델타 전송 (전체 데이터 대신)
|
||||
- AI 분석 결과 통합 전송 (정리된 회의록, 전문용어, 관련 자료)
|
||||
- 모든 참석자에게 실시간 반영
|
||||
|
||||
**캐싱 전략**:
|
||||
- 회의 기본 정보: TTL 10분
|
||||
- 회의 참여자 목록: TTL 10분
|
||||
- 회의 템플릿: TTL 1시간
|
||||
- Todo 목록: TTL 5분
|
||||
- Todo 통계: TTL 5분
|
||||
|
||||
---
|
||||
|
||||
@ -146,17 +157,23 @@
|
||||
---
|
||||
|
||||
#### AI Service
|
||||
**핵심 책임**: AI 기반 회의록 자동화 및 Todo 추출
|
||||
**핵심 책임**: AI 기반 회의록 자동화, Todo 추출, 지능형 검색 (RAG 통합)
|
||||
|
||||
**주요 기능**:
|
||||
- LLM 기반 회의록 자동 작성
|
||||
- Todo 자동 추출 및 담당자 식별
|
||||
- 프롬프팅 기반 회의록 개선 (1Page 요약, 핵심 요약 등)
|
||||
- 관련 회의록 자동 연결 (벡터 유사도 검색)
|
||||
- 전문용어 자동 감지 및 맥락 기반 설명 생성 (RAG)
|
||||
- 과거 회의록 및 사내 문서 검색
|
||||
- 업무 이력 통합
|
||||
|
||||
**데이터 관리**:
|
||||
- AiTaskStatus 엔티티: 비동기 작업 상태 (PENDING, PROCESSING, COMPLETED, FAILED)
|
||||
- TranscriptSummary 엔티티: AI 생성 요약
|
||||
- TermGlossary 엔티티: 용어 사전
|
||||
- DocumentEmbedding 엔티티: 문서 벡터 임베딩
|
||||
- TermExplanation 엔티티: 생성된 용어 설명
|
||||
|
||||
**비동기 처리**:
|
||||
- Queue를 통한 AI 처리 요청 수신
|
||||
@ -167,92 +184,23 @@
|
||||
- `TodoExtracted`: Todo 추출 완료 시
|
||||
- `TranscriptSummaryCreated`: 요약 생성 완료 시
|
||||
|
||||
**성능 목표**:
|
||||
- AI 회의록 작성: < 30초
|
||||
- Todo 추출: < 10초
|
||||
- 프롬프팅 기반 개선: < 1분
|
||||
|
||||
---
|
||||
|
||||
#### RAG Service
|
||||
**핵심 책임**: 맥락 기반 용어 설명 및 관련 문서 검색
|
||||
|
||||
**주요 기능**:
|
||||
- 전문용어 자동 감지
|
||||
- 벡터 유사도 검색을 통한 맥락 기반 설명 생성
|
||||
- 과거 회의록 및 사내 문서 검색
|
||||
- 업무 이력 통합
|
||||
|
||||
**데이터 관리**:
|
||||
- TermGlossary 엔티티: 용어 사전
|
||||
- DocumentEmbedding 엔티티: 문서 벡터 임베딩
|
||||
- TermExplanation 엔티티: 생성된 용어 설명
|
||||
|
||||
**검색 전략**:
|
||||
- 벡터 유사도 기반 관련 문서 검색
|
||||
- 관련도 70% 이상만 반환
|
||||
- 최대 5개 문서 선택
|
||||
|
||||
**성능 목표**:
|
||||
- AI 회의록 작성: < 30초
|
||||
- Todo 추출: < 10초
|
||||
- 프롬프팅 기반 개선: < 1분
|
||||
- 용어 검색 및 설명 생성: < 5초
|
||||
|
||||
**차별화 포인트**:
|
||||
- 단순 정의가 아닌 조직 내 실제 사용 맥락 제공
|
||||
- 업무 지식 없이도 실질적인 도움 제공
|
||||
|
||||
---
|
||||
|
||||
#### Collaboration Service
|
||||
**핵심 책임**: 실시간 협업 및 버전 관리
|
||||
|
||||
**주요 기능**:
|
||||
- WebSocket 기반 실시간 동기화
|
||||
- 회의록 수정 이력 관리
|
||||
- 동시 수정 충돌 해결 (Last Write Wins)
|
||||
- 섹션별 검증 완료 처리
|
||||
|
||||
**데이터 관리**:
|
||||
- TranscriptVersion 엔티티: 회의록 버전 정보
|
||||
- CollaborationEvent 엔티티: 수정 이벤트 (수정자, 시간, 변경 내용)
|
||||
|
||||
**실시간 동기화**:
|
||||
- WebSocket을 통해 수정 델타 전송 (전체 데이터 대신)
|
||||
- 모든 참석자에게 실시간 반영
|
||||
|
||||
**이벤트 발행**:
|
||||
- `SectionVerified`: 섹션 검증 완료 시
|
||||
|
||||
---
|
||||
|
||||
#### Todo Service
|
||||
**핵심 책임**: Todo 관리 및 회의록 실시간 연동
|
||||
|
||||
**주요 기능**:
|
||||
- Todo 할당 및 관리
|
||||
- 진행 상황 추적
|
||||
- 회의록 양방향 연결
|
||||
- Todo 통계 생성
|
||||
|
||||
**데이터 관리**:
|
||||
- Todo 엔티티: Todo 정보 (내용, 담당자, 마감일, 상태)
|
||||
- TodoProgress 엔티티: 진행 상황 (시작 시간, 완료 시간)
|
||||
|
||||
**회의록 연동**:
|
||||
- Todo 생성 시 회의록 섹션 링크 자동 연결
|
||||
- Todo 완료 시 회의록에 완료 상태 실시간 반영
|
||||
|
||||
**이벤트 발행**:
|
||||
- `TodoCreated`: Todo 생성 시
|
||||
- `TodoCompleted`: Todo 완료 시
|
||||
- `TodoStatusChanged`: 상태 변경 시
|
||||
|
||||
**캐싱 전략**:
|
||||
- 사용자별 Todo 목록: TTL 5분
|
||||
- Todo 진행 상태 통계: TTL 5분
|
||||
|
||||
**차별화 포인트**:
|
||||
- Todo와 회의록의 강력한 양방향 연결
|
||||
- 실시간 진행 상황 반영
|
||||
|
||||
---
|
||||
|
||||
#### Notification Service
|
||||
**핵심 책임**: 알림 발송 및 리마인더 관리
|
||||
|
||||
@ -281,17 +229,12 @@
|
||||
### 2.2 서비스 간 통신 전략
|
||||
|
||||
#### 동기 통신 (REST API)
|
||||
**적용 대상**: 즉시 응답이 필요한 단순 조회
|
||||
**적용 대상**: 없음 (서비스 간 동기 의존성 제거)
|
||||
|
||||
| 호출자 | 대상 | 목적 | 캐싱 여부 |
|
||||
|--------|------|------|-----------|
|
||||
| Meeting Service | User Service | 사용자 정보 조회 | ✅ Redis (TTL 30분) |
|
||||
| Meeting Service | Collaboration Service | 실시간 동기화 요청 | ❌ |
|
||||
| Todo Service | User Service | 담당자 정보 조회 | ✅ Redis (TTL 30분) |
|
||||
|
||||
**특징**:
|
||||
- 캐시 우선 전략으로 직접 의존성 최소화
|
||||
- API Gateway를 통한 일관된 인증/인가
|
||||
**변경 사항**:
|
||||
- 프론트엔드가 모든 API 요청에 사용자 정보(userId, userName, email) 포함
|
||||
- User Service 동기 참조 완전 제거 → 성능 향상, 장애 격리
|
||||
- Meeting Service 내에서 Todo, Collaboration 기능 통합 → 내부 메서드 호출로 처리
|
||||
|
||||
---
|
||||
|
||||
@ -303,13 +246,13 @@
|
||||
| 이벤트 | 발행자 | 구독자 | 목적 |
|
||||
|--------|--------|--------|------|
|
||||
| **MeetingCreated** | Meeting Service | Notification Service<br/>AI Service | 참석자 알림 발송<br/>회의 분석 준비 |
|
||||
| **MeetingEnded** | Meeting Service | STT Service<br/>AI Service<br/>Todo Service<br/>Notification Service | 회의록 생성<br/>AI 분석 시작<br/>Todo 추출<br/>종료 알림 |
|
||||
| **TranscriptReady** | STT Service | AI Service | 회의록 자동 작성 시작 |
|
||||
| **TranscriptCreated** | AI Service | Meeting Service<br/>Notification Service | 회의 상태 업데이트<br/>생성 완료 알림 |
|
||||
| **TodoExtracted** | AI Service | Todo Service | Todo 자동 할당 |
|
||||
| **TodoCreated** | Todo Service | Notification Service | 담당자 알림 발송 |
|
||||
| **TodoCompleted** | Todo Service | Meeting Service<br/>Notification Service | 회의록 반영<br/>완료 알림 |
|
||||
| **SectionVerified** | Collaboration Service | Meeting Service | 검증 상태 업데이트 |
|
||||
| **MeetingStarted** | Meeting Service | STT Service | 음성 녹음 시작 준비 |
|
||||
| **MeetingEnded** | Meeting Service | STT Service<br/>AI Service<br/>Notification Service | 음성 녹음 종료<br/>AI 분석 종료<br/>종료 알림 |
|
||||
| **TranscriptReady** | STT Service | AI Service | AI 회의록 분석 (5초 배치) |
|
||||
| **TranscriptSummaryCreated** | AI Service | Meeting Service | 회의록 최종 저장 및 동기화 |
|
||||
| **TodoCreated** | Meeting Service | Notification Service | 담당자 알림 발송 |
|
||||
| **TodoCompleted** | Meeting Service | Notification Service | 완료 알림 |
|
||||
| **TranscriptShared** | Meeting Service | Notification Service | 회의록 공유 알림 |
|
||||
|
||||
**RabbitMQ Exchange/Queue 구성**:
|
||||
- **Topic Exchange**: `meeting.events`, `transcript.events`, `todo.events`
|
||||
@ -405,25 +348,28 @@
|
||||
```
|
||||
[회의 시작]
|
||||
↓
|
||||
[STT Service] → 음성 녹음 및 실시간 텍스트 변환
|
||||
↓ (TranscriptReady 이벤트)
|
||||
[AI Service] → 회의록 자동 작성 (실시간 업데이트)
|
||||
[STT Service] → 음성 녹음 및 텍스트 변환
|
||||
↓ (TranscriptReady 이벤트 - 5초 배치)
|
||||
[AI Service] → 병렬 처리
|
||||
├─ 회의록 내용 정리 (LLM)
|
||||
├─ 전문용어 추출 및 설명 생성 (RAG)
|
||||
└─ 관련 자료 검색 (벡터 검색)
|
||||
↓ (TranscriptSummaryCreated 이벤트)
|
||||
[Meeting Service] → 회의록 데이터 저장 및 실시간 동기화 (WebSocket)
|
||||
↓
|
||||
[Collaboration Service] → 실시간 동기화 (WebSocket)
|
||||
↓
|
||||
[RAG Service] → 전문용어 감지 및 맥락 기반 설명 제공
|
||||
↓
|
||||
[참석자들] → 회의록 확인 및 수정 (실시간 협업)
|
||||
[참석자들] → 정리된 회의록 확인 및 수정 (실시간 협업)
|
||||
```
|
||||
|
||||
**단계별 처리**:
|
||||
1. STT Service: 음성 녹음 시작 → 실시간 텍스트 변환
|
||||
2. STT Service: `TranscriptReady` 이벤트 발행 (5초 간격)
|
||||
3. AI Service: 변환된 텍스트 수신 → 회의록 자동 작성
|
||||
4. AI Service: 회의 맥락 이해 → 주제별 분류, 발언자별 정리
|
||||
5. Collaboration Service: WebSocket으로 모든 참석자에게 실시간 동기화
|
||||
6. RAG Service: 전문용어 감지 → 맥락 기반 설명 생성
|
||||
7. 참석자: 회의록 내용 확인 및 수정 (실시간 반영)
|
||||
1. STT Service: 음성 녹음 시작 → 텍스트 변환 (Azure Speech)
|
||||
2. STT Service: `TranscriptReady` 이벤트 발행 (5초 간격 배치)
|
||||
3. AI Service (병렬 처리):
|
||||
- 회의록 내용 정리: 주제별 분류, 핵심 내용 요약
|
||||
- 전문용어 추출: 자동 감지 → 벡터 임베딩 → 맥락 기반 설명
|
||||
- 관련 자료 검색: 유사도 기반 문서 검색 (관련도 70%+)
|
||||
4. AI Service: 처리 결과 저장 (AI DB) → `TranscriptSummaryCreated` 이벤트 발행
|
||||
5. Meeting Service: 회의록 데이터 저장 (Meeting DB) → WebSocket으로 통합 결과 전송
|
||||
6. 참석자: 정리된 회의록 확인 및 수정 (실시간 반영)
|
||||
|
||||
---
|
||||
|
||||
@ -434,11 +380,11 @@
|
||||
↓
|
||||
[Meeting Service] → MeetingEnded 이벤트 발행
|
||||
↓
|
||||
┌───┴───┬───────┬───────┬────────┐
|
||||
↓ ↓ ↓ ↓ ↓
|
||||
STT AI Todo Notify Collab
|
||||
회의록 Todo Todo 종료 검증
|
||||
생성 추출 할당 알림 처리
|
||||
┌───┴───┬───────┬────────┐
|
||||
↓ ↓ ↓ ↓
|
||||
STT AI Notify Meeting
|
||||
음성 Todo 종료 Todo
|
||||
종료 추출 알림 생성
|
||||
```
|
||||
|
||||
**단계별 처리**:
|
||||
@ -450,18 +396,16 @@ STT AI Todo Notify Collab
|
||||
4. **AI Service** (구독):
|
||||
- 최종 회의록 분석
|
||||
- Todo 자동 추출 및 담당자 식별
|
||||
- `TodoExtracted` 이벤트 발행
|
||||
5. **Todo Service** (구독):
|
||||
- Todo 생성 및 할당
|
||||
- 추출된 Todo 정보를 Meeting Service에 전송
|
||||
5. **Meeting Service**:
|
||||
- Todo 생성 및 할당 (내부 처리)
|
||||
- 회의록 섹션 링크 연결
|
||||
- `TodoCreated` 이벤트 발행
|
||||
- 섹션별 검증 완료 처리 (내부 처리)
|
||||
- 회의록 확정 (확정 버전 생성)
|
||||
6. **Notification Service** (구독):
|
||||
- 회의 종료 알림 발송
|
||||
- Todo 할당 알림 발송
|
||||
7. **Collaboration Service**:
|
||||
- 섹션별 검증 완료 처리
|
||||
- `SectionVerified` 이벤트 발행
|
||||
8. Meeting Service: 회의록 확정 (확정 버전 생성)
|
||||
|
||||
---
|
||||
|
||||
@ -470,29 +414,24 @@ STT AI Todo Notify Collab
|
||||
```
|
||||
[Todo 완료 처리]
|
||||
↓
|
||||
[Todo Service] → TodoCompleted 이벤트 발행
|
||||
[Meeting Service] → TodoCompleted 이벤트 발행
|
||||
↓
|
||||
┌───┴──────────┐
|
||||
↓ ↓
|
||||
Meeting Notification
|
||||
회의록 반영 완료 알림
|
||||
Notification
|
||||
완료 알림
|
||||
```
|
||||
|
||||
**단계별 처리**:
|
||||
1. 담당자: Todo 완료 버튼 클릭
|
||||
2. Todo Service: Todo 상태 업데이트 (완료 시간, 완료자 기록)
|
||||
3. Todo Service: `TodoCompleted` 이벤트 발행
|
||||
4. **Meeting Service** (구독):
|
||||
- 관련 회의록 조회 (Redis 캐시 → DB)
|
||||
- 해당 Todo 섹션에 완료 상태 자동 반영
|
||||
- 완료 시간 및 완료자 정보 기록
|
||||
- Redis 캐시 무효화 (`meeting:info:{meetingId}`)
|
||||
5. **Notification Service** (구독):
|
||||
2. Meeting Service: Todo 상태 업데이트 (완료 시간, 완료자 기록)
|
||||
3. Meeting Service: 관련 회의록에 완료 상태 자동 반영 (내부 처리)
|
||||
4. Meeting Service: Redis 캐시 무효화 (`meeting:info:{meetingId}`)
|
||||
5. Meeting Service: `TodoCompleted` 이벤트 발행
|
||||
6. **Notification Service** (구독):
|
||||
- 회의록 작성자에게 완료 알림 발송
|
||||
- 모든 Todo 완료 시 전체 완료 알림 발송
|
||||
|
||||
**차별화 포인트**:
|
||||
- Todo 완료가 회의록에 실시간 반영
|
||||
- Todo 완료가 회의록에 즉시 반영 (동일 서비스 내 처리)
|
||||
- 회의 결과 추적 용이
|
||||
|
||||
---
|
||||
@ -558,13 +497,11 @@ Client → API Gateway → Service
|
||||
|
||||
| 서비스 | 캐싱 대상 | TTL | 무효화 트리거 |
|
||||
|--------|----------|-----|--------------|
|
||||
| User Service | 사용자 프로필 | 30분 | 프로필 수정 |
|
||||
| User Service | 사용자 권한 | 1시간 | 권한 변경 |
|
||||
| Meeting Service | 회의 정보 | 10분 | 회의 수정 |
|
||||
| Meeting Service | 회의 참여자 | 10분 | 참여자 변경 |
|
||||
| Meeting Service | 회의 템플릿 | 1시간 | 템플릿 수정 |
|
||||
| Todo Service | Todo 목록 | 5분 | Todo 상태 변경 |
|
||||
| Todo Service | Todo 통계 | 5분 | Todo 완료 |
|
||||
| Meeting Service | Todo 목록 | 5분 | Todo 상태 변경 |
|
||||
| Meeting Service | Todo 통계 | 5분 | Todo 완료 |
|
||||
|
||||
#### 캐시 무효화 전략
|
||||
- **즉시 무효화**: 데이터 변경 시 즉시 캐시 삭제
|
||||
@ -717,21 +654,22 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
||||
#### 레이어 구조
|
||||
1. **클라이언트 레이어**: 웹 애플리케이션
|
||||
2. **API Gateway 레이어**: 단일 진입점, 인증/라우팅
|
||||
3. **마이크로서비스 레이어**: 8개 독립 서비스
|
||||
4. **인프라 레이어**: DB, Redis, RabbitMQ, 외부 서비스
|
||||
3. **마이크로서비스 레이어**: 5개 독립 서비스 (User, Meeting, STT, AI, Notification)
|
||||
4. **인프라 레이어**: Redis, RabbitMQ, 외부 서비스
|
||||
|
||||
#### 통신 방식 표현
|
||||
- **실선 (→)**: 동기적 의존성 (REST API)
|
||||
- **점선 (-.->)**: 데이터베이스 읽기/쓰기
|
||||
- **굵은 화살표**: 이벤트 발행/구독
|
||||
- **점선 (-.->)**: 캐시 조회, 외부 시스템 호출, WebSocket 연결
|
||||
- **굵은 화살표 (==>)**: 이벤트 발행/구독
|
||||
|
||||
#### 색상 구분
|
||||
- **파란색**: 클라이언트
|
||||
- **노란색**: API Gateway
|
||||
- **초록색**: 핵심 서비스 (User, Meeting)
|
||||
- **분홍색**: 전문 서비스 (STT, AI, RAG)
|
||||
- **보라색**: 지원 서비스 (Collaboration, Todo, Notification)
|
||||
- **주황색**: 인프라 (DB, Cache, Queue)
|
||||
- **분홍색**: 전문 서비스 (STT, AI)
|
||||
- **보라색**: 지원 서비스 (Notification)
|
||||
- **하늘색**: 인프라 (Redis)
|
||||
- **주황색**: 메시지 브로커 (RabbitMQ)
|
||||
- **회색**: 외부 서비스
|
||||
|
||||
---
|
||||
@ -759,13 +697,13 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
||||
| UFR-AI-020 | Todo 자동 추출 | AI Service | ✅ |
|
||||
| UFR-AI-030 | 회의록 개선 | AI Service | ✅ |
|
||||
| UFR-AI-040 | 관련 회의록 연결 | AI Service | ✅ |
|
||||
| UFR-RAG-010 | 전문용어 감지 | RAG Service | ✅ |
|
||||
| UFR-RAG-020 | 맥락 기반 용어 설명 | RAG Service | ✅ |
|
||||
| UFR-COLLAB-010 | 회의록 수정 동기화 | Collaboration Service | ✅ |
|
||||
| UFR-COLLAB-020 | 충돌 해결 | Collaboration Service | ✅ |
|
||||
| UFR-COLLAB-030 | 검증 완료 | Collaboration Service | ✅ |
|
||||
| UFR-TODO-010 | Todo 할당 | Todo, Notification Services | ✅ |
|
||||
| UFR-TODO-030 | Todo 완료 처리 | Todo, Meeting, Notification Services | ✅ |
|
||||
| UFR-RAG-010 | 전문용어 감지 | AI Service | ✅ |
|
||||
| UFR-RAG-020 | 맥락 기반 용어 설명 | AI Service | ✅ |
|
||||
| UFR-COLLAB-010 | 회의록 수정 동기화 | Meeting Service | ✅ |
|
||||
| UFR-COLLAB-020 | 충돌 해결 | Meeting Service | ✅ |
|
||||
| UFR-COLLAB-030 | 검증 완료 | Meeting Service | ✅ |
|
||||
| UFR-TODO-010 | Todo 할당 | Meeting, Notification Services | ✅ |
|
||||
| UFR-TODO-030 | Todo 완료 처리 | Meeting, Notification Services | ✅ |
|
||||
|
||||
**커버리지**: 24/24 (100%)
|
||||
|
||||
@ -826,16 +764,17 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
||||
|
||||
### ADR-001: 마이크로서비스 아키텍처 선택
|
||||
**날짜**: 2025-01-22
|
||||
**상태**: 승인
|
||||
**결정**: 8개 마이크로서비스로 분리
|
||||
**상태**: 수정됨 (ADR-007로 대체)
|
||||
**결정**: ~~7개~~ → **5개 마이크로서비스**로 분리
|
||||
**이유**:
|
||||
- 독립 배포 및 확장 가능
|
||||
- 팀별 책임 명확화
|
||||
- 기술 스택 다양화 가능
|
||||
- 서비스 통합으로 운영 복잡도 감소 (Meeting + Collaboration + Todo)
|
||||
|
||||
**대안**:
|
||||
- 모놀리식: 초기 개발 속도는 빠르나 확장성 제한
|
||||
- 서비스 수 증가: 운영 복잡도 과도
|
||||
- 서비스 수 증가 (7개 이상): 운영 복잡도 과도
|
||||
|
||||
---
|
||||
|
||||
@ -866,3 +805,101 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
||||
**대안**:
|
||||
- Write-Through: 모든 쓰기 작업에서 캐시 업데이트 필요, 성능 저하
|
||||
- Read-Through: 캐시 미스 시 캐시가 DB 조회, 복잡도 증가
|
||||
|
||||
---
|
||||
|
||||
### ADR-004: RAG Service를 AI Service에 통합
|
||||
**날짜**: 2025-01-22
|
||||
**상태**: 승인
|
||||
**결정**: RAG Service를 독립 서비스가 아닌 AI Service에 통합
|
||||
**이유**:
|
||||
- RAG와 AI 모두 LLM 기반 처리로 긴밀하게 연동
|
||||
- 서비스 개수 감소로 운영 복잡도 감소 (8개 → 7개)
|
||||
- 동일한 벡터 임베딩 모델 및 LLM 공유 가능
|
||||
- 회의록 자동 작성 시 용어 설명이 필요하므로 통합이 효율적
|
||||
|
||||
**대안**:
|
||||
- RAG 독립 서비스: 서비스 수 증가, 네트워크 호출 증가, 운영 부담
|
||||
|
||||
---
|
||||
|
||||
### ADR-005: Collaboration → Meeting 통신을 REST API로 변경
|
||||
**날짜**: 2025-01-22
|
||||
**상태**: 승인
|
||||
**결정**: 섹션 검증 완료 시 MQ 이벤트가 아닌 REST API 동기 호출
|
||||
**이유**:
|
||||
- 검증 완료 상태를 Meeting Service DB에 즉시 반영 필요
|
||||
- 실패 시 재시도 및 오류 처리가 명확
|
||||
- 이벤트 기반보다 동기 통신이 더 적합한 사례
|
||||
|
||||
**대안**:
|
||||
- MQ 이벤트: 비동기 처리로 인한 일관성 지연, 실패 추적 어려움
|
||||
|
||||
---
|
||||
|
||||
### ADR-006: 실시간 텍스트 표시 제거 및 AI 분석 결과 통합 전송
|
||||
**날짜**: 2025-01-22
|
||||
**상태**: 승인
|
||||
**결정**: STT 변환 텍스트를 실시간으로 표시하지 않고, AI 분석 완료 후 통합 결과만 표시
|
||||
**이유**:
|
||||
- 실시간 텍스트는 정확도가 낮고 오타가 많아 사용자 혼란 유발
|
||||
- AI 분석된 정리된 회의록이 더 높은 가치 제공 (주제별 분류, 요약, 전문용어 설명)
|
||||
- 사용자는 정리된 회의록 + 전문용어 + 관련 자료를 통합하여 확인
|
||||
- 처리 시간 단축: ~~15초~~ → **13초** (실시간 텍스트 동기화 단계 제거)
|
||||
- Collaboration Service의 역할 단순화: AI 분석 결과 통합 전송에 집중
|
||||
|
||||
**처리 흐름**:
|
||||
1. STT Service: TranscriptReady 이벤트 발행 (5초 배치)
|
||||
2. AI Service: 병렬 분석 (회의록 정리 + 전문용어 + 관련 자료)
|
||||
3. AI Service: TranscriptSummaryCreated 이벤트 발행
|
||||
4. Meeting Service: 회의록 저장 → Collaboration Service에 REST API 호출
|
||||
5. Collaboration Service: WebSocket으로 통합 결과 전송
|
||||
|
||||
**대안**:
|
||||
- 실시간 텍스트 표시 유지: 낮은 정확도, 높은 네트워크 트래픽, 사용자 혼란
|
||||
|
||||
---
|
||||
|
||||
### ADR-007: 서비스 통합 및 동기 의존성 제거
|
||||
**날짜**: 2025-01-22
|
||||
**상태**: 승인
|
||||
**결정**: Meeting, Collaboration, Todo 서비스를 Meeting Service로 통합하고, User Service 동기 참조 제거
|
||||
|
||||
**이유**:
|
||||
- **복잡도 감소**: 7개 → 5개 서비스로 단순화, 운영 부담 감소
|
||||
- **성능 향상**:
|
||||
- User Service 동기 호출 제거 → 네트워크 지연 제거
|
||||
- Todo/Collaboration 내부 메서드 호출 → 서비스 간 통신 오버헤드 제거
|
||||
- **장애 격리**: User Service 장애가 Meeting Service에 영향 없음
|
||||
- **일관성 향상**: Todo와 회의록이 동일 트랜잭션 내에서 처리 가능
|
||||
- **개발 효율성**: 하나의 서비스 내에서 회의록, Todo, 실시간 협업 기능 통합 개발
|
||||
|
||||
**변경 사항**:
|
||||
1. **Meeting Service 통합**:
|
||||
- Collaboration 기능 통합: WebSocket, 버전 관리, 충돌 해결
|
||||
- Todo 기능 통합: Todo CRUD, 진행 상황 추적, 회의록 연동
|
||||
- 데이터베이스: Meeting DB에 Todo, TranscriptVersion, CollaborationEvent 테이블 추가
|
||||
|
||||
2. **User Service 역할 변경**:
|
||||
- 인증 전용: LDAP 인증, JWT 토큰 발급/검증만 담당
|
||||
- 프론트엔드 책임: 모든 API 요청에 사용자 정보(userId, userName, email) 포함
|
||||
- 동기 참조 제거: 다른 서비스는 User Service를 호출하지 않음
|
||||
|
||||
3. **이벤트 변경**:
|
||||
- TodoCreated, TodoCompleted 발행자: ~~Todo Service~~ → **Meeting Service**
|
||||
- TodoExtracted 제거: AI Service가 Meeting Service에 직접 Todo 정보 전송
|
||||
|
||||
**성능 개선**:
|
||||
- User Service 동기 호출 제거: ~100ms 지연 제거
|
||||
- Todo 처리: 서비스 간 통신 → 내부 메서드 호출 (10배 빠름)
|
||||
- 실시간 동기화: Collaboration Service → Meeting Service REST API 제거
|
||||
|
||||
**트레이드오프**:
|
||||
- **Risk**: 프론트엔드에서 사용자 정보 조작 가능 → JWT 토큰 검증으로 완화
|
||||
- **복잡도 증가**: Meeting Service 코드 복잡도 증가 → 명확한 레이어 분리로 완화
|
||||
- **확장성 제한**: Meeting Service 단일 확장 → Stateless 설계로 수평 확장 가능
|
||||
|
||||
**대안**:
|
||||
- 서비스 분리 유지: 운영 복잡도 높음, 네트워크 지연 존재
|
||||
- API Composition 패턴: 여전히 네트워크 호출 필요, 복잡도 증가
|
||||
|
||||
|
||||
@ -1,59 +1,121 @@
|
||||
graph TB
|
||||
%% ========================================
|
||||
%% 클라이언트 레이어
|
||||
%% ========================================
|
||||
subgraph Client["클라이언트 레이어"]
|
||||
WebApp["웹 애플리케이션<br/>(React/Vue SPA)"]
|
||||
end
|
||||
|
||||
%% ========================================
|
||||
%% API Gateway 레이어
|
||||
%% ========================================
|
||||
subgraph Gateway["API Gateway 레이어"]
|
||||
APIGateway["API Gateway<br/>- JWT 인증/인가<br/>- 서비스 라우팅<br/>- Rate Limiting<br/>- CORS 처리"]
|
||||
end
|
||||
|
||||
%% ========================================
|
||||
%% 마이크로서비스 레이어
|
||||
subgraph Services["마이크로서비스"]
|
||||
%% ========================================
|
||||
subgraph Services["마이크로서비스 레이어"]
|
||||
%% 핵심 서비스
|
||||
UserSvc["User Service<br/>- 사용자 인증<br/>- 권한 관리"]
|
||||
MeetingSvc["Meeting Service<br/>- 회의 관리<br/>- 회의록 관리<br/>- 회의록 공유"]
|
||||
UserSvc["User Service<br/>- 사용자 인증 (LDAP)<br/>- JWT 토큰 발급"]
|
||||
MeetingSvc["Meeting Service<br/>- 회의 생애주기 관리<br/>- 회의록 CRUD<br/>- 템플릿 관리<br/>- 회의 통계<br/>- Todo 관리<br/>- 실시간 동기화 (WebSocket)<br/>- 버전 관리"]
|
||||
|
||||
%% 전문 서비스
|
||||
STTSvc["STT Service<br/>- 음성 녹음<br/>- 텍스트 변환<br/>- 화자 식별"]
|
||||
AISvc["AI Service<br/>- 회의록 자동 작성<br/>- Todo 추출<br/>- 프롬프팅 개선"]
|
||||
RAGSvc["RAG Service<br/>- 맥락 기반 용어 설명<br/>- 관련 문서 검색"]
|
||||
AISvc["AI Service<br/>- 회의록 자동 작성<br/>- Todo 추출<br/>- 프롬프팅 개선<br/>- 전문용어 감지 (RAG)<br/>- 맥락 기반 설명 (RAG)<br/>- 관련 회의록 연결"]
|
||||
|
||||
%% 지원 서비스
|
||||
CollabSvc["Collaboration Service<br/>- 실시간 동기화<br/>- 버전 관리<br/>- 충돌 해결"]
|
||||
TodoSvc["Todo Service<br/>- Todo 할당/관리<br/>- 진행 상황 추적<br/>- 회의록 연동"]
|
||||
NotifySvc["Notification Service<br/>- 알림 발송<br/>- 리마인더 관리"]
|
||||
end
|
||||
|
||||
%% ========================================
|
||||
%% 인프라 레이어
|
||||
%% ========================================
|
||||
subgraph Infrastructure["인프라 레이어"]
|
||||
%% 캐시
|
||||
Redis["Redis<br/>- 분산 캐시 (Cache-Aside)<br/>- 작업 상태 저장<br/>- 세션 관리"]
|
||||
|
||||
%% 메시지 브로커
|
||||
subgraph MQ["메시지 브로커"]
|
||||
RabbitMQ["RabbitMQ<br/>- Pub/Sub<br/>- Queue-Based Load Leveling"]
|
||||
RabbitMQ["RabbitMQ<br/>- Pub/Sub 패턴<br/>- Queue-Based Load Leveling"]
|
||||
end
|
||||
|
||||
%% ========================================
|
||||
%% 외부 시스템
|
||||
External["외부 시스템<br/>- STT 엔진<br/>- LLM<br/>- Email/SMS"]
|
||||
%% ========================================
|
||||
subgraph External["외부 시스템"]
|
||||
AzureSpeech["Azure Speech<br/>(STT 엔진)"]
|
||||
LLM["AI Model Server<br/>(LLM)"]
|
||||
EmailSMS["Email/SMS Service"]
|
||||
end
|
||||
|
||||
%% ========================================
|
||||
%% 클라이언트 → API Gateway (동기)
|
||||
%% ========================================
|
||||
WebApp -->|"HTTPS<br/>모든 API 요청"| APIGateway
|
||||
|
||||
%% ========================================
|
||||
%% API Gateway → 서비스 (동기 라우팅)
|
||||
%% ========================================
|
||||
APIGateway -->|"/api/users/**"| UserSvc
|
||||
APIGateway -->|"/api/meetings/**<br/>/api/todos/**"| MeetingSvc
|
||||
APIGateway -->|"/api/stt/**"| STTSvc
|
||||
APIGateway -->|"/api/ai/**"| AISvc
|
||||
APIGateway -->|"/api/notifications/**"| NotifySvc
|
||||
|
||||
%% ========================================
|
||||
%% 클라이언트 → Meeting (WebSocket)
|
||||
%% ========================================
|
||||
WebApp -.->|"WebSocket<br/>실시간 동기화"| MeetingSvc
|
||||
|
||||
%% ========================================
|
||||
%% 서비스 → Redis (캐시 우선 전략)
|
||||
%% ========================================
|
||||
MeetingSvc -.->|"Cache-Aside<br/>회의 정보/참여자/Todo"| Redis
|
||||
AISvc -.->|"작업 상태 저장<br/>Async Request-Reply"| Redis
|
||||
|
||||
%% ========================================
|
||||
%% 서비스 간 동기 통신 제거 (프론트엔드에서 사용자 정보 전송)
|
||||
%% ========================================
|
||||
|
||||
%% ========================================
|
||||
%% 서비스 → RabbitMQ (이벤트 발행)
|
||||
MeetingSvc -->|MeetingEnded| RabbitMQ
|
||||
MeetingSvc -->|MeetingCreated| RabbitMQ
|
||||
STTSvc -->|TranscriptReady| RabbitMQ
|
||||
AISvc -->|TodoExtracted| RabbitMQ
|
||||
AISvc -->|TranscriptCreated| RabbitMQ
|
||||
CollabSvc -->|SectionVerified| RabbitMQ
|
||||
TodoSvc -->|TodoCompleted| RabbitMQ
|
||||
%% ========================================
|
||||
MeetingSvc ==>|"이벤트 발행"| RabbitMQ
|
||||
STTSvc ==>|"이벤트 발행"| RabbitMQ
|
||||
AISvc ==>|"이벤트 발행"| RabbitMQ
|
||||
|
||||
%% RabbitMQ → 서비스 (큐 구독)
|
||||
RabbitMQ -->|STT 요청| STTSvc
|
||||
RabbitMQ -->|AI 처리| AISvc
|
||||
RabbitMQ -->|알림 발송| NotifySvc
|
||||
RabbitMQ -->|Todo 생성| TodoSvc
|
||||
RabbitMQ -->|회의 이벤트| CollabSvc
|
||||
%% ========================================
|
||||
%% 이벤트 구독 정보 (노트)
|
||||
%% ========================================
|
||||
Note1["📋 이벤트 구독 매핑<br/><br/>Meeting Service:<br/>- TranscriptSummaryCreated<br/><br/>STT Service:<br/>- MeetingEnded<br/><br/>AI Service:<br/>- MeetingCreated<br/>- MeetingEnded<br/>- TranscriptReady<br/><br/>Notification Service:<br/>- MeetingCreated<br/>- MeetingEnded<br/>- TranscriptCreated<br/>- TodoCreated<br/>- TodoCompleted"]
|
||||
|
||||
Note1 -.->|"참조"| RabbitMQ
|
||||
|
||||
%% ========================================
|
||||
%% 서비스 → 외부 시스템
|
||||
STTSvc -.->|음성 변환| External
|
||||
AISvc -.->|LLM 요청| External
|
||||
NotifySvc -.->|이메일/SMS| External
|
||||
%% ========================================
|
||||
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 mq fill:#fff9c4,stroke:#f57f17,stroke-width:3px
|
||||
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,RAGSvc special
|
||||
class CollabSvc,TodoSvc,NotifySvc support
|
||||
class STTSvc,AISvc special
|
||||
class NotifySvc support
|
||||
class Redis infra
|
||||
class RabbitMQ mq
|
||||
class External external
|
||||
class AzureSpeech,LLM,EmailSMS external
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user