mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 18:06:23 +00:00
✨ 주요 기능 - Azure 기반 물리아키텍처 설계 (개발환경/운영환경) - 7개 마이크로서비스 물리 구조 설계 - 네트워크 아키텍처 다이어그램 작성 (Mermaid) - 환경별 비교 분석 및 마스터 인덱스 문서 📁 생성 파일 - design/backend/physical/physical-architecture.md (마스터) - design/backend/physical/physical-architecture-dev.md (개발환경) - design/backend/physical/physical-architecture-prod.md (운영환경) - design/backend/physical/*.mmd (4개 Mermaid 다이어그램) 🎯 핵심 성과 - 비용 최적화: 개발환경 월 $143, 운영환경 월 $2,860 - 확장성: 개발환경 100명 → 운영환경 10,000명 (100배) - 가용성: 개발환경 95% → 운영환경 99.9% - 보안: 다층 보안 아키텍처 (L1~L4) 🛠️ 기술 스택 - Azure Kubernetes Service (AKS) - Azure Database for PostgreSQL Flexible - Azure Cache for Redis Premium - Azure Service Bus Premium - Application Gateway + WAF 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
30 KiB
30 KiB
KT 이벤트 마케팅 서비스 패키지 구조도
📋 개요
- 패키지 그룹:
com.kt.event - 마이크로서비스 아키텍처: 8개 모듈 (7개 서비스 + 1개 공통)
- 아키텍처 패턴: Clean Architecture (4개), Layered Architecture (4개)
🏗️ 전체 패키지 구조
com.kt.event
├── common/ # 공통 모듈 (Layered)
├── ai-service/ # AI 서비스 (Clean)
├── analytics-service/ # 분석 서비스 (Layered)
├── content-service/ # 콘텐츠 서비스 (Clean)
├── distribution-service/ # 배포 서비스 (Layered)
├── event-service/ # 이벤트 서비스 (Clean)
├── participation-service/ # 참여 서비스 (Layered)
└── user-service/ # 사용자 서비스 (Layered)
🔧 Common 모듈 (Layered Architecture)
com.kt.event.common/
├── dto/
│ ├── ApiResponse.java # 표준 API 응답 래퍼
│ ├── ErrorResponse.java # 에러 응답 DTO
│ └── PageResponse.java # 페이징 응답 DTO
├── entity/
│ └── BaseTimeEntity.java # JPA Auditing 기본 엔티티
├── exception/
│ ├── ErrorCode.java # 에러 코드 인터페이스
│ ├── BusinessException.java # 비즈니스 예외
│ └── InfraException.java # 인프라 예외
├── security/
│ ├── JwtAuthenticationFilter.java # JWT 인증 필터
│ └── JwtTokenProvider.java # JWT 토큰 인터페이스
└── util/
├── ValidationUtil.java # 유효성 검증 유틸
├── StringUtil.java # 문자열 유틸
├── DateTimeUtil.java # 날짜/시간 유틸
└── EncryptionUtil.java # 암호화 유틸
🤖 AI Service (Clean Architecture)
com.kt.event.ai/
├── domain/ # Domain Layer
│ ├── AIRecommendationResult.java # AI 추천 결과 도메인
│ ├── TrendAnalysis.java # 트렌드 분석 도메인
│ ├── EventRecommendation.java # 이벤트 추천 도메인
│ ├── ExpectedMetrics.java # 예상 성과 지표
│ ├── JobStatusResponse.java # Job 상태 도메인
│ ├── AIProvider.java # AI 제공자 Enum
│ ├── JobStatus.java # Job 상태 Enum
│ ├── EventMechanicsType.java # 이벤트 메커니즘 Enum
│ └── ServiceStatus.java # 서비스 상태 Enum
├── application/ # Application Layer
│ ├── service/
│ │ ├── AIRecommendationService.java # AI 추천 유스케이스
│ │ ├── TrendAnalysisService.java # 트렌드 분석 유스케이스
│ │ ├── JobStatusService.java # Job 상태 관리 유스케이스
│ │ └── CacheService.java # Redis 캐싱 서비스
│ └── dto/
│ ├── AIRecommendationRequest.java # AI 추천 요청 DTO
│ └── TrendAnalysisRequest.java # 트렌드 분석 요청 DTO
├── infrastructure/ # Infrastructure Layer
│ ├── client/
│ │ ├── ClaudeApiClient.java # Claude API Feign Client
│ │ ├── ClaudeRequest.java # Claude API 요청 DTO
│ │ └── ClaudeResponse.java # Claude API 응답 DTO
│ ├── circuitbreaker/
│ │ ├── CircuitBreakerManager.java # Circuit Breaker 관리
│ │ └── AIServiceFallback.java # Fallback 로직
│ ├── kafka/
│ │ ├── AIJobConsumer.java # Kafka 메시지 소비자
│ │ └── AIJobMessage.java # Job 메시지 DTO
│ └── config/
│ ├── SecurityConfig.java # Spring Security 설정
│ ├── RedisConfig.java # Redis 설정
│ ├── CircuitBreakerConfig.java # Circuit Breaker 설정
│ ├── KafkaConsumerConfig.java # Kafka Consumer 설정
│ ├── JacksonConfig.java # JSON 변환 설정
│ └── SwaggerConfig.java # API 문서 설정
├── presentation/ # Presentation Layer
│ ├── controller/
│ │ ├── HealthController.java # 헬스 체크 API
│ │ ├── InternalRecommendationController.java # AI 추천 API
│ │ └── InternalJobController.java # Job 상태 API
│ └── dto/
│ ├── AIRecommendationResponse.java # AI 추천 응답 DTO
│ └── JobStatusDto.java # Job 상태 응답 DTO
└── exception/ # Exception Layer
├── GlobalExceptionHandler.java # 전역 예외 처리
├── AIServiceException.java # AI 서비스 예외
├── JobNotFoundException.java # Job 미발견 예외
├── RecommendationNotFoundException.java # 추천 결과 미발견 예외
└── CircuitBreakerOpenException.java # Circuit Breaker 열림 예외
📊 Analytics Service (Layered Architecture)
com.kt.event.analytics/
├── AnalyticsServiceApplication.java # Spring Boot 애플리케이션
├── controller/ # Presentation Layer
│ ├── AnalyticsDashboardController.java # 대시보드 API
│ ├── ChannelAnalyticsController.java # 채널 분석 API
│ ├── RoiAnalyticsController.java # ROI 분석 API
│ ├── TimelineAnalyticsController.java # 타임라인 분석 API
│ ├── UserAnalyticsDashboardController.java # 사용자별 대시보드 API
│ ├── UserChannelAnalyticsController.java # 사용자별 채널 분석 API
│ ├── UserRoiAnalyticsController.java # 사용자별 ROI 분석 API
│ └── UserTimelineAnalyticsController.java # 사용자별 타임라인 분석 API
├── service/ # Business Layer
│ ├── AnalyticsDashboardService.java # 대시보드 서비스
│ ├── ChannelAnalyticsService.java # 채널 분석 서비스
│ ├── RoiAnalyticsService.java # ROI 분석 서비스
│ ├── TimelineAnalyticsService.java # 타임라인 분석 서비스
│ ├── UserAnalyticsDashboardService.java # 사용자별 대시보드 서비스
│ ├── UserChannelAnalyticsService.java # 사용자별 채널 분석 서비스
│ ├── UserRoiAnalyticsService.java # 사용자별 ROI 분석 서비스
│ ├── UserTimelineAnalyticsService.java # 사용자별 타임라인 분석 서비스
│ ├── ExternalChannelService.java # 외부 채널 API 통합
│ └── ROICalculator.java # ROI 계산 유틸
├── repository/ # Data Access Layer
│ ├── EventStatsRepository.java # 이벤트 통계 Repository
│ ├── ChannelStatsRepository.java # 채널 통계 Repository
│ └── TimelineDataRepository.java # 타임라인 데이터 Repository
├── entity/ # Domain Layer
│ ├── EventStats.java # 이벤트 통계 엔티티
│ ├── ChannelStats.java # 채널 통계 엔티티
│ └── TimelineData.java # 타임라인 데이터 엔티티
├── dto/response/ # Response DTOs
│ ├── AnalyticsDashboardResponse.java # 대시보드 응답
│ ├── ChannelAnalytics.java # 채널 분석 응답
│ ├── ChannelComparison.java # 채널 비교 응답
│ ├── ChannelAnalyticsResponse.java # 채널 분석 전체 응답
│ ├── ChannelCosts.java # 채널 비용 응답
│ ├── ChannelMetrics.java # 채널 지표 응답
│ ├── ChannelPerformance.java # 채널 성과 응답
│ ├── CostEfficiency.java # 비용 효율성 응답
│ ├── InvestmentDetails.java # 투자 상세 응답
│ ├── PeakTimeInfo.java # 피크 시간 정보 응답
│ ├── PeriodInfo.java # 기간 정보 응답
│ ├── RevenueDetails.java # 수익 상세 응답
│ ├── RevenueProjection.java # 수익 전망 응답
│ ├── RoiAnalyticsResponse.java # ROI 분석 응답
│ ├── RoiCalculation.java # ROI 계산 응답
│ ├── SocialInteractionStats.java # SNS 상호작용 통계
│ ├── TimelineAnalyticsResponse.java # 타임라인 분석 응답
│ ├── TimelineDataPoint.java # 타임라인 데이터 포인트
│ ├── TrendAnalysis.java # 트렌드 분석 응답
│ └── VoiceCallStats.java # 음성 통화 통계
├── messaging/ # Kafka Components
│ └── event/
│ ├── DistributionCompletedEvent.java # 배포 완료 이벤트
│ ├── EventCreatedEvent.java # 이벤트 생성 이벤트
│ └── ParticipantRegisteredEvent.java # 참여자 등록 이벤트
├── batch/
│ └── AnalyticsBatchScheduler.java # 5분 단위 배치 스케줄러
└── config/
├── KafkaConsumerConfig.java # Kafka Consumer 설정
├── KafkaTopicConfig.java # Kafka Topic 설정
├── RedisConfig.java # Redis 설정
├── Resilience4jConfig.java # Resilience4j 설정
├── SecurityConfig.java # Spring Security 설정
└── SwaggerConfig.java # API 문서 설정
📸 Content Service (Clean Architecture)
com.kt.event.content/
├── biz/ # Business Logic Layer
│ ├── domain/ # Domain Layer
│ │ ├── Content.java # 콘텐츠 집합체
│ │ ├── GeneratedImage.java # 생성 이미지 엔티티
│ │ ├── Job.java # 비동기 작업 엔티티
│ │ ├── ImageStyle.java # 이미지 스타일 Enum
│ │ └── Platform.java # 플랫폼 Enum
│ ├── usecase/ # Use Case Layer
│ │ ├── in/ # Input Ports
│ │ │ ├── GenerateImagesUseCase.java # 이미지 생성 유스케이스
│ │ │ ├── GetJobStatusUseCase.java # Job 상태 조회 유스케이스
│ │ │ ├── GetEventContentUseCase.java # 콘텐츠 조회 유스케이스
│ │ │ ├── GetImageListUseCase.java # 이미지 목록 조회 유스케이스
│ │ │ ├── RegenerateImageUseCase.java # 이미지 재생성 유스케이스
│ │ │ └── DeleteImageUseCase.java # 이미지 삭제 유스케이스
│ │ └── out/ # Output Ports
│ │ ├── ContentReader.java # 콘텐츠 읽기 포트
│ │ ├── ContentWriter.java # 콘텐츠 쓰기 포트
│ │ ├── ImageReader.java # 이미지 읽기 포트
│ │ ├── ImageWriter.java # 이미지 쓰기 포트
│ │ ├── JobReader.java # Job 읽기 포트
│ │ ├── JobWriter.java # Job 쓰기 포트
│ │ ├── CDNUploader.java # CDN 업로드 포트
│ │ └── RedisAIDataReader.java # AI 데이터 읽기 포트
│ └── service/ # Service Implementations
│ ├── StableDiffusionImageGenerator.java # 이미지 생성 서비스
│ ├── JobManagementService.java # Job 관리 서비스
│ ├── GetEventContentService.java # 콘텐츠 조회 서비스
│ ├── GetImageListService.java # 이미지 목록 서비스
│ ├── DeleteImageService.java # 이미지 삭제 서비스
│ └── RegenerateImageService.java # 이미지 재생성 서비스
└── infra/ # Infrastructure Layer
├── ContentServiceApplication.java # Spring Boot 애플리케이션
├── controller/ # Presentation Layer
│ └── ContentController.java # REST API 컨트롤러
├── gateway/ # Adapter Implementations
│ ├── RedisGateway.java # Redis 기반 모든 포트 구현
│ ├── ReplicateApiClient.java # Replicate API 클라이언트
│ └── AzureBlobStorageUploader.java # Azure CDN 업로더
├── dto/ # Data Transfer Objects
│ ├── GenerateImagesRequest.java # 이미지 생성 요청 DTO
│ ├── GenerateImagesResponse.java # 이미지 생성 응답 DTO
│ ├── GetJobStatusResponse.java # Job 상태 응답 DTO
│ ├── GetEventContentResponse.java # 콘텐츠 조회 응답 DTO
│ ├── GetImageListResponse.java # 이미지 목록 응답 DTO
│ ├── RegenerateImageRequest.java # 이미지 재생성 요청 DTO
│ └── ImageDetailDto.java # 이미지 상세 DTO
└── config/ # Configuration
├── SecurityConfig.java # Spring Security 설정
└── SwaggerConfig.java # API 문서 설정
📦 Distribution Service (Layered Architecture)
com.kt.event.distribution/
├── DistributionServiceApplication.java # Spring Boot 애플리케이션
├── controller/ # Presentation Layer
│ └── DistributionController.java # 배포 REST API
├── service/ # Business Layer
│ ├── DistributionService.java # 배포 서비스
│ └── KafkaEventPublisher.java # Kafka 이벤트 발행
├── adapter/ # Channel Adapters (Strategy Pattern)
│ ├── ChannelAdapter.java # 채널 어댑터 인터페이스
│ ├── AbstractChannelAdapter.java # 추상 채널 어댑터 (Circuit Breaker)
│ ├── UriDongNeTvAdapter.java # 우리동네TV 어댑터
│ ├── GiniTvAdapter.java # 지니TV 어댑터
│ ├── RingoBizAdapter.java # 링고비즈 어댑터
│ ├── InstagramAdapter.java # 인스타그램 어댑터
│ ├── NaverAdapter.java # 네이버 어댑터
│ └── KakaoAdapter.java # 카카오 어댑터
├── repository/ # Data Access Layer
│ ├── DistributionStatusRepository.java # 배포 상태 Repository
│ └── DistributionStatusJpaRepository.java # JPA Repository
├── entity/ # Domain Layer
│ ├── DistributionStatus.java # 전체 배포 상태 엔티티
│ └── ChannelStatusEntity.java # 채널별 배포 상태 엔티티
├── dto/ # Data Transfer Objects
│ ├── DistributeRequest.java # 배포 요청 DTO
│ ├── DistributeResponse.java # 배포 응답 DTO
│ ├── ChannelStatus.java # 채널 상태 DTO
│ ├── DistributionStatusResponse.java # 배포 상태 응답 DTO
│ ├── DistributionMapper.java # Entity ↔ DTO 매퍼
│ └── ChannelType.java # 채널 타입 Enum
├── event/ # Event Objects
│ └── DistributionCompletedEvent.java # 배포 완료 이벤트
└── config/ # Configuration
├── ChannelConfig.java # 채널 설정
├── SecurityConfig.java # Spring Security 설정
└── SwaggerConfig.java # API 문서 설정
🎯 Event Service (Clean Architecture)
com.kt.event.eventservice/
├── domain/ # Domain Layer
│ ├── Event.java # 이벤트 집합체 (Aggregate Root)
│ ├── AiRecommendation.java # AI 추천 엔티티
│ ├── GeneratedImage.java # 생성 이미지 엔티티
│ ├── Job.java # 비동기 작업 엔티티
│ ├── EventStatus.java # 이벤트 상태 Enum
│ ├── JobStatus.java # Job 상태 Enum
│ ├── EventPurpose.java # 이벤트 목적 Enum
│ ├── EventMechanism.java # 이벤트 메커니즘 Enum
│ ├── DistributionChannel.java # 배포 채널 Enum
│ └── repository/ # Repository Interfaces
│ ├── EventRepository.java # 이벤트 Repository 인터페이스
│ └── JobRepository.java # Job Repository 인터페이스
├── application/ # Application Layer
│ ├── service/ # Application Services
│ │ ├── EventService.java # 이벤트 서비스 (핵심 오케스트레이터)
│ │ └── JobService.java # Job 서비스
│ └── dto/ # Application DTOs
│ ├── request/
│ │ ├── CreateEventRequest.java # 이벤트 생성 요청
│ │ ├── SelectPurposeRequest.java # 목적 선택 요청
│ │ ├── SelectAiRecommendationRequest.java # AI 추천 선택 요청
│ │ ├── CustomizeEventRequest.java # 이벤트 커스터마이징 요청
│ │ ├── GenerateImagesRequest.java # 이미지 생성 요청
│ │ ├── SelectImageRequest.java # 이미지 선택 요청
│ │ ├── SelectChannelsRequest.java # 채널 선택 요청
│ │ └── PublishEventRequest.java # 이벤트 배포 요청
│ └── response/
│ ├── CreateEventResponse.java # 이벤트 생성 응답
│ ├── GetEventResponse.java # 이벤트 조회 응답
│ ├── GetEventListResponse.java # 이벤트 목록 응답
│ ├── SelectPurposeResponse.java # 목적 선택 응답
│ ├── GetAiRecommendationsResponse.java # AI 추천 조회 응답
│ ├── SelectAiRecommendationResponse.java # AI 추천 선택 응답
│ ├── CustomizeEventResponse.java # 커스터마이징 응답
│ ├── GenerateImagesResponse.java # 이미지 생성 응답
│ ├── GetImagesResponse.java # 이미지 조회 응답
│ ├── SelectImageResponse.java # 이미지 선택 응답
│ ├── SelectChannelsResponse.java # 채널 선택 응답
│ ├── PublishEventResponse.java # 이벤트 배포 응답
│ ├── EndEventResponse.java # 이벤트 종료 응답
│ ├── DeleteEventResponse.java # 이벤트 삭제 응답
│ └── GetJobStatusResponse.java # Job 상태 조회 응답
├── infrastructure/ # Infrastructure Layer
│ ├── persistence/ # Persistence Adapters
│ │ ├── EventJpaRepository.java # 이벤트 JPA Repository
│ │ ├── JobJpaRepository.java # Job JPA Repository
│ │ ├── EventEntity.java # 이벤트 JPA 엔티티
│ │ ├── AiRecommendationEntity.java # AI 추천 JPA 엔티티
│ │ ├── GeneratedImageEntity.java # 이미지 JPA 엔티티
│ │ ├── JobEntity.java # Job JPA 엔티티
│ │ ├── EventRepositoryImpl.java # 이벤트 Repository 구현
│ │ └── JobRepositoryImpl.java # Job Repository 구현
│ ├── messaging/ # Messaging Adapters
│ │ ├── AIJobKafkaProducer.java # AI Job Kafka Producer
│ │ ├── AIJobKafkaConsumer.java # AI Job Kafka Consumer
│ │ └── kafka/
│ │ ├── AIEventGenerationJobMessage.java # AI Job 메시지
│ │ └── AIEventGenerationJobResultMessage.java # AI Job 결과 메시지
│ ├── feign/ # External Service Clients
│ │ └── ContentServiceClient.java # Content Service Feign Client
│ └── config/ # Configuration
│ ├── SecurityConfig.java # Spring Security 설정
│ ├── RedisConfig.java # Redis 설정
│ ├── KafkaProducerConfig.java # Kafka Producer 설정
│ ├── KafkaConsumerConfig.java # Kafka Consumer 설정
│ ├── FeignConfig.java # Feign 설정
│ └── SwaggerConfig.java # API 문서 설정
└── presentation/ # Presentation Layer
├── EventServiceApplication.java # Spring Boot 애플리케이션
├── controller/ # REST Controllers
│ ├── EventController.java # 이벤트 REST API (13개 엔드포인트)
│ └── JobController.java # Job REST API (2개 엔드포인트)
└── security/ # Security Components
├── UserPrincipal.java # 사용자 인증 정보
└── DevAuthenticationFilter.java # 개발용 인증 필터
🎫 Participation Service (Layered Architecture)
com.kt.event.participation/
├── ParticipationServiceApplication.java # Spring Boot 애플리케이션
├── application/ # Application Layer
│ ├── service/
│ │ ├── ParticipationService.java # 참여 서비스
│ │ └── WinnerDrawService.java # 당첨자 추첨 서비스
│ └── dto/ # Data Transfer Objects
│ ├── ParticipationRequest.java # 참여 요청 DTO
│ ├── ParticipationResponse.java # 참여 응답 DTO
│ ├── DrawWinnersRequest.java # 당첨자 추첨 요청 DTO
│ └── DrawWinnersResponse.java # 당첨자 추첨 응답 DTO
├── domain/ # Domain Layer
│ ├── entity/
│ │ ├── Participant.java # 참여자 엔티티
│ │ └── DrawLog.java # 추첨 이력 엔티티
│ ├── repository/
│ │ ├── ParticipantRepository.java # 참여자 Repository
│ │ └── DrawLogRepository.java # 추첨 이력 Repository
│ └── enums/
│ ├── ParticipationType.java # 참여 타입 Enum (ONLINE, STORE_VISIT)
│ ├── ParticipantStatus.java # 참여자 상태 Enum
│ └── DrawStatus.java # 추첨 상태 Enum
├── presentation/ # Presentation Layer
│ ├── controller/
│ │ ├── ParticipationController.java # 참여 API
│ │ ├── WinnerController.java # 당첨자 API
│ │ └── DebugController.java # 디버그 API (개발용)
│ └── security/
│ └── UserPrincipal.java # 사용자 인증 정보
├── infrastructure/ # Infrastructure Layer
│ ├── kafka/
│ │ ├── KafkaProducerService.java # Kafka 이벤트 발행
│ │ └── event/
│ │ └── ParticipantRegisteredEvent.java # 참여자 등록 이벤트
│ └── config/
│ ├── SecurityConfig.java # Spring Security 설정
│ ├── KafkaProducerConfig.java # Kafka Producer 설정
│ └── SwaggerConfig.java # API 문서 설정
└── exception/ # Exception Layer
├── ParticipationException.java # 참여 예외 (부모 클래스)
├── DuplicateParticipationException.java # 중복 참여 예외
├── EventNotActiveException.java # 이벤트 비활성 예외
├── ParticipantNotFoundException.java # 참여자 미발견 예외
├── DrawFailedException.java # 추첨 실패 예외
├── EventEndedException.java # 이벤트 종료 예외
├── AlreadyDrawnException.java # 이미 추첨 완료 예외
├── InsufficientParticipantsException.java # 참여자 부족 예외
└── NoWinnersYetException.java # 당첨자 미추첨 예외
👤 User Service (Layered Architecture)
com.kt.event.user/
├── UserServiceApplication.java # Spring Boot 애플리케이션
├── controller/ # Presentation Layer
│ └── UserController.java # 사용자 REST API (6개 엔드포인트)
├── service/ # Business Layer
│ ├── UserService.java # 사용자 서비스 인터페이스
│ ├── UserServiceImpl.java # 사용자 서비스 구현
│ ├── AuthenticationService.java # 인증 서비스 인터페이스
│ └── AuthenticationServiceImpl.java # 인증 서비스 구현
├── repository/ # Data Access Layer
│ ├── UserRepository.java # 사용자 Repository
│ └── StoreRepository.java # 매장 Repository
├── entity/ # Domain Layer
│ ├── User.java # 사용자 엔티티
│ ├── Store.java # 매장 엔티티
│ ├── UserRole.java # 사용자 역할 Enum (OWNER, ADMIN)
│ └── UserStatus.java # 사용자 상태 Enum (ACTIVE, INACTIVE, LOCKED, WITHDRAWN)
├── dto/ # Data Transfer Objects
│ ├── request/
│ │ ├── RegisterRequest.java # 회원가입 요청 DTO
│ │ ├── LoginRequest.java # 로그인 요청 DTO
│ │ ├── UpdateProfileRequest.java # 프로필 수정 요청 DTO
│ │ └── ChangePasswordRequest.java # 비밀번호 변경 요청 DTO
│ └── response/
│ ├── RegisterResponse.java # 회원가입 응답 DTO
│ ├── LoginResponse.java # 로그인 응답 DTO
│ ├── LogoutResponse.java # 로그아웃 응답 DTO
│ └── ProfileResponse.java # 프로필 응답 DTO
├── exception/
│ └── UserErrorCode.java # 사용자 관련 에러 코드
└── config/ # Configuration Layer
├── SecurityConfig.java # Spring Security 설정
├── RedisConfig.java # Redis 설정
├── AsyncConfig.java # 비동기 설정
└── SwaggerConfig.java # API 문서 설정
📊 아키텍처 패턴별 통계
Clean Architecture (4개 서비스)
- ai-service: AI 추천 및 외부 API 연동
- content-service: 콘텐츠 생성 및 CDN 관리
- event-service: 핵심 이벤트 도메인 로직
- total: 3개 핵심 비즈니스 서비스
Layered Architecture (4개 서비스)
- analytics-service: 데이터 분석 및 집계
- distribution-service: 다중 채널 배포
- participation-service: 참여 관리 및 추첨
- user-service: 사용자 인증 및 관리
- common: 공통 컴포넌트
🔗 서비스 간 의존성
user-service (인증) ← event-service (핵심) → ai-service (추천)
↓
content-service (이미지 생성)
↓
distribution-service (배포)
↓
participation-service (참여)
↓
analytics-service (분석)
통신 방식:
- 동기: Feign Client (event → content)
- 비동기: Kafka (event → ai, distribution → analytics, participation → analytics)
- 캐시: Redis (모든 서비스)
📝 설계 원칙 적용 현황
✅ 공통설계원칙 준수
- 마이크로서비스 독립성: 서비스별 독립 배포 가능
- 패키지 구조 표준: Clean Architecture / Layered Architecture 분리
- 공통 컴포넌트 활용: common 모듈의 BaseTimeEntity, ApiResponse 등 재사용
✅ 아키텍처 패턴 적용
- Clean Architecture: 복잡한 도메인 로직 보호 (ai, content, event)
- Layered Architecture: CRUD 중심 서비스 (analytics, distribution, participation, user)
✅ 의존성 관리
- 의존성 역전 원칙 (DIP): Clean Architecture 서비스
- 단방향 의존성: Layered Architecture 서비스
- 공통 모듈 참조: 모든 서비스가 common 모듈 활용
총 클래스 수: 약 350개+ (추정) 총 파일 수: 8개 서비스 × 평균 45개 파일 = 360개+ 파일