- EventCreatedEvent, EventStats에 startDate, endDate 필드 추가
- EventCreatedConsumer에서 이벤트 시작/종료 날짜 저장
- SampleDataLoader에서 실제 날짜로 이벤트 발행
- evt_2025012301: 2025-01-23 시작 (ACTIVE)
- evt_2025020101: 2025-02-01 시작 (ACTIVE)
- evt_2025011501: 2025-01-15~2025-01-31 (COMPLETED)
- AnalyticsService: 이벤트 시작일~종료일(또는 현재) 기간 계산
- UserAnalyticsService: 가장 빠른 이벤트 시작일~현재 기간 계산
- application.yml에서 중복된 context-path 제거
- Consumer Group ID를 analytics-service-consumers-v3로 통일
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- SecurityConfig: CORS 설정 개선 및 context-path 기반 경로 수정
- UserController: RequestMapping 중복 경로 제거
- SwaggerConfig: Production 서버 URL 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
- User-level Analytics API 기간 파라미터 제거 (전체 기간 자동 계산)
* /api/v1/users/{userId}/analytics/dashboard
* /api/v1/users/{userId}/analytics/channels
* /api/v1/users/{userId}/analytics/roi
* /api/v1/users/{userId}/analytics/timeline
- Kafka Consumer 안정성 개선
* Consumer Group ID를 analytics-service-consumers-v3로 변경
* Redis 멱등성 키 v2 버전 사용 (processed_events_v2, distribution_completed_v2, processed_participants_v2)
* ParticipantRegisteredConsumer 멱등성 키를 eventId:participantId 조합으로 변경하여 중복 방지 강화
- 설정 개선
* UTF-8 인코딩 명시적 설정 추가
* Kafka auto.offset.reset 설정 명확화
- 테스트 도구 추가
* tools/reset-analytics-data.ps1: 테스트 데이터 초기화 스크립트
* DebugController: 개발 환경 디버깅용 엔드포인트
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- CORS 설정에 https 프로토콜 지원 추가
- User-Service CORS를 모든 Origin 허용으로 변경
- ConfigMap CORS_ALLOWED_ORIGINS 확장
- User-Service DB migration 스크립트 추가
- Application 설정 파일 업데이트
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- push 트리거를 주석 처리하여 자동 실행 방지
- Pull Request 생성 시에만 자동 실행
- 수동 실행(workflow_dispatch)은 계속 가능
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- CORS 설정 업데이트 (모든 서비스)
- Swagger UI 경로 및 설정 수정
- Kubernetes 배포 설정 개선 (Ingress, Deployment)
- distribution-service SecurityConfig 및 Controller 개선
- IntelliJ 실행 프로파일 업데이트
- 컨테이너 이미지 빌드 문서화 (deployment/container/build-image.md)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✨ 주요 기능
- 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>
- EventService에 EventKafkaProducer 의존성 주입
- publishEvent 메서드에서 event-created 토픽으로 메시지 발행
- Event 엔티티의 selectedImageId 검증 임시 비활성화
- Kafka 메시지 발행 테스트 결과 문서 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- GitHub Actions workflow로 백엔드 서비스 자동 빌드/배포 구성
- Kustomize를 통한 dev/staging/prod 환경별 설정 관리
- 각 마이크로서비스별 Dockerfile 추가
- 배포 자동화 스크립트 및 환경 변수 설정
- CI/CD 가이드 문서 작성
🔧 Backend 변경사항:
- Event 엔티티에 participants, targetParticipants, roi 필드 추가
- EventDetailResponse DTO 및 EventService 매퍼 업데이트
- ROI 자동 계산 비즈니스 로직 구현
- SecurityConfig CORS 설정 추가 (localhost:3000 허용)
🎨 Frontend 변경사항:
- TypeScript EventDetail 타입 정의 업데이트
- Events 페이지 실제 API 데이터 연동 (Mock 데이터 제거)
- 참여자 수 및 ROI 기반 통계 계산 로직 개선
📝 문서:
- Event 필드 추가 및 API 통합 테스트 결과서 작성
✅ 테스트 완료:
- Backend API 응답 검증
- CORS 설정 검증
- Frontend-Backend 통합 테스트 성공
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Kubernetes 매니페스트 파일 생성 (7개 서비스)
* user-service, event-service, ai-service, content-service
* participation-service, analytics-service, distribution-service
* 공통 리소스: Ingress, ConfigMap, Secret, ImagePullSecret
- analytics-service 배포 문제 해결
* Hibernate PostgreSQL dialect 추가
* DB 자격증명 수정 (eventuser/Hi5Jessica!)
* analytics_db 데이터베이스 생성
- content-service Probe 경로 수정
* Context path 포함 (/api/v1/content/actuator/health)
- distribution-service 신규 배포
* Docker 이미지 빌드 및 ACR 푸시
* K8s 매니페스트 생성 및 배포
* Ingress 경로 추가 (/distribution)
- Gradle bootJar 설정 추가
* 5개 서비스에 archiveFileName 설정
- 배포 가이드 문서 추가
* deployment/k8s/deploy-k8s-guide.md
* claude/deploy-k8s-back.md
* deployment/container/build-image.md 업데이트
배포 완료: 모든 백엔드 서비스(7개) 정상 실행 중
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- develop 브랜치의 최신 변경사항 병합
- .gradle 캐시 파일 충돌 해결 (삭제)
- ParticipationServiceApplication.run.xml 충돌 해결 (develop 버전 선택)
- make-run-profile.md 충돌 해결 (develop 버전 선택)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- DistributedChannelInfo DTO 추가 (channel, channelType, status, expectedViews)
- ChannelType enum에 category 필드 추가 (TV, CALL, SNS 구분)
- DistributionCompletedEvent 구조 변경 (distributedChannels를 상세 정보 리스트로 변경)
- completedAt 필드에 @JsonFormat 추가하여 ISO 8601 문자열 형식으로 직렬화
- publishDistributionCompletedEvent 메서드 수정하여 새로운 형식으로 이벤트 발행
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
- HuggingFace 관련 코드 및 의존성 완전 제거
- HuggingFaceImageGenerator.java 삭제
- HuggingFaceApiClient.java 삭제
- HuggingFaceRequest.java 삭제
- Resilience4j의 HuggingFace CircuitBreaker 제거
- Kubernetes 배포 설정
- Deployment: content-service-deployment.yaml 업데이트
- Service: content-service-service.yaml 추가
- Health check 경로 수정 (/api/v1/content/actuator/health)
- Dockerfile 추가 (멀티스테이지 빌드)
- Spring Boot 설정 최적화
- application.yml: context-path 설정 (/api/v1/content)
- HuggingFace 설정 제거, Replicate API 설정 유지
- CORS 설정: kt-event-marketing* 도메인 허용
- Controller 경로 수정
- ContentController: @RequestMapping 중복 제거
- context-path와의 충돌 해결
- Security 설정
- Chrome DevTools 경로 예외 처리 추가 (/.well-known/**)
- CORS 설정 강화
- Swagger/OpenAPI 설정
- VM Development Server URL 추가
- 서버 URL 우선순위 조정
- 환경 변수 통일
- REPLICATE_API_KEY → REPLICATE_API_TOKEN으로 변경
테스트 결과:
✅ Replicate API 정상 작동 (이미지 생성 성공)
✅ Azure Blob Storage 업로드 성공
✅ Redis 연결 정상 (마스터 노드 연결)
✅ Swagger UI 정상 작동
✅ 모든 API 엔드포인트 정상 응답
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- /images/{imageId}를 /images/{imageId:[0-9]+}로 변경
- /images/generate와의 라우팅 충돈 해결
- NumberFormatException 오류 수정
- content-service Kubernetes Deployment 파일 추가
- ParticipationController, DebugController, WinnerController에 @CrossOrigin 애노테이션 추가
- http://localhost:3000에서의 크로스 오리진 요청 허용
- 프론트엔드 개발 환경과의 연동을 위한 CORS 해결
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Redis, Kafka, Server, JWT, CORS 설정을 static 값으로 변경
- AI API Configuration을 실제 API 키와 함께 static하게 설정
- 모든 환경 변수 플레이스홀더를 제거하고 직접 값 지정
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- application-dev.yml, application-local.yml 삭제
- 단일 application.yml로 통합 (user-service 형식 참고)
- Azure Blob Storage connection string 기본값 추가
- Redis, Actuator, Logging 상세 설정 추가
- OpenAPI/Swagger 설정 추가
- CORS 설정 추가
- 모든 설정을 환경 변수로 관리 가능하도록 구성
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- DTO 필드명 통일 (프론트엔드 호환)
- totalParticipants → participants
- channelName → channel
- totalInvestment → totalCost
- 증감 데이터 필드 추가
- participantsDelta: 참여자 증감 (현재 0, TODO)
- targetRoi: 목표 ROI (EventStats에서 가져옴)
- EventStats 엔티티 스키마 변경
- targetRoi 컬럼 추가 (BigDecimal, default: 0)
- Service 로직 수정
- AnalyticsService: 필드명 변경 및 증감 데이터 적용
- ROICalculator: totalCost 필드명 변경
- UserAnalyticsService: 필드명 변경 및 증감 데이터 적용
- 검증 문서 추가
- frontend-backend-validation.md: 수정 내용 및 다음 단계 정리
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Mock 디렉토리 완전 제거 (biz/service/mock, infra/gateway/mock)
- @Profile 조건부 어노테이션 모두 제거
- Redis 원격 서버 연결 (20.214.210.71:6379)
- RegenerateImageService 실제 구현 추가
- ContentWriter.getImageById() 메서드 추가
- JWT Secret 보안 강화 (32자 이상)
- API 토큰 기본값 설정 추가
- AKS 배포 준비 완료
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
문제 해결:
- storeId → userId 필드명 변경으로 인한 스키마 불일치
- PostgreSQL ERROR: column "user_id" of relation "event_stats" contains null values
- update 모드는 컬럼명 변경(rename)을 자동 처리하지 못함
변경사항:
- DDL_AUTO: update → create
- 서비스 시작 시 테이블을 DROP 후 재생성
- MVP 환경: SampleDataLoader가 샘플 데이터 자동 생성
주의사항:
- create 모드는 매번 테이블을 재생성함 (데이터 손실)
- MVP 환경에서만 사용, 실제 운영 시 update/validate로 변경 필요
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- deployment/container/run-container-guide.md 생성
- 4개 서비스(user, event, analytics, participation) 컨테이너 실행 방법 안내
- VM 접속, ACR 설정, 이미지 푸시, 컨테이너 실행, 재배포 절차 포함
- CORS 설정에 프론트엔드 주소(http://20.196.65.160:3000) 추가
- 실행정보: ACR(acrdigitalgarage01), VM(20.196.65.160)
주요 변경사항:
- EventStats 엔티티 storeId → userId 필드 변경
- EventStatsRepository 메소드명 변경 (findAllByStoreId → findAllByUserId)
- MVP 환경 1:1 관계 적용 (1 user = 1 store)
- EventCreatedConsumer에서 storeId → userId 매핑 처리
User 통합 분석 API 4개 신규 개발:
1. GET /api/v1/users/{userId}/analytics - 사용자 전체 성과 대시보드
2. GET /api/v1/users/{userId}/analytics/channels - 채널별 성과 분석
3. GET /api/v1/users/{userId}/analytics/roi - ROI 상세 분석
4. GET /api/v1/users/{userId}/analytics/timeline - 시간대별 참여 추이
기술 스택:
- Spring Boot 3.3.0, Java 21
- JPA/Hibernate, Redis 캐싱 (TTL 30분)
- Kafka Event-Driven 아키텍처
문서:
- test-backend.md: 백엔드 테스트 결과서 작성 완료
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
변경 내역:
- EventCreatedMessage: eventId, userId 타입을 Long에서 UUID로 변경
- EventKafkaProducer: publishEventCreated 메소드 파라미터 타입을 UUID로 변경
변경 이유:
- Event Entity는 UUID 타입을 사용하지만 Kafka 메시지는 Long을 사용하여 타입 불일치 발생
- Entity와 Kafka 메시지 간 타입 일관성 확보
- 런타임 타입 변환 오류 방지
영향:
- Event Service 내부 일관성 확보
- 향후 타 서비스와의 통합 시 UUID 표준 준비
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>