diff --git a/design/backend/sequence/outer/이벤트생성플로우.puml b/design/backend/sequence/outer/이벤트생성플로우.puml index 6f900de..d11f861 100644 --- a/design/backend/sequence/outer/이벤트생성플로우.puml +++ b/design/backend/sequence/outer/이벤트생성플로우.puml @@ -12,6 +12,7 @@ participant "Content Service" as Content participant "Distribution Service" as Dist participant "Kafka" as Kafka database "Event DB" as EventDB +database "Redis" as Redis participant "외부 AI API" as AIApi participant "이미지 생성 API" as ImageApi participant "배포 채널 APIs" as ChannelApis @@ -42,16 +43,17 @@ AI -> EventDB: 과거 이벤트 데이터 조회\n(업종, 지역 기반 통계 EventDB --> AI: 이벤트 통계 데이터 AI -> AIApi: 트렌드 분석 및 이벤트 추천 요청\n{목적, 업종, 지역, 과거데이터, 매장정보} AIApi --> AI: 3가지 추천안 + 트렌드 요약\n(예: "여름철 시원한 음료 선호도 증가") -AI -> EventDB: 추천 결과 저장\n(3가지 추천안, 트렌드 요약 저장) -EventDB --> AI: 저장 완료 -AI -> EventDB: Job 상태 업데이트\n(상태를 COMPLETED로 변경) +AI -> Redis: 추천 결과 캐싱\n(3가지 추천안, 트렌드 요약 저장)\nTTL: 24시간 +Redis --> AI: 저장 완료 +AI -> Redis: Job 상태 업데이트\n(상태를 COMPLETED로 변경) +note over AI, Redis: AI 추천 정보는 Redis에만 저장\n최종 선택 시 Event DB에 저장 group Polling으로 상태 확인 loop 상태 확인 (최대 30초) FE -> Gateway: GET /jobs/{jobId}/status Gateway -> Event: Job 상태 조회 - Event -> EventDB: Job 상태 조회\n(jobId로 상태 및 결과 조회) - EventDB --> Event: {status, result} + Event -> Redis: Job 상태 조회\n(jobId로 상태 및 결과 조회) + Redis --> Event: {status, result} alt Job 완료 Event --> Gateway: 200 OK\n{status: COMPLETED, recommendations, trendSummary} @@ -99,22 +101,14 @@ else 트렌디 스타일 ImageApi --> Content: 트렌디 이미지 URL end -note over Content: Redis 캐시에 이미지 URL 저장\nJob 상태를 COMPLETED로 업데이트 - -Content -> Kafka: Publish to event-topic\nContentCreated\n{jobId, eventDraftId, imageUrls} - -note over Event: Kafka Consumer 구독\ninner sequence 참조:\nevent-콘텐츠생성완료구독.puml -Kafka --> Event: ContentCreated 이벤트 수신 -Event -> EventDB: 이미지 URL 저장\n(이벤트 초안 업데이트) -EventDB --> Event: 저장 완료 +note over Content: Redis 캐시에 이미지 URL 저장\nJob 상태를 COMPLETED로 업데이트\n\n이미지 URL은 Redis에만 저장됨\n최종 콘텐츠 선택 시 Event DB에 저장 group Polling으로 상태 확인 loop 상태 확인 (최대 30초) FE -> Gateway: GET /jobs/{jobId}/status Gateway -> Event: Job 상태 조회 - note over Event: Redis 캐시 조회\n(jobId로 상태 확인) - Event -> Event: Redis에서 Job 상태 조회 - Event --> Event: {status, imageUrls} + Event -> Redis: Job 상태 조회\n(jobId로 상태 및 이미지 URL 조회) + Redis --> Event: {status, imageUrls} alt Job 완료 Event --> Gateway: 200 OK\n{status: COMPLETED, imageUrls}