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

24 KiB

논리 아키텍처 설계서

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

온라인 확인: https://mermaid.live/edit


8. 문서 이력

버전 작성일 작성자 변경 내용
1.0 2025-01-20 준호 초안 작성