hgzero/design/backend/logical/logical-architecture.md
2025-10-21 13:33:34 +09:00

707 lines
24 KiB
Markdown

# 논리 아키텍처 설계서
## 1. 개요
### 1.1 목적
회의록 작성 및 공유 개선 서비스의 논리 아키텍처를 정의하고, 마이크로서비스 간 통신 전략과 클라우드 디자인 패턴 적용 방안을 제시합니다.
### 1.2 설계 원칙
#### 1.2.1 마이크로서비스 설계 원칙
- **서비스 독립성**: 각 서비스는 독립적으로 배포 가능하며, 서비스 간 직접 의존성 최소화
- **단일 책임**: 각 서비스는 명확한 비즈니스 책임을 가지며, 하나의 도메인 영역에 집중
- **느슨한 결합**: 이벤트 기반 통신을 통한 서비스 간 결합도 최소화
- **캐시 우선**: Redis를 통한 성능 최적화 및 서비스 간 데이터 공유 최소화
#### 1.2.2 통신 전략
- **동기 통신**: 즉시 응답이 필요한 단순 조회 (REST API)
- **비동기 통신**: 장시간 작업 및 이벤트 기반 통신 (RabbitMQ)
- **캐시 우선**: 자주 사용되는 데이터는 Redis 캐시에서 직접 읽기
- **API Gateway**: 모든 클라이언트 요청의 단일 진입점
#### 1.2.3 클라우드 디자인 패턴 적용
- **API Gateway**: 라우팅, 인증, Rate Limiting
- **Queue-Based Load Leveling**: 부하 분산 및 비동기 처리
- **Cache-Aside**: 성능 최적화 및 DB 부하 감소
- **Publisher-Subscriber**: 이벤트 기반 통신
- **Asynchronous Request-Reply**: 장시간 작업 비동기 처리
- **Health Endpoint Monitoring**: 서비스 상태 모니터링
### 1.3 핵심 컴포넌트
#### 1.3.1 클라이언트 레이어
- **Web Application**: 브라우저 기반 SPA (Single Page Application)
- **Mobile Application**: iOS/Android 네이티브 앱 (향후 확장)
#### 1.3.2 API Gateway
- **Kong Gateway** 또는 **Spring Cloud Gateway**
- 역할: 라우팅, 인증/인가, Rate Limiting, 로깅
#### 1.3.3 백엔드 서비스 (8개)
1. **User Service**: 사용자 인증 및 권한 관리
2. **Meeting Service**: 회의 관리, 회의록 생성 및 관리, 회의록 공유
3. **STT Service**: 음성 녹음 관리, 음성-텍스트 변환, 화자 식별
4. **AI Service**: LLM 기반 회의록 자동 작성, Todo 자동 추출, 프롬프팅 기반 회의록 개선
5. **RAG Service**: 맥락 기반 용어 설명, 관련 문서 검색 및 연결, 업무 이력 통합
6. **Collaboration Service**: 실시간 동기화, 버전 관리, 충돌 해결
7. **Todo Service**: Todo 할당 및 관리, 진행 상황 추적, 회의록 실시간 연동
8. **Notification Service**: 알림 발송 및 리마인더 관리
#### 1.3.4 인프라 컴포넌트
- **PostgreSQL**: 각 서비스별 독립 데이터베이스
- **Redis**: 분산 캐시 및 세션 관리
- **RabbitMQ**: 메시지 큐 및 이벤트 버스
- **Azure Storage**: 음성 파일 저장
- **Azure Speech API**: STT(Speech-to-Text) 엔진
- **LLM API**: AI 회의록 자동 작성 엔진
---
## 2. 서비스 아키텍처
### 2.1 서비스별 책임
#### 2.1.1 User Service
**책임**: 사용자 인증 및 권한 관리
- LDAP 연동 인증
- JWT 토큰 발급 및 검증
- 사용자 프로필 관리
- 권한 관리
**데이터**:
- 사용자 정보 (user_db)
- 세션 정보 (Redis 캐시)
**외부 의존성**:
- LDAP 서버
---
#### 2.1.2 Meeting Service
**책임**: 회의 관리, 회의록 생성 및 관리, 회의록 공유
- 회의 예약 및 참석자 초대
- 회의 템플릿 관리
- 회의 시작/종료 관리
- 회의록 조회 및 수정
- 회의록 공유 설정
- 회의 통계 생성
**데이터**:
- 회의 정보 (meeting_db)
- 회의 템플릿 정보
- 회의록 메타데이터
- 회의 참석자 정보
**주요 이벤트**:
- **발행**: MeetingCreated, MeetingStarted, MeetingEnded, MeetingCancelled
- **구독**: TranscriptCreated, TodoCompleted
**통신 전략**:
- **동기**: User Service (사용자 정보 조회 - Redis 캐시 우선)
- **비동기**: STT Service (회의록 생성 요청 - Queue), Notification Service (알림 발송 - Event)
---
#### 2.1.3 STT Service
**책임**: 음성 녹음 관리, 음성-텍스트 변환, 화자 식별
- 음성 녹음 시작/중지
- 음성 파일 Azure Storage 저장
- Azure Speech API 연동 STT 처리
- 화자 자동 식별
- 텍스트 변환 결과 저장
**데이터**:
- 음성 파일 메타데이터 (transcript_db)
- 텍스트 변환 결과
**외부 의존성**:
- Azure Speech API (STT 엔진)
- Azure Storage (음성 파일 저장)
**주요 이벤트**:
- **구독**: MeetingEnded
- **통신**: AI Service (회의록 자동 작성 요청 - Queue)
---
#### 2.1.4 AI Service
**책임**: LLM 기반 회의록 자동 작성, Todo 자동 추출, 프롬프팅 기반 회의록 개선
- 회의록 자동 작성 (구조화, 문장 다듬기, 요약)
- Todo 자동 추출 및 담당자 식별
- 프롬프팅 기반 회의록 개선 (1Page 요약, 핵심 요약 등)
- 관련 회의록 자동 연결 (벡터 유사도 검색)
**데이터**:
- AI 처리 이력 (ai_db)
- 비동기 작업 상태 (Redis)
**외부 의존성**:
- LLM API (OpenAI, Azure OpenAI 등)
**주요 이벤트**:
- **구독**: TranscriptCreated
- **통신**: Todo Service (Todo 할당 요청 - Queue), RAG Service (관련 문서 검색 - 동기)
**비동기 작업**:
- AI 일정 생성 (Asynchronous Request-Reply 패턴 적용)
- AI 회의록 요약 생성
---
#### 2.1.5 RAG Service
**책임**: 맥락 기반 용어 설명, 관련 문서 검색 및 연결, 업무 이력 통합
- 전문용어 자동 감지
- 벡터 유사도 검색을 통한 관련 문서 검색
- 과거 회의록 및 사내 문서에서 맥락 기반 설명 생성
- 용어 사전 관리
**데이터**:
- 벡터 DB (관련 문서 임베딩)
- 용어 사전 (rag_db)
**외부 의존성**:
- 사내 문서 저장소 (위키, 매뉴얼 등)
**통신 전략**:
- **동기**: AI Service (관련 문서 검색 요청 시)
---
#### 2.1.6 Collaboration Service
**책임**: 실시간 동기화, 버전 관리, 충돌 해결
- 회의록 실시간 수정 동기화 (WebSocket)
- 회의록 버전 관리
- 동시 수정 충돌 감지 및 해결
- 회의록 섹션 검증 완료 처리
**데이터**:
- 회의록 버전 정보 (collaboration_db)
- 수정 이력
**주요 이벤트**:
- **발행**: TranscriptUpdated, SectionVerified
**통신 전략**:
- **WebSocket**: 실시간 동기화 (클라이언트 ↔ Collaboration Service)
- **비동기**: Notification Service (검증 완료 알림 - Event)
---
#### 2.1.7 Todo Service
**책임**: Todo 할당 및 관리, 진행 상황 추적, 회의록 실시간 연동
- Todo 생성 및 할당
- Todo 진행 상황 추적
- Todo 완료 처리
- 회의록과 Todo 실시간 양방향 연동
- 캘린더 연동
**데이터**:
- Todo 정보 (todo_db)
- Todo 진행 상황
**주요 이벤트**:
- **발행**: TodoCreated, TodoStatusChanged, TodoCompleted
- **구독**: MeetingEnded (AI Service를 통한 Todo 자동 추출)
**통신 전략**:
- **동기**: Meeting Service (회의록 Todo 섹션 업데이트 - REST API)
- **비동기**: Notification Service (Todo 알림 - Event)
---
#### 2.1.8 Notification Service
**책임**: 알림 발송 및 리마인더 관리
- 이메일 알림 발송
- SMS 알림 발송 (선택)
- 리마인더 관리 (회의 시작 30분 전, Todo 마감일 3일 전 등)
- 알림 발송 큐 처리
**데이터**:
- 알림 발송 이력 (notification_db)
**외부 의존성**:
- SMTP 서버 (이메일)
- SMS 서비스 (선택)
**주요 이벤트**:
- **구독**: MeetingCreated, MeetingEnded, TranscriptCreated, TodoCreated, TodoCompleted, SectionVerified
---
### 2.2 서비스 간 통신 전략
#### 2.2.1 동기 통신 (REST API)
**사용 시나리오**: 즉시 응답이 필요한 조회 작업
| 요청 서비스 | 대상 서비스 | 목적 | 캐시 전략 |
|-----------|-----------|------|---------|
| Meeting Service | User Service | 사용자 정보 조회 | Redis 캐시 우선 (TTL: 30분) |
| Todo Service | Meeting Service | 회의록 Todo 섹션 업데이트 | 즉시 반영 |
| AI Service | RAG Service | 관련 문서 검색 | 캐시 없음 (검색 결과는 매번 변경 가능) |
**특징**:
- Cache-Aside 패턴 적용 (User 정보, Meeting 정보 등)
- API Gateway를 통한 라우팅 및 인증
---
#### 2.2.2 비동기 통신 (Message Queue)
**사용 시나리오**: 장시간 작업 또는 즉시 응답 불필요
| 발행 서비스 | 큐 이름 | 구독 서비스 | 목적 |
|-----------|---------|-----------|------|
| Meeting Service | transcript.creation.queue | STT Service | 회의록 생성 요청 |
| STT Service | ai.processing.queue | AI Service | 회의록 자동 작성 요청 |
| AI Service | todo.extraction.queue | Todo Service | Todo 추출 및 할당 |
| 모든 서비스 | notification.queue | Notification Service | 알림 발송 요청 |
**특징**:
- Queue-Based Load Leveling 패턴 적용
- Consumer Concurrency 조정으로 부하 분산
- Dead Letter Queue를 통한 실패 메시지 관리
---
#### 2.2.3 이벤트 기반 통신 (Pub-Sub)
**사용 시나리오**: 하나의 이벤트를 여러 서비스가 구독
| 이벤트 | 발행 서비스 | 구독 서비스 | 목적 |
|-------|-----------|-----------|------|
| MeetingCreated | Meeting Service | Notification Service, AI Service | 회의 생성 알림, AI 분석 준비 |
| MeetingEnded | Meeting Service | STT Service, Notification Service, Todo Service | 회의록 생성, 종료 알림, Todo 추출 |
| TranscriptCreated | STT Service | Notification Service, Meeting Service, AI Service | 회의록 생성 완료 알림, 상태 업데이트, AI 분석 |
| TodoCreated | Todo Service | Notification Service | Todo 할당 알림 |
| TodoCompleted | Todo Service | Notification Service, Meeting Service | Todo 완료 알림, 회의록 업데이트 |
| SectionVerified | Collaboration Service | Notification Service | 검증 완료 알림 |
**특징**:
- Publisher-Subscriber 패턴 적용
- RabbitMQ Topic Exchange 사용
- 서비스 간 느슨한 결합
---
#### 2.2.4 비동기 작업 처리 (Asynchronous Request-Reply)
**사용 시나리오**: 장시간 실행되는 작업 (1분 이상)
| 서비스 | 작업 | 예상 시간 | 상태 저장 |
|-------|------|----------|---------|
| AI Service | AI 일정 생성 | 30초 ~ 2분 | Redis (taskId 기반) |
| AI Service | AI 회의록 요약 생성 | 1분 ~ 5분 | Redis (taskId 기반) |
| STT Service | 음성 파일 STT 변환 | 1분 ~ 10분 | Redis (taskId 기반) |
**처리 플로우**:
1. 클라이언트 → API Gateway → 서비스: 작업 요청
2. 서비스: taskId 생성 → Redis 상태 저장 (PENDING) → Queue 발행
3. 서비스 → 클라이언트: 202 Accepted + taskId 즉시 반환
4. Worker: Queue 소비 → 상태 업데이트 (PROCESSING) → 작업 처리 → 상태 업데이트 (COMPLETED)
5. 클라이언트: GET /tasks/{taskId}로 상태 폴링 또는 WebSocket Push
**특징**:
- Asynchronous Request-Reply 패턴 적용
- Redis를 통한 작업 상태 관리 (TTL: 24시간)
- 폴링 또는 WebSocket을 통한 결과 조회
---
#### 2.2.5 실시간 통신 (WebSocket)
**사용 시나리오**: 실시간 협업 및 즉시 알림
| 사용 케이스 | 서비스 | 클라이언트 |
|----------|-------|----------|
| 회의록 실시간 동기화 | Collaboration Service | Frontend |
| AI 작업 완료 Push (옵션) | AI Service | Frontend |
**특징**:
- WebSocket 기반 양방향 통신
- 수정 델타만 전송하여 네트워크 효율 최적화
- 충돌 감지 및 해결 (Last Write Wins 또는 수동 병합)
---
## 3. 주요 사용자 플로우
### 3.1 회의 생성 및 예약 플로우
```
1. 사용자 → Frontend: 회의 예약 정보 입력
2. Frontend → API Gateway → Meeting Service: POST /api/meetings
3. Meeting Service:
- 회의 정보 저장 (meeting_db)
- MeetingCreated 이벤트 발행
4. Notification Service (구독):
- 참석자에게 초대 이메일 발송
- 캘린더 일정 등록
5. AI Service (구독):
- 회의 일정 분석 준비 (비동기)
6. Frontend ← Meeting Service: 회의 정보 반환
```
**적용 패턴**:
- API Gateway: 라우팅 및 인증
- Publisher-Subscriber: MeetingCreated 이벤트
- Queue-Based Load Leveling: 알림 발송 큐
---
### 3.2 회의 진행 및 회의록 생성 플로우
```
1. 사용자 → Frontend: 회의 시작 버튼 클릭
2. Frontend → API Gateway → Meeting Service: POST /api/meetings/{id}/start
3. Meeting Service:
- 회의 상태 '진행중'으로 업데이트
- 회의 세션 생성
- MeetingStarted 이벤트 발행
4. STT Service:
- 음성 녹음 시작
- 실시간 STT 처리 (Azure Speech API)
- 텍스트 변환 결과 저장
5. AI Service:
- 텍스트 변환 결과 수신
- 실시간 회의록 자동 작성 (구조화, 문장 다듬기)
6. Collaboration Service:
- 회의록 실시간 동기화 (WebSocket)
- 참석자 화면에 실시간 반영
7. 사용자 → Frontend: 회의 종료 버튼 클릭
8. Frontend → API Gateway → Meeting Service: POST /api/meetings/{id}/end
9. Meeting Service:
- 회의 상태 '종료'로 업데이트
- 회의 통계 생성
- MeetingEnded 이벤트 발행
10. STT Service (구독):
- 음성 녹음 중지
- 음성 파일 Azure Storage 저장
11. Notification Service (구독):
- 참석자에게 회의 종료 알림
12. Todo Service (구독):
- AI Service를 통한 Todo 자동 추출 요청 (비동기)
```
**적용 패턴**:
- API Gateway: 라우팅 및 인증
- Publisher-Subscriber: MeetingStarted, MeetingEnded 이벤트
- Queue-Based Load Leveling: Todo 추출 큐
- WebSocket: 실시간 회의록 동기화
---
### 3.3 AI 기반 Todo 자동 추출 및 할당 플로우
```
1. Todo Service (MeetingEnded 이벤트 구독):
- AI Service에 Todo 추출 요청 (Queue)
2. AI Service Worker:
- 회의록 텍스트 분석
- Todo 항목 추출 (LLM API)
- 담당자 자동 식별
- Todo 정보 생성
3. AI Service → Todo Service:
- Todo 정보 전달 (Queue)
4. Todo Service:
- Todo 생성 및 저장 (todo_db)
- TodoCreated 이벤트 발행
- 회의록 Todo 섹션 업데이트 (Meeting Service REST API 호출)
5. Notification Service (구독):
- 담당자에게 Todo 할당 알림 (이메일)
- 마감일 3일 전 리마인더 일정 생성
6. Meeting Service:
- 회의록 Todo 섹션 업데이트
- Redis 캐시 무효화
```
**적용 패턴**:
- Publisher-Subscriber: MeetingEnded, TodoCreated 이벤트
- Queue-Based Load Leveling: AI 처리 큐, Todo 할당 큐
- Cache-Aside: 회의록 캐시 무효화
---
### 3.4 맥락 기반 용어 설명 플로우
```
1. Frontend: 회의록 작성 중 전문용어 감지 (클라이언트 측)
2. Frontend → API Gateway → RAG Service: POST /api/rag/terms/explain
3. RAG Service:
- 용어 사전 확인
- 벡터 유사도 검색 (과거 회의록, 사내 문서)
- 관련 문서 추출 (최대 5개)
- LLM을 통한 맥락 기반 설명 생성
4. RAG Service → Frontend:
- 용어 정의
- 맥락 기반 상세 설명
- 실제 사용 사례
- 관련 프로젝트/이슈
- 과거 회의록 링크 (최대 3개)
5. Frontend:
- 툴팁 또는 사이드 패널로 설명 표시
```
**적용 패턴**:
- API Gateway: 라우팅 및 인증
- Cache-Aside: 용어 사전 캐싱
---
### 3.5 AI 일정 생성 (비동기 작업) 플로우
```
1. Frontend → API Gateway → AI Service: POST /api/ai/schedules
2. AI Service:
- taskId 생성 (UUID)
- Redis 상태 저장 (PENDING)
- Queue에 작업 메시지 발행
- 202 Accepted + taskId 즉시 반환
3. AI Worker (비동기):
- Queue 소비
- Redis 상태 업데이트 (PROCESSING)
- LLM API 호출하여 일정 생성 (1분 소요)
- Redis 상태 업데이트 (COMPLETED) + 결과 저장
4. Frontend (폴링):
- GET /api/ai/tasks/{taskId}를 5초마다 호출
- status가 COMPLETED일 때 결과 획득
```
**적용 패턴**:
- Asynchronous Request-Reply: 비동기 작업 처리
- Queue-Based Load Leveling: AI 처리 큐
- Redis: 작업 상태 관리
---
### 3.6 회의록 실시간 협업 플로우
```
1. 참석자 A → Frontend: 회의록 수정
2. Frontend → Collaboration Service (WebSocket): 수정 델타 전송
3. Collaboration Service:
- 수정 권한 확인
- 수정 이력 저장 (collaboration_db)
- 버전 관리
- 충돌 감지 (동일 위치 동시 수정 시)
4. Collaboration Service → 모든 참석자 (WebSocket):
- 수정 델타 실시간 브로드캐스트
- 수정 영역 하이라이트 (3초간)
5. 참석자 B, C Frontend:
- 실시간으로 수정 내용 반영
6. 충돌 발생 시:
- Last Write Wins (기본) 또는 수동 병합 UI 제공
```
**적용 패턴**:
- WebSocket: 실시간 양방향 통신
- Queue-Based Load Leveling: 알림 발송 큐 (수정 알림)
---
### 3.7 회의록 검증 완료 플로우
```
1. 참석자 → Frontend: 섹션 검증 완료 버튼 클릭
2. Frontend → API Gateway → Collaboration Service: POST /api/collaboration/sections/{id}/verify
3. Collaboration Service:
- 검증자 정보 기록
- 검증 상태 업데이트 (검증 완료)
- 회의 생성자만 섹션 잠금 가능 (선택)
- SectionVerified 이벤트 발행
4. Notification Service (구독):
- 전체 참석자에게 검증 완료 알림 (이메일)
5. Collaboration Service → Frontend (WebSocket):
- 검증 완료 상태 실시간 동기화
- 검증 배지 표시 (체크 아이콘)
```
**적용 패턴**:
- Publisher-Subscriber: SectionVerified 이벤트
- WebSocket: 실시간 상태 동기화
- Queue-Based Load Leveling: 알림 발송 큐
---
## 4. 데이터 흐름 및 캐싱 전략
### 4.1 데이터베이스 구성
- **서비스별 독립 데이터베이스**: 각 서비스마다 독립적인 PostgreSQL 데이터베이스
- **서비스 간 데이터 공유 최소화**: 캐시 또는 이벤트를 통한 데이터 공유
| 서비스 | 데이터베이스 | 주요 테이블 |
|-------|-----------|----------|
| User Service | user_db | users, roles, permissions |
| Meeting Service | meeting_db | meetings, templates, participants, transcripts_metadata |
| STT Service | transcript_db | audio_files, stt_results, speakers |
| AI Service | ai_db | ai_tasks, ai_results, related_transcripts |
| RAG Service | rag_db | terms_dictionary, document_embeddings |
| Collaboration Service | collaboration_db | transcript_versions, edit_history, conflicts |
| Todo Service | todo_db | todos, todo_status_history |
| Notification Service | notification_db | notifications, notification_templates |
---
### 4.2 캐싱 전략 (Cache-Aside 패턴)
#### 4.2.1 캐싱 대상 데이터
| 서비스 | 캐시 데이터 | TTL | 무효화 트리거 |
|-------|----------|-----|-------------|
| User Service | 사용자 프로필 정보 | 30분 | 사용자 정보 업데이트 |
| User Service | 사용자 권한 정보 | 1시간 | 권한 변경 |
| Meeting Service | 회의 기본 정보 | 10분 | 회의 정보 수정 |
| Meeting Service | 회의 참여자 목록 | 10분 | 참여자 변경 |
| Meeting Service | 회의 템플릿 목록 | 1시간 | 템플릿 생성/수정 |
| STT Service | 회의록 조회 | 30분 | 회의록 수정 |
| Todo Service | 사용자별 Todo 목록 | 5분 | Todo 상태 변경 |
| Todo Service | Todo 진행 상태 통계 | 5분 | Todo 완료 |
#### 4.2.2 캐시 정책
**읽기 집중 데이터** (Cache-Aside):
- 패턴: Lazy Loading
- 전략: 캐시 미스 시 DB 조회 → 캐시 저장
- 예: 사용자 프로필, 회의 정보 조회
**쓰기 빈도 높은 데이터** (Write-Through + Cache-Aside):
- 패턴: 업데이트 시 캐시 무효화
- 전략: DB 업데이트 → 캐시 삭제 → 다음 조회 시 재생성
- 예: Todo 상태 변경, 회의 정보 수정
**캐시 무효화**:
- 데이터 변경 시 즉시 무효화 (Cache Eviction)
- TTL 기반 자동 만료
- 명시적 삭제 API 제공 (관리자용)
---
### 4.3 비동기 작업 상태 관리 (Redis)
**작업 상태 저장**:
- Key: `task:{taskId}`
- Value: `{ taskId, status, createdAt, startedAt, completedAt, result, errorMessage }`
- TTL: 24시간
**상태 흐름**:
1. PENDING: 요청 접수 직후
2. PROCESSING: Worker가 작업 시작
3. COMPLETED: 작업 성공 완료
4. FAILED: 작업 실패
---
## 5. 확장성 및 성능 고려사항
### 5.1 수평 확장 전략
#### 5.1.1 Stateless 서비스 설계
- **모든 백엔드 서비스는 Stateless**: 세션 정보는 Redis에 저장
- **수평 확장 가능**: Kubernetes 기반 Pod Auto Scaling
- **Load Balancer**: Kubernetes Service (ClusterIP)를 통한 부하 분산
#### 5.1.2 서비스별 확장 전략
| 서비스 | 확장 전략 | Auto Scaling 기준 |
|-------|---------|-----------------|
| API Gateway | 수평 확장 (최소 2개) | CPU > 70% 또는 RPS > 1000 |
| User Service | 수평 확장 | CPU > 70% |
| Meeting Service | 수평 확장 | CPU > 70% 또는 메모리 > 80% |
| STT Service | 수평 확장 + Worker 증설 | Queue 길이 > 100 |
| AI Service | 수평 확장 + Worker 증설 | Queue 길이 > 50 |
| Notification Service | 수평 확장 + Worker 증설 | Queue 길이 > 200 |
| Todo Service | 수평 확장 | CPU > 70% |
| Collaboration Service | 수평 확장 (WebSocket) | 동시 연결 > 500 |
---
### 5.2 성능 최적화
#### 5.2.1 캐싱 최적화
- **Cache Hit Rate 목표**: 70% 이상
- **Hot Key 문제 대응**: 자주 조회되는 데이터는 로컬 캐시 + 분산 캐시 병행
- **Cache Stampede 방지**: Singleflight 패턴 적용 (동시 다발적 Cache Miss 방지)
#### 5.2.2 데이터베이스 최적화
- **Connection Pool**: HikariCP 설정 최적화 (maxPoolSize: 10-20)
- **인덱스 최적화**: 자주 조회되는 필드에 인덱스 생성
- **Read Replica**: 읽기 부하 분산 (필요 시)
#### 5.2.3 메시지 큐 최적화
- **Consumer Concurrency**: 서비스별 동시 처리 워커 수 조정 (3-10)
- **Prefetch Count**: RabbitMQ Prefetch 설정 최적화
- **Dead Letter Queue**: 실패 메시지 별도 처리
---
### 5.3 성능 목표
| 지표 | 목표 |
|------|------|
| API 응답 시간 (P95) | < 500ms |
| 회의록 생성 시간 | < 2분 |
| AI 일정 생성 시간 | < 1분 |
| Cache Hit Rate | > 70% |
| 시스템 가용성 | > 99.5% |
| 동시 사용자 수 | 10,000명 |
| 동시 진행 회의 수 | 1,000개 |
| 일일 처리 회의 수 | 100,000개 |
---
## 6. 보안 고려사항
### 6.1 인증 및 인가
#### 6.1.1 인증 전략
- **LDAP 연동**: 사내 LDAP 서버와 연동한 사용자 인증
- **JWT 토큰**: 인증 후 JWT 토큰 발급 (만료 시간: 1시간)
- **Refresh Token**: 장기 세션 유지 (만료 시간: 7일)
- **Token 검증**: API Gateway에서 JWT 토큰 검증 (모든 요청)
#### 6.1.2 인가 전략
- **역할 기반 접근 제어 (RBAC)**: 사용자 역할에 따른 권한 관리
- **회의 참여자 검증**: 회의 참여자만 회의록 접근 가능
- **회의록 작성자 권한**: 수정, 삭제 권한은 작성자에게만 부여
---
### 6.2 데이터 보안
#### 6.2.1 암호화
- **전송 중 암호화**: HTTPS/TLS (API Gateway)
- **저장 시 암호화**: PostgreSQL Transparent Data Encryption (TDE)
- **민감 정보 암호화**: 사용자 비밀번호는 bcrypt 해싱
#### 6.2.2 데이터 접근 제어
- **데이터베이스 접근**: 서비스별 독립 계정, 최소 권한 원칙
- **Redis 접근**: Password 인증 + ACL 설정
- **RabbitMQ 접근**: 서비스별 독립 계정, 큐별 권한 관리
---
### 6.3 보안 모니터링
#### 6.3.1 로깅
- **API Gateway**: 모든 요청/응답 로깅 (사용자 ID, 엔드포인트, 응답 시간)
- **인증 실패 로깅**: 반복적인 인증 실패 시 경고
- **민감 정보 마스킹**: 로그에서 비밀번호, 토큰 등 마스킹
#### 6.3.2 보안 이벤트 모니터링
- **이상 접근 탐지**: 짧은 시간 내 과도한 요청 (Rate Limiting)
- **권한 없는 접근 시도**: 403 Forbidden 응답 모니터링
- **보안 패치**: 정기적인 보안 업데이트 및 취약점 점검
---
## 7. 논리 아키텍처 다이어그램
논리 아키텍처 다이어그램은 별도 파일로 작성되었습니다.
**파일**: [logical-architecture.mmd](logical-architecture.mmd)
**온라인 확인**: https://mermaid.live/edit
---
## 8. 문서 이력
| 버전 | 작성일 | 작성자 | 변경 내용 |
|------|--------|--------|----------|
| 1.0 | 2025-01-20 | 준호 | 초안 작성 |