Merge origin/develop into feature/distribution

- 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>
This commit is contained in:
sunmingLee
2025-10-29 10:09:47 +09:00
414 changed files with 32372 additions and 205 deletions
+1 -1
View File
@@ -226,7 +226,7 @@ paths:
- `tags`: 1개 이상의 태그 지정
- `summary`: 한글로 간결하게 (10자 이내 권장)
- `description`: 마크다운 형식의 상세 설명
- 유저스토리 코드 명시
- 유저스토리 코드 명시
- 주요 기능 bullet points
- 복잡한 경우 처리 흐름 순서 작성
- 보안 관련 내용 (해당 시)
@@ -23,7 +23,7 @@ info:
- Circuit Breaker with fallback to cached data
**Caching Strategy:**
- Redis cache with 5-minute TTL
- Redis cache with 1-hour TTL (3600 seconds)
- Cache-Aside pattern for dashboard data
- Real-time updates via Kafka event subscription
version: 1.0.0
+7 -7
View File
@@ -61,7 +61,7 @@ tags:
description: 이미지 재생성 및 삭제 (UFR-CONT-020)
paths:
/content/images/generate:
/api/v1/content/images/generate:
post:
tags:
- Job Status
@@ -71,7 +71,7 @@ paths:
## 처리 방식
- **비동기 처리**: Kafka `image-generation-job` 토픽에 Job 발행
- **폴링 조회**: jobId로 생성 상태 조회 (GET /content/images/jobs/{jobId})
- **폴링 조회**: jobId로 생성 상태 조회 (GET /api/v1/content/images/jobs/{jobId})
- **캐싱**: 동일한 eventDraftId 재요청 시 캐시 반환 (TTL 7일)
## 생성 스타일
@@ -182,7 +182,7 @@ paths:
security:
- BearerAuth: []
/content/images/jobs/{jobId}:
/api/v1/content/images/jobs/{jobId}:
get:
tags:
- Job Status
@@ -339,7 +339,7 @@ paths:
security:
- BearerAuth: []
/content/events/{eventDraftId}:
/api/v1/content/events/{eventDraftId}:
get:
tags:
- Content Management
@@ -427,7 +427,7 @@ paths:
security:
- BearerAuth: []
/content/events/{eventDraftId}/images:
/api/v1/content/events/{eventDraftId}/images:
get:
tags:
- Content Management
@@ -506,7 +506,7 @@ paths:
security:
- BearerAuth: []
/content/images/{imageId}:
/api/v1/content/images/{imageId}:
get:
tags:
- Image Management
@@ -590,7 +590,7 @@ paths:
security:
- BearerAuth: []
/content/images/{imageId}/regenerate:
/api/v1/content/images/{imageId}/regenerate:
post:
tags:
- Image Management
+12 -11
View File
@@ -51,7 +51,7 @@ paths:
- JWT 토큰 자동 발급
**처리 흐름:**
1. 중복 사용자 확인 (전화번호 기반)
1. 중복 사용자 확인 (이메일/전화번호 기반)
2. 비밀번호 해싱 (bcrypt)
3. User/Store 데이터베이스 트랜잭션 처리
4. JWT 토큰 생성 및 세션 저장 (Redis)
@@ -114,7 +114,7 @@ paths:
summary: 중복 사용자
value:
code: USER_001
message: 이미 가입된 전화번호입니다
message: 이미 가입된 이메일입니다
timestamp: 2025-10-22T10:30:00Z
validationError:
summary: 입력 검증 오류
@@ -140,7 +140,7 @@ paths:
**유저스토리:** UFR-USER-020
**주요 기능:**
- 전화번호/비밀번호 인증
- 이메일/비밀번호 인증
- JWT 토큰 발급
- Redis 세션 저장
- 최종 로그인 시각 업데이트 (비동기)
@@ -162,7 +162,7 @@ paths:
default:
summary: 로그인 요청 예시
value:
phoneNumber: "01012345678"
email: hong@example.com
password: "Password123!"
responses:
'200':
@@ -191,7 +191,7 @@ paths:
summary: 인증 실패
value:
code: AUTH_001
message: 전화번호 또는 비밀번호를 확인해주세요
message: 이메일 또는 비밀번호를 확인해주세요
timestamp: 2025-10-22T10:30:00Z
/users/logout:
@@ -679,14 +679,15 @@ components:
LoginRequest:
type: object
required:
- phoneNumber
- email
- password
properties:
phoneNumber:
email:
type: string
pattern: '^010\d{8}$'
description: 휴대폰 번호
example: "01012345678"
format: email
maxLength: 100
description: 이메일 주소
example: hong@example.com
password:
type: string
minLength: 8
@@ -977,7 +978,7 @@ components:
message:
type: string
description: 에러 메시지
example: 이미 가입된 전화번호입니다
example: 이미 가입된 이메일입니다
timestamp:
type: string
format: date-time
@@ -84,7 +84,7 @@
- 대시보드 데이터 조회 (Redis 캐싱)
- Kafka Event 구독 (EventCreated, ParticipantRegistered, DistributionCompleted)
- 외부 채널 통계 수집 (Circuit Breaker + Fallback)
- ROI 계산 및 성과 분석
- ROI 계산 및 성과 분석4
#### Async Services (비동기 처리)
1. **AI Service**: AI 기반 이벤트 추천