# Site11 Microservices Architecture ## 시스템 아키텍처 개요 ### 메시징 및 데이터 처리 시스템 #### 1. **Apache Kafka** - 통합 메시징 플랫폼 - **역할**: 이벤트 스트리밍 + 작업 큐 + 메시지 버스 - **사용 사례**: - 서비스 간 이벤트 발행/구독 - 비동기 작업 큐 (Celery 대체) - 사용자 활동 로그 스트리밍 - 실시간 데이터 파이프라인 - 이벤트 소싱 패턴 구현 - CQRS (Command Query Responsibility Segregation) - 백그라운드 작업 처리 #### 2. **Redis** - 인메모리 데이터 스토어 - **역할**: 캐싱 및 세션 관리 전용 - **사용 사례**: - API 응답 캐싱 - 사용자 세션 저장 - Rate limiting - 실시간 리더보드/카운터 - 임시 데이터 저장 #### 3. **MongoDB** - Document Database - **역할**: 주요 데이터 영속성 - **사용 사례**: - 서비스별 도메인 데이터 - 유연한 스키마 관리 - 이벤트 저장소 ## 서비스 통신 패턴 ### 동기 통신 (REST API) ``` Client → Nginx → Console (API Gateway) → Microservice ``` - 즉각적인 응답이 필요한 경우 - CRUD 작업 - 실시간 데이터 조회 ### 비동기 통신 (Kafka Events) ``` Service A → Kafka Topic → Service B, C, D ``` - 서비스 간 느슨한 결합 - 이벤트 기반 아키텍처 - 확장 가능한 처리 ### 캐싱 전략 (Redis) ``` Request → Check Redis Cache → Hit? Return : Fetch from DB → Store in Redis → Return ``` - 응답 시간 개선 - 데이터베이스 부하 감소 - 세션 관리 ## 이벤트 플로우 예시 ### 사용자 등록 플로우 1. **API Request**: Client → Console → Users Service 2. **User Created Event**: Users Service → Kafka 3. **Event Consumers**: - Statistics Service: 사용자 통계 업데이트 - Email Service: 환영 이메일 발송 - Analytics Service: 가입 분석 4. **Cache Update**: Redis에 사용자 정보 캐싱 ### 이미지 업로드 플로우 1. **Upload Request**: Client → Console → Images Service 2. **Image Uploaded Event**: Images Service → Kafka 3. **Event Processing**: - Thumbnail Service: 썸네일 생성 - ML Service: 이미지 분석 - Statistics Service: 업로드 통계 4. **Job Queue**: Redis/Celery로 백그라운드 처리 ## Kafka Topics 구조 (예정) ### Event Topics (이벤트 스트리밍) ``` # User Domain user.created user.updated user.deleted user.login # Image Domain image.uploaded image.processed image.deleted # Application Domain app.registered app.updated app.deployed # System Events service.health service.error audit.log ``` ### Task Queue Topics (작업 큐) ``` # Background Jobs tasks.email.send tasks.image.resize tasks.report.generate tasks.data.export tasks.notification.push # Scheduled Jobs tasks.cleanup.expired tasks.backup.database tasks.analytics.aggregate ``` ## Redis 사용 패턴 ### 1. 캐싱 계층 - Key: `cache:users:{user_id}` - TTL: 3600초 - 패턴: Cache-Aside ### 2. 세션 관리 - Key: `session:{token}` - TTL: 1800초 - 데이터: 사용자 정보, 권한 ### 3. Rate Limiting - Key: `rate_limit:{user_id}:{endpoint}` - Window: Sliding window - Limit: 100 requests/minute ### 4. 작업 큐 (Celery) - Queue: `celery:tasks` - Priority Queue 지원 - Dead Letter Queue ## 구현 로드맵 ### Phase 1 (현재) - ✅ 기본 서비스 구조 - ✅ MongoDB 연동 - ✅ Redis 설치 - 🔄 JWT 인증 ### Phase 2 (Step 6-7) - Kafka 클러스터 설정 - 기본 Producer/Consumer 구현 - Event Schema 정의 - Redis 캐싱 전략 구현 ### Phase 3 (Step 8+) - Event Sourcing 패턴 - CQRS 구현 - Saga 패턴 (분산 트랜잭션) - 모니터링 대시보드 ## 기술 스택 ### 메시징 & 스트리밍 - **Kafka**: Event streaming - **Redis**: Caching, Queue, Pub/Sub - **Confluent Schema Registry**: Schema 관리 (향후) ### 백엔드 - **FastAPI**: REST API - **Celery**: 비동기 작업 처리 - **kafka-python**: Kafka 클라이언트 ### 데이터베이스 - **MongoDB**: Document store - **Redis**: In-memory cache ### 모니터링 (향후) - **Kafka Manager**: Kafka 클러스터 관리 - **RedisInsight**: Redis 모니터링 - **Prometheus + Grafana**: 메트릭 수집/시각화