논리 아키텍처 단순화 (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:
hiondal 2025-10-22 14:15:16 +09:00
parent e1d411e989
commit 2b58bed5ce
2 changed files with 308 additions and 209 deletions

View File

@ -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 패턴: 여전히 네트워크 호출 필요, 복잡도 증가

View File

@ -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