# 외부 시퀀스 설계서 (Outer Sequence Design) ## 개요 본 문서는 회의록 작성 및 공유 개선 서비스의 **외부 시퀀스 다이어그램**을 설명합니다. 외부 시퀀스는 **마이크로서비스 간의 통신 흐름**을 나타내며, 주요 사용자 플로우별로 서비스 간 상호작용을 정의합니다. ### 문서 정보 - **작성일**: 2025-10-22 - **작성자**: 홍길동 (Architect) - **버전**: 2.0 - **설계 원칙**: 공통설계원칙 및 외부시퀀스설계가이드 준용 ### 병렬 처리 전략 적용 - **Group A (순차)**: 회의 생애주기 플로우 (플로우 10-13) - **Group B (독립)**: Todo 관리 플로우 (플로우 14) - **Group C (독립)**: 회의록 조회/수정 플로우 (플로우 15) - 3개 서브 에이전트가 병렬로 작업하여 전체 작업 시간 약 60% 단축 --- ## 외부 시퀀스 목록 ### 1. 사용자 인증 및 대시보드 조회 - **파일**: [01-사용자인증및대시보드조회.puml](./01-사용자인증및대시보드조회.puml) - **관련 유저스토리**: AFR-USER-010, AFR-USER-020 - **참여 서비스**: - Web App - API Gateway - User Service - Meeting Service - Todo Service - Redis (Cache) - PostgreSQL (User DB, Meeting DB, Todo DB) **주요 흐름**: 1. **사용자 인증**: - 사용자가 사번과 비밀번호로 로그인 - User Service가 LDAP 연동하여 인증 - JWT 토큰 생성 및 사용자 프로필 Redis 캐싱 (TTL: 30분) - 인증 성공 시 토큰 반환 2. **대시보드 데이터 조회**: - 예정된 회의 조회 (Meeting Service) - Redis 캐시 확인 → Cache Miss → DB 조회 → 캐싱 (TTL: 10분) - 진행 중 Todo 조회 (Todo Service) - Redis 캐시 확인 → Cache Hit → 캐시에서 직접 반환 - 최근 회의록 조회 (Meeting Service) - Redis 캐시 확인 → Cache Miss → DB 조회 → 캐싱 (TTL: 10분) - Todo 통계 조회 (Todo Service) - Redis 캐시 확인 → Cache Hit → 캐시에서 직접 반환 **적용 패턴**: - **Cache-Aside Pattern**: 캐시 우선 조회로 DB 부하 감소 - **JWT 인증**: API Gateway에서 일괄 토큰 검증 - **LDAP 연동**: 기업 사용자 인증 **성능 목표**: - API 응답 시간 (P95): < 500ms - Cache Hit Rate: > 70% --- ### 2. 회의 예약 및 초대 - **파일**: [02-회의예약및초대.puml](./02-회의예약및초대.puml) - **관련 유저스토리**: UFR-MEET-010 - **참여 서비스**: - Web App - API Gateway - Meeting Service - User Service - Notification Service - RabbitMQ (Message Broker) - Redis (Cache) - PostgreSQL (Meeting DB, User DB, Notification DB) **주요 흐름**: 1. **회의 예약**: - 사용자가 회의 정보 입력 (제목, 날짜/시간, 장소, 참석자) - 입력 유효성 검증 (필수 필드, 날짜 형식, 이메일 형식) - Meeting Service가 회의 생성 및 DB 저장 - 회의 정보 Redis 캐싱 (TTL: 10분) 2. **이벤트 발행**: - Meeting Service가 `MeetingCreated` 이벤트를 RabbitMQ에 발행 - Exchange: `meeting.events` - Routing Key: `meeting.created` - Notification Service가 이벤트 구독 3. **초대 알림 발송**: - Notification Service가 `MeetingCreated` 이벤트 수신 - User Service에서 참석자 정보 조회 (캐시 우선) - 알림 메시지 생성 및 DB 저장 - 각 참석자에게 이메일 초대 발송 - 알림 상태 업데이트 (PENDING → SENT) - 리마인더 일정 생성 (회의 시작 30분 전) 4. **결과 확인**: - 사용자가 대시보드에서 새로 예약한 회의 확인 - 캐시 무효화 후 DB 재조회 및 재캐싱 **적용 패턴**: - **Publisher-Subscriber Pattern**: 이벤트 기반 느슨한 결합 - **Queue-Based Load Leveling**: 대량 알림 발송 시 부하 분산 - **Cache-Aside Pattern**: 사용자 정보 캐싱으로 성능 향상 - **Asynchronous Processing**: 알림 발송은 비동기로 처리 **이벤트 스키마**: ```json { "eventType": "MeetingCreated", "payload": { "meetingId": "uuid", "title": "프로젝트 킥오프 회의", "dateTime": "2025-02-01T14:00:00", "location": "회의실 A", "creatorId": "userId", "participants": ["user1@company.com", "user2@company.com"] } } ``` **성능 목표**: - 회의 생성 응답 시간: < 300ms - 알림 발송 지연 시간: < 5초 --- ## 설계 원칙 ### 1. 통신 패턴 #### 동기 통신 (REST API) - **적용 대상**: 즉시 응답이 필요한 단순 조회 - **특징**: - API Gateway를 통한 일관된 인증/인가 - 캐시 우선 전략으로 직접 의존성 최소화 #### 비동기 통신 (Message Queue) - **적용 대상**: 이벤트 기반 통신, 느슨한 결합 - **특징**: - RabbitMQ Topic Exchange를 통한 Pub/Sub 패턴 - 이벤트 발행자와 구독자 간 느슨한 결합 - 대량 작업 시 Queue-Based Load Leveling ### 2. 캐싱 전략 (Cache-Aside) | 데이터 유형 | TTL | 캐시 키 패턴 | 무효화 시점 | |------------|-----|--------------|------------| | 사용자 프로필 | 30분 | `user:profile:{userId}` | 프로필 수정 시 | | 사용자 권한 | 1시간 | `user:auth:{userId}` | 권한 변경 시 | | 회의 정보 | 10분 | `meeting:info:{meetingId}` | 회의 수정 시 | | 회의 참여자 | 10분 | `meeting:participants:{meetingId}` | 참여자 변경 시 | | Todo 목록 | 5분 | `todo:user:{userId}` | Todo 상태 변경 시 | | Todo 통계 | 5분 | `todo:stats:{userId}` | Todo 완료 시 | **캐시 처리 플로우**: 1. 조회 요청 → Redis 캐시 확인 2. Cache Hit → 캐시 데이터 반환 3. Cache Miss → DB 조회 → Redis 저장 (TTL 설정) → 데이터 반환 4. 데이터 수정 시 → DB 업데이트 → Redis 캐시 무효화 ### 3. 이벤트 기반 아키텍처 #### RabbitMQ Exchange/Queue 구성 - **Topic Exchange**: `meeting.events`, `transcript.events`, `todo.events` - **Queue 네이밍**: `{service}.{event-category}.queue` - **Routing Key 패턴**: `{event}.{action}` (예: `meeting.created`, `todo.completed`) #### 주요 이벤트 | 이벤트 | 발행자 | 구독자 | 목적 | |--------|--------|--------|------| | **MeetingCreated** | Meeting Service | Notification Service
AI Service | 참석자 알림 발송
회의 분석 준비 | | **MeetingEnded** | Meeting Service | STT Service
AI Service
Todo Service
Notification Service | 회의록 생성
AI 분석 시작
Todo 추출
종료 알림 | | **TodoCreated** | Todo Service | Notification Service | 담당자 알림 발송 | --- ## 다이어그램 렌더링 방법 ### PlantUML 렌더링 #### 1. Visual Studio Code 플러그인 사용 1. PlantUML 확장 설치: `jebbs.plantuml` 2. `.puml` 파일 열기 3. `Alt + D` (미리보기) 또는 우클릭 → `Preview Current Diagram` #### 2. 온라인 렌더링 - [PlantUML Online Editor](https://www.plantuml.com/plantuml/uml/) - 파일 내용 복사 → 붙여넣기 → 렌더링 #### 3. 로컬 PlantUML 서버 ```bash # Docker로 PlantUML 서버 실행 docker run -d --name plantuml -p 38080:8080 plantuml/plantuml-server:latest # 브라우저에서 접근 http://localhost:38080 ``` --- ## 다음 단계 ### 1. 내부 시퀀스 설계 각 서비스 내부의 상세 처리 흐름을 설계합니다: - User Service 내부 시퀀스 (인증 처리, 프로필 관리) - Meeting Service 내부 시퀀스 (회의 생성, 회의록 관리) - Notification Service 내부 시퀀스 (알림 발송, 리마인더 관리) ### 2. API 명세 작성 각 서비스별 REST API 명세를 OpenAPI 3.0 형식으로 작성합니다. ### 3. 클래스 설계 엔티티, DTO, 서비스 클래스 설계를 진행합니다. ### 4. 데이터 설계 각 서비스별 데이터베이스 스키마 설계를 진행합니다. --- ## 참고 자료 - [논리 아키텍처 설계서](../../logical/logical-architecture.md) - [유저스토리](../../../userstory.md) - [아키텍처 패턴 적용 방안](../../../pattern/architecture-pattern.md) - [클라우드 디자인 패턴 요약](../../../../claude/cloud-design-patterns.md) --- --- ## 신규 플로우 (v2.0) ### 10. 회의 예약 및 초대 - **파일**: [회의예약및초대.puml](./회의예약및초대.puml) - **관련 유저스토리**: UFR-MEET-010 - **참여 서비스**: Frontend, API Gateway, Meeting Service, User Service, Redis, RabbitMQ, Notification Service, Meeting DB - **주요 특징**: - Cache-Aside 패턴으로 참석자 정보 조회 (Redis 캐시 우선) - 회의 정보 저장 및 캐싱 (TTL: 10분) - MeetingCreated 이벤트 비동기 발행 - Notification Service가 참석자 전원에게 초대 이메일 발송 ### 11. 회의 시작 및 회의록 작성 - **파일**: [회의시작및회의록작성.puml](./회의시작및회의록작성.puml) - **관련 유저스토리**: UFR-MEET-030, UFR-STT-010/020, UFR-AI-010, UFR-RAG-010/020, UFR-COLLAB-010 - **참여 서비스**: Frontend, API Gateway, Meeting Service, STT Service, AI Service, RAG Service, Collaboration Service, Redis, RabbitMQ, Azure Speech, LLM Server, 각 서비스 DB - **주요 특징**: - 실시간 음성 인식 (Azure Speech, 5초 간격) - AI 기반 회의록 자동 작성 (LLM) - WebSocket 실시간 동기화 (델타만 전송) - RAG 기반 전문용어 감지 및 맥락 설명 제공 - 가장 복잡한 플로우 (동기+비동기+실시간 혼합) ### 12. 회의 종료 및 Todo 추출 - **파일**: [회의종료및Todo추출.puml](./회의종료및Todo추출.puml) - **관련 유저스토리**: UFR-MEET-040/050, UFR-AI-020, UFR-TODO-010 - **참여 서비스**: Frontend, API Gateway, Meeting Service, AI Service, Todo Service, Notification Service, Redis, RabbitMQ, LLM Server, 각 서비스 DB - **주요 특징**: - 회의 통계 자동 생성 (duration, 참석자 수, 발언 수) - AI Todo 자동 추출 (액션 아이템 식별, 담당자 자동 지정) - 이벤트 체인: MeetingEnded → TodoExtracted → TodoCreated - Todo 목록 캐싱 (TTL: 5분) - 담당자에게 자동 알림 발송 ### 13. 회의록 확정 및 공유 - **파일**: [회의록확정및공유.puml](./회의록확정및공유.puml) - **관련 유저스토리**: UFR-MEET-060 - **참여 서비스**: Frontend, API Gateway, Meeting Service, Notification Service, Redis, RabbitMQ, Meeting DB - **주요 특징**: - 필수 항목 자동 검사 (제목, 참석자, 논의 내용, 결정 사항) - 고유 공유 링크 생성 (UUID 기반) - 공유 보안 설정 (비밀번호, 유효기간) - TranscriptShared 이벤트 발행 - 다음 회의 일정 자동 캘린더 등록 (선택) ### 14. Todo 완료 및 회의록 반영 - **파일**: [Todo완료및회의록반영.puml](./Todo완료및회의록반영.puml) - **관련 유저스토리**: UFR-TODO-030 - **참여 서비스**: Frontend, API Gateway, Todo Service, Meeting Service, Notification Service, Redis, RabbitMQ, 각 서비스 DB - **주요 특징** (**차별화 포인트**): - Todo 완료가 회의록에 실시간 반영되는 양방향 연동 - 완료 시간 및 완료자 정보 자동 기록 - TodoCompleted 이벤트 → Meeting Service가 회의록 자동 업데이트 - 모든 Todo 완료 시 전체 완료 알림 자동 발송 - Cache-Aside 패턴으로 회의록 조회 최적화 ### 15. 회의록 조회 및 수정 - **파일**: [회의록조회및수정.puml](./회의록조회및수정.puml) - **관련 유저스토리**: UFR-MEET-046/047/055, UFR-COLLAB-010 - **참여 서비스**: Frontend, API Gateway, Meeting Service, Collaboration Service, Redis, Meeting DB - **주요 특징**: - Cache-Aside 패턴으로 목록/상세 조회 (TTL: 10분) - 권한 검증 (본인 작성 회의록만 수정 가능) - 수정 이력 자동 기록 (수정자, 수정 시간, 변경 내용) - WebSocket 실시간 동기화 (델타만 전송) - 버전 관리 (새 버전 생성, 이전 버전 보관) - 확정완료 → 작성중 자동 상태 변경 --- ## 설계 원칙 적용 ### PlantUML 문법 검사 ✅ **모든 파일 검증 통과** (Docker 기반 PlantUML 검사 완료) - `!theme mono` 적용 - 동기: 실선 (→), 비동기: 점선 (->>) 명확 구분 - `..>` 사용 금지 (sequence diagram 원칙 준수) ### 논리 아키텍처 일치성 - ✅ 참여자: 논리 아키텍처의 서비스, DB, 메시지 큐 구조 일치 - ✅ 통신 방식: 동기(REST), 비동기(RabbitMQ), 실시간(WebSocket) 일치 - ✅ 캐시 전략: Cache-Aside 패턴, TTL 설정 일치 ### 유저스토리 커버리지 - ✅ 신규 6개 플로우가 11개 유저스토리 완전 커버 - ✅ 기존 9개 플로우와 통합하여 전체 시스템 커버 --- ## 문서 이력 | 버전 | 작성일 | 작성자 | 변경 내용 | |------|--------|--------|----------| | 1.0 | 2025-01-22 | 길동 (Architect) | 초안 작성 (Flow 1-9) | | 2.0 | 2025-10-22 | 길동 (Architect) | 신규 6개 플로우 추가 (Flow 10-15), 병렬 처리 전략 적용 |