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

518 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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