kt-event-marketing/design/backend/class/package-structure.md
jhbkjh 3075a5d49f 물리아키텍처 설계 완료
 주요 기능
- 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>
2025-10-29 15:13:01 +09:00

30 KiB
Raw Blame History

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개+ 파일