이벤트스토밍 유저플로우 설계 완료
- 유저플로우 연결도 작성 (userflow.puml) - 6개 상세 유저플로우 시퀀스 다이어그램 작성 - 01-회원가입및매장등록 - 02-AI이벤트기획생성 - 03-이벤트채널배포 - 04-이벤트참여및관리 - 05-효과측정및분석 - 06-당첨자선정및알림 - 이벤트스토밍 요소 포함 (Event, Command, Actor, Policy, External System, Data) - PlantUML 문법 검증 완료 (전체 통과) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
81fde7d183
commit
59625f59dd
82
claude/plantuml-guide.md
Normal file
82
claude/plantuml-guide.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# PlantUML문법검사가이드
|
||||||
|
|
||||||
|
## 개요
|
||||||
|
|
||||||
|
PlantUML 다이어그램의 문법 오류를 사전에 검출하여 렌더링 실패를 방지하기 위한 가이드입니다. Docker 기반 PlantUML 서버를 활용하여 로컬에서 빠르게 문법을 검증할 수 있습니다.
|
||||||
|
|
||||||
|
## PlantUML 서버 설치 검사
|
||||||
|
|
||||||
|
### Docker로 PlantUML 서버 실행
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# PlantUML 서버가 실행 중인지 확인
|
||||||
|
docker ps | grep plantuml
|
||||||
|
|
||||||
|
# PlantUML 서버가 없으면 설치 및 실행
|
||||||
|
docker run -d --name plantuml -p 38080:8080 plantuml/plantuml-server:latest
|
||||||
|
|
||||||
|
# 서버 상태 확인
|
||||||
|
docker logs plantuml
|
||||||
|
```
|
||||||
|
|
||||||
|
## 문법 검사 방법
|
||||||
|
현재 OS에 맞게 수행.
|
||||||
|
|
||||||
|
### Linux/macOS 버전
|
||||||
|
|
||||||
|
1. tools/check-plantuml.sh 파일 존재 여부 확인
|
||||||
|
2. 스크립트 파일이 없으면 "PlantUML문법검사기(Linux/Mac)"를 tools/check-plantuml.sh 파일로 다운로드하여 스크립트 파일을 만듦
|
||||||
|
3. 스크립트 파일이 있으면 그 스크립트 파일을 이용하여 검사
|
||||||
|
|
||||||
|
### Windows PowerShell 버전
|
||||||
|
**스크립트 파일(tools/check-plantuml.ps1)을 이용하여 수행**.
|
||||||
|
|
||||||
|
1. tools/check-plantuml.ps1 파일 존재 여부 확인
|
||||||
|
2. 스크립트 파일이 없으면 "PlantUML문법검사기(Window)"를 tools/check-plantuml.ps1 파일로 다운로드하여 스크립트 파일을 만듦
|
||||||
|
3. 스크립트 파일이 있으면 그 스크립트 파일을 이용하여 검사
|
||||||
|
|
||||||
|
### 검사 결과 해석
|
||||||
|
|
||||||
|
| 출력 | 의미 | 대응 방법 |
|
||||||
|
|------|------|-----------|
|
||||||
|
| 출력 없음 | 문법 오류 없음 ✅ | 정상, 렌더링 가능 |
|
||||||
|
| "Some diagram description contains errors" | 오류 존재 ❌ | 파이프 방식으로 상세 확인 |
|
||||||
|
| "ERROR" + 라인 번호 | 특정 라인 오류 ❌ | 해당 라인 수정 |
|
||||||
|
| "Error line X in file" | X번째 줄 오류 ❌ | 해당 라인 문법 확인 |
|
||||||
|
|
||||||
|
## 화살표 문법 규칙
|
||||||
|
|
||||||
|
### 시퀀스 다이어그램 올바른 화살표 사용법
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml
|
||||||
|
' 올바른 사용법 ✅
|
||||||
|
A -> B: 동기 메시지 (실선)
|
||||||
|
A ->> B: 비동기 메시지 (실선, 열린 화살촉)
|
||||||
|
A -->> B: 비동기 응답 (점선, 열린 화살촉)
|
||||||
|
A --> B: 점선 화살표 (일반)
|
||||||
|
A <-- B: 응답 (점선)
|
||||||
|
A ->x B: 실패/거부 (X 표시)
|
||||||
|
A ->>o B: 비동기 열린 원
|
||||||
|
|
||||||
|
' 잘못된 사용법 ❌
|
||||||
|
A ..> B: ' 오류! sequence diagram에서 유효하지 않음
|
||||||
|
@enduml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 클래스 다이어그램 화살표
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml
|
||||||
|
' 클래스 다이어그램에서는 ..> 사용 가능
|
||||||
|
ClassA ..> ClassB : 의존성 (점선)
|
||||||
|
ClassC --> ClassD : 연관 (점선)
|
||||||
|
@enduml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 화살표 문법 주의사항
|
||||||
|
|
||||||
|
1. **`..>`는 sequence diagram에서 사용 금지**
|
||||||
|
2. 비동기 메시지는 `->>` 또는 `-->>` 사용
|
||||||
|
3. 동기/비동기를 명확히 구분하여 일관되게 사용
|
||||||
|
4. 다이어그램 타입별로 유효한 화살표가 다름
|
||||||
76
think/es/01-회원가입및매장등록.puml
Normal file
76
think/es/01-회원가입및매장등록.puml
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
@startuml 01-회원가입및매장등록
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 유저플로우 01: 회원가입 및 매장정보 등록
|
||||||
|
|
||||||
|
actor "소상공인" as Owner
|
||||||
|
participant "회원관리 시스템" as UserSystem
|
||||||
|
participant "KT 인증 시스템" as KTAuth
|
||||||
|
participant "사업자번호 검증 시스템" as BizVerify
|
||||||
|
database "회원 DB" as UserDB
|
||||||
|
|
||||||
|
== 이벤트스토밍 요소 ==
|
||||||
|
|
||||||
|
note over Owner, UserDB
|
||||||
|
**Command**: 회원가입 요청, 매장정보 입력, 사업자번호 검증 요청
|
||||||
|
**Event**: 회원가입 요청됨, 인증 완료됨, 매장정보 입력됨,
|
||||||
|
사업자번호 검증됨, 회원가입 완료됨
|
||||||
|
**Actor**: 소상공인
|
||||||
|
**External System**: KT 인증 시스템, 사업자번호 검증 시스템
|
||||||
|
**Policy**: 사업자번호가 유효해야 가입 가능
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 회원가입 프로세스 ==
|
||||||
|
|
||||||
|
Owner -> UserSystem : **Command**: 회원가입 요청\n(데이터: 이름, 전화번호, 이메일)
|
||||||
|
activate UserSystem
|
||||||
|
UserSystem --> Owner : **Event**: 회원가입 요청됨
|
||||||
|
|
||||||
|
UserSystem -> KTAuth : 본인 인증 요청\n(데이터: 전화번호)
|
||||||
|
activate KTAuth
|
||||||
|
KTAuth --> UserSystem : **Event**: 인증 완료됨\n(데이터: 인증토큰)
|
||||||
|
deactivate KTAuth
|
||||||
|
|
||||||
|
UserSystem --> Owner : 인증 성공 알림
|
||||||
|
|
||||||
|
== 매장정보 등록 ==
|
||||||
|
|
||||||
|
Owner -> UserSystem : **Command**: 매장정보 입력\n(데이터: 매장명, 업종, 주소, 영업시간)
|
||||||
|
UserSystem --> Owner : **Event**: 매장정보 입력됨
|
||||||
|
|
||||||
|
Owner -> UserSystem : **Command**: 사업자번호 입력\n(데이터: 사업자번호)
|
||||||
|
UserSystem -> BizVerify : 사업자번호 검증 요청\n(데이터: 사업자번호, 매장명)
|
||||||
|
activate BizVerify
|
||||||
|
|
||||||
|
note right of BizVerify
|
||||||
|
**Policy**: 사업자번호가
|
||||||
|
유효해야 가입 가능
|
||||||
|
- 국세청 DB 조회
|
||||||
|
- 휴폐업 여부 확인
|
||||||
|
end note
|
||||||
|
|
||||||
|
BizVerify --> UserSystem : **Event**: 사업자번호 검증됨\n(데이터: 검증결과, 사업자정보)
|
||||||
|
deactivate BizVerify
|
||||||
|
|
||||||
|
alt 검증 성공
|
||||||
|
UserSystem -> UserDB : 회원 정보 저장\n(데이터: 회원정보, 매장정보)
|
||||||
|
activate UserDB
|
||||||
|
UserDB --> UserSystem : 저장 완료
|
||||||
|
deactivate UserDB
|
||||||
|
|
||||||
|
UserSystem --> Owner : **Event**: 회원가입 완료됨\n(데이터: 회원ID, 무료체험 쿠폰)
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**무료 체험 혜택**
|
||||||
|
- 첫 1회 이벤트 무료
|
||||||
|
- 5분 만에 시작 가능
|
||||||
|
end note
|
||||||
|
|
||||||
|
else 검증 실패
|
||||||
|
UserSystem --> Owner : 검증 실패 알림\n(사유: 유효하지 않은 사업자번호)
|
||||||
|
Owner -> UserSystem : 사업자번호 재입력
|
||||||
|
end
|
||||||
|
|
||||||
|
deactivate UserSystem
|
||||||
|
|
||||||
|
@enduml
|
||||||
117
think/es/02-AI이벤트기획생성.puml
Normal file
117
think/es/02-AI이벤트기획생성.puml
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
@startuml 02-AI이벤트기획생성
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 유저플로우 02: AI 이벤트 기획 생성
|
||||||
|
|
||||||
|
actor "소상공인" as Owner
|
||||||
|
participant "이벤트 기획 시스템" as EventSystem
|
||||||
|
participant "GPT-4 API" as GPT4
|
||||||
|
participant "Claude API" as Claude
|
||||||
|
participant "Stable Diffusion API" as SD
|
||||||
|
participant "트렌드 분석 시스템" as TrendSystem
|
||||||
|
database "이벤트 DB" as EventDB
|
||||||
|
|
||||||
|
== 이벤트스토밍 요소 ==
|
||||||
|
|
||||||
|
note over Owner, EventDB
|
||||||
|
**Command**: 이벤트 목적 선택, 매장분석 요청, 이벤트 기획 생성, 이벤트 승인
|
||||||
|
**Event**: 이벤트 목적 선택됨, 매장분석 완료됨, 이벤트 기획안 생성됨,
|
||||||
|
경품 추천됨, 홍보문구 생성됨, 이미지/영상 생성됨, 이벤트 승인됨
|
||||||
|
**Actor**: 소상공인
|
||||||
|
**External System**: GPT-4 API, Claude API, Stable Diffusion API, 트렌드 분석 시스템
|
||||||
|
**Policy**: 10초 내 기획안 생성, 예산 내 최적 경품 추천
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 이벤트 목적 선택 ==
|
||||||
|
|
||||||
|
Owner -> EventSystem : **Command**: 이벤트 목적 선택\n(데이터: 목적[신규고객/재방문/매출증대/인지도향상], 예산)
|
||||||
|
activate EventSystem
|
||||||
|
EventSystem --> Owner : **Event**: 이벤트 목적 선택됨
|
||||||
|
|
||||||
|
== AI 매장 분석 및 기획 생성 (10초 이내) ==
|
||||||
|
|
||||||
|
EventSystem -> TrendSystem : **Command**: 매장 분석 요청\n(데이터: 업종, 지역, 시즌)
|
||||||
|
activate TrendSystem
|
||||||
|
|
||||||
|
note right of TrendSystem
|
||||||
|
**AI 분석 항목**
|
||||||
|
- 업종별 트렌드
|
||||||
|
- 지역 특성
|
||||||
|
- 시즌 이벤트
|
||||||
|
- 경쟁사 동향
|
||||||
|
end note
|
||||||
|
|
||||||
|
TrendSystem --> EventSystem : **Event**: 매장분석 완료됨\n(데이터: 분석결과, 추천테마)
|
||||||
|
deactivate TrendSystem
|
||||||
|
|
||||||
|
EventSystem -> GPT4 : 이벤트 기획 생성 요청\n(데이터: 목적, 분석결과, 예산)
|
||||||
|
activate GPT4
|
||||||
|
GPT4 --> EventSystem : **Event**: 이벤트 기획안 생성됨\n(데이터: 이벤트명, 테마, 참여방법)
|
||||||
|
deactivate GPT4
|
||||||
|
|
||||||
|
== 경품 추천 및 홍보 문구 생성 ==
|
||||||
|
|
||||||
|
EventSystem -> Claude : 경품 추천 요청\n(데이터: 예산, 업종, 목적)
|
||||||
|
activate Claude
|
||||||
|
|
||||||
|
note right of Claude
|
||||||
|
**Policy**: 예산 내
|
||||||
|
최적 경품 추천
|
||||||
|
- 매력도 분석
|
||||||
|
- 비용 대비 효과
|
||||||
|
- KT 멤버십 포인트 활용
|
||||||
|
end note
|
||||||
|
|
||||||
|
Claude --> EventSystem : **Event**: 경품 추천됨\n(데이터: 경품목록[5개], 예상효과)
|
||||||
|
deactivate Claude
|
||||||
|
|
||||||
|
EventSystem -> GPT4 : 홍보 문구 생성 요청\n(데이터: 이벤트명, 테마, 경품)
|
||||||
|
activate GPT4
|
||||||
|
GPT4 --> EventSystem : **Event**: 홍보문구 생성됨\n(데이터: 문구[5개 버전], SNS해시태그)
|
||||||
|
deactivate GPT4
|
||||||
|
|
||||||
|
== 이미지 및 영상 자동 생성 ==
|
||||||
|
|
||||||
|
EventSystem -> SD : 이미지 생성 요청\n(데이터: 이벤트 테마, 브랜드 컬러)
|
||||||
|
activate SD
|
||||||
|
SD --> EventSystem : **Event**: 이미지 생성됨\n(데이터: 이미지[3종], 포스터)
|
||||||
|
deactivate SD
|
||||||
|
|
||||||
|
EventSystem -> SD : 영상 생성 요청\n(데이터: 이벤트 스토리보드)
|
||||||
|
activate SD
|
||||||
|
SD --> EventSystem : **Event**: 영상 생성됨\n(데이터: 15초 영상, 썸네일)
|
||||||
|
deactivate SD
|
||||||
|
|
||||||
|
== 기획안 확인 및 승인 ==
|
||||||
|
|
||||||
|
EventSystem --> Owner : 완성된 기획안 제공\n(데이터: 전체 기획서, 예상 ROI 300%)
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**AI 생성 결과물**
|
||||||
|
✓ 이벤트 기획안
|
||||||
|
✓ 경품 5종 추천
|
||||||
|
✓ 홍보 문구 5개 버전
|
||||||
|
✓ 이미지 3종
|
||||||
|
✓ 15초 영상
|
||||||
|
✓ 예상 효과 분석
|
||||||
|
end note
|
||||||
|
|
||||||
|
Owner -> EventSystem : **Command**: 기획안 수정 요청\n(데이터: 수정사항)
|
||||||
|
EventSystem --> Owner : 수정된 기획안 제공
|
||||||
|
|
||||||
|
Owner -> EventSystem : **Command**: 이벤트 승인\n(데이터: 최종 선택 항목)
|
||||||
|
EventSystem -> EventDB : 이벤트 정보 저장
|
||||||
|
activate EventDB
|
||||||
|
EventDB --> EventSystem : 저장 완료
|
||||||
|
deactivate EventDB
|
||||||
|
|
||||||
|
EventSystem --> Owner : **Event**: 이벤트 승인됨\n(데이터: 이벤트ID, 배포 준비 완료)
|
||||||
|
|
||||||
|
deactivate EventSystem
|
||||||
|
|
||||||
|
note over Owner, EventDB
|
||||||
|
**소요 시간**: 10초 이내
|
||||||
|
**만족도**: 80% 이상 목표
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
127
think/es/03-이벤트채널배포.puml
Normal file
127
think/es/03-이벤트채널배포.puml
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
@startuml 03-이벤트채널배포
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 유저플로우 03: 이벤트 채널 배포
|
||||||
|
|
||||||
|
actor "소상공인" as Owner
|
||||||
|
participant "채널 배포 시스템" as DistSystem
|
||||||
|
participant "우리동네TV" as LocalTV
|
||||||
|
participant "링고비즈" as RingoBiz
|
||||||
|
participant "지니TV" as GenieTV
|
||||||
|
participant "Instagram API" as Instagram
|
||||||
|
participant "Naver Blog API" as NaverBlog
|
||||||
|
participant "KakaoTalk Channel API" as KakaoTalk
|
||||||
|
participant "QR코드 생성 시스템" as QRSystem
|
||||||
|
database "배포 이력 DB" as DistDB
|
||||||
|
|
||||||
|
== 이벤트스토밍 요소 ==
|
||||||
|
|
||||||
|
note over Owner, DistDB
|
||||||
|
**Command**: 배포 채널 선택, 원클릭 배포
|
||||||
|
**Event**: 배포채널 선택됨, 우리동네TV 배포됨, 링고비즈 배포됨,
|
||||||
|
지니TV 배포됨, SNS 자동포스팅됨, QR코드 생성됨, 배포 완료됨
|
||||||
|
**Actor**: 소상공인
|
||||||
|
**External System**: 우리동네TV, 링고비즈, 지니TV,
|
||||||
|
Instagram API, Naver Blog API, KakaoTalk Channel API
|
||||||
|
**Policy**: 원클릭으로 모든 채널 자동 배포
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 배포 채널 선택 ==
|
||||||
|
|
||||||
|
Owner -> DistSystem : **Command**: 배포 채널 선택\n(데이터: 채널목록[우리동네TV, 링고비즈, 지니TV, SNS], 타겟팅 설정)
|
||||||
|
activate DistSystem
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**채널 선택 옵션**
|
||||||
|
✓ 우리동네TV (반경 500m~1km)
|
||||||
|
✓ 링고비즈 (통화 연결음)
|
||||||
|
✓ 지니TV (저녁 시간대)
|
||||||
|
✓ SNS (Instagram, Naver, Kakao)
|
||||||
|
✓ 오프라인 QR코드
|
||||||
|
end note
|
||||||
|
|
||||||
|
DistSystem --> Owner : **Event**: 배포채널 선택됨
|
||||||
|
|
||||||
|
== 원클릭 다중 채널 배포 ==
|
||||||
|
|
||||||
|
Owner -> DistSystem : **Command**: 원클릭 배포 실행
|
||||||
|
|
||||||
|
par 병렬 배포 처리
|
||||||
|
|
||||||
|
DistSystem -> LocalTV : 우리동네TV 배포 요청\n(데이터: 15초 영상, 타겟팅[반경 500m-1km])
|
||||||
|
activate LocalTV
|
||||||
|
|
||||||
|
note right of LocalTV
|
||||||
|
**Policy**: 지역 기반 타겟팅
|
||||||
|
- 반경 500m~1km
|
||||||
|
- 지니TV 사용자 대상
|
||||||
|
- 15초 영상 자동 송출
|
||||||
|
end note
|
||||||
|
|
||||||
|
LocalTV --> DistSystem : **Event**: 우리동네TV 배포됨\n(데이터: 예상노출수, 배포ID)
|
||||||
|
deactivate LocalTV
|
||||||
|
|
||||||
|
DistSystem -> RingoBiz : 링고비즈 배포 요청\n(데이터: 이벤트 안내 음성, 매장 전화번호)
|
||||||
|
activate RingoBiz
|
||||||
|
|
||||||
|
RingoBiz --> DistSystem : **Event**: 링고비즈 배포됨\n(데이터: 연결음 업데이트 완료)
|
||||||
|
deactivate RingoBiz
|
||||||
|
|
||||||
|
DistSystem -> GenieTV : 지니TV 광고 배포 요청\n(데이터: 광고 영상, 타겟팅[1km 이내, 저녁 시간대])
|
||||||
|
activate GenieTV
|
||||||
|
|
||||||
|
note right of GenieTV
|
||||||
|
**배포 설정**
|
||||||
|
- 주변 1km 이내 가정
|
||||||
|
- 저녁 시간대 자동 노출
|
||||||
|
- 주말 우선 배치
|
||||||
|
end note
|
||||||
|
|
||||||
|
GenieTV --> DistSystem : **Event**: 지니TV 배포됨\n(데이터: 광고 스케줄, 예상 노출수)
|
||||||
|
deactivate GenieTV
|
||||||
|
|
||||||
|
DistSystem -> Instagram : Instagram 포스팅 요청\n(데이터: 이미지[3종], 홍보문구, 해시태그)
|
||||||
|
activate Instagram
|
||||||
|
Instagram --> DistSystem : **Event**: Instagram 포스팅 완료\n(데이터: 게시물 URL)
|
||||||
|
deactivate Instagram
|
||||||
|
|
||||||
|
DistSystem -> NaverBlog : Naver Blog 포스팅 요청\n(데이터: 이벤트 상세 설명, 이미지)
|
||||||
|
activate NaverBlog
|
||||||
|
NaverBlog --> DistSystem : **Event**: Naver Blog 포스팅 완료\n(데이터: 게시물 URL)
|
||||||
|
deactivate NaverBlog
|
||||||
|
|
||||||
|
DistSystem -> KakaoTalk : KakaoTalk 채널 메시지 발송\n(데이터: 이벤트 안내, 참여 링크)
|
||||||
|
activate KakaoTalk
|
||||||
|
KakaoTalk --> DistSystem : **Event**: KakaoTalk 메시지 발송 완료\n(데이터: 발송 건수)
|
||||||
|
deactivate KakaoTalk
|
||||||
|
|
||||||
|
DistSystem -> QRSystem : QR코드 생성 요청\n(데이터: 이벤트 참여 URL, 매장 정보)
|
||||||
|
activate QRSystem
|
||||||
|
QRSystem --> DistSystem : **Event**: QR코드 생성됨\n(데이터: QR코드 이미지, 포스터 PDF)
|
||||||
|
deactivate QRSystem
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
== 배포 완료 및 결과 확인 ==
|
||||||
|
|
||||||
|
DistSystem -> DistDB : 배포 이력 저장\n(데이터: 채널별 배포 정보, 타임스탬프)
|
||||||
|
activate DistDB
|
||||||
|
DistDB --> DistSystem : 저장 완료
|
||||||
|
deactivate DistDB
|
||||||
|
|
||||||
|
DistSystem --> Owner : **Event**: 배포 완료됨\n(데이터: 채널별 배포 결과, 예상 총 노출수)
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**배포 완료 결과**
|
||||||
|
✓ 우리동네TV: 예상 노출 5,000명
|
||||||
|
✓ 링고비즈: 연결음 업데이트 완료
|
||||||
|
✓ 지니TV: 예상 노출 10,000가정
|
||||||
|
✓ Instagram: 게시물 공개
|
||||||
|
✓ Naver Blog: 게시물 공개
|
||||||
|
✓ KakaoTalk: 구독자 500명 발송
|
||||||
|
✓ QR코드: 매장 내 부착용 제공
|
||||||
|
end note
|
||||||
|
|
||||||
|
deactivate DistSystem
|
||||||
|
|
||||||
|
@enduml
|
||||||
119
think/es/04-이벤트참여및관리.puml
Normal file
119
think/es/04-이벤트참여및관리.puml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
@startuml 04-이벤트참여및관리
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 유저플로우 04: 이벤트 참여 및 관리
|
||||||
|
|
||||||
|
actor "이벤트 참여자" as Customer
|
||||||
|
participant "이벤트 참여 시스템" as ParticipationSystem
|
||||||
|
participant "중복 체크 시스템" as DuplicateCheck
|
||||||
|
participant "알림 시스템" as NotificationSystem
|
||||||
|
database "참여자 DB" as ParticipantDB
|
||||||
|
database "이벤트 로그 DB" as EventLogDB
|
||||||
|
|
||||||
|
== 이벤트스토밍 요소 ==
|
||||||
|
|
||||||
|
note over Customer, EventLogDB
|
||||||
|
**Command**: 이벤트 조회, 참여 신청
|
||||||
|
**Event**: 이벤트 발견됨, 참여신청됨, 중복체크 완료됨,
|
||||||
|
참여 확인됨, 참여정보 저장됨
|
||||||
|
**Actor**: 이벤트 참여자 (고객)
|
||||||
|
**Policy**: 중복 참여 불가, 자동 접수 처리
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 이벤트 발견 및 조회 ==
|
||||||
|
|
||||||
|
Customer -> ParticipationSystem : **Command**: 이벤트 조회 요청\n(데이터: 채널 경로[우리동네TV/SNS/QR코드])
|
||||||
|
activate ParticipationSystem
|
||||||
|
|
||||||
|
note over Customer
|
||||||
|
**유입 경로**
|
||||||
|
- 우리동네TV 시청
|
||||||
|
- Instagram 게시물
|
||||||
|
- Naver Blog
|
||||||
|
- KakaoTalk 메시지
|
||||||
|
- 매장 QR코드 스캔
|
||||||
|
end note
|
||||||
|
|
||||||
|
ParticipationSystem --> Customer : **Event**: 이벤트 발견됨\n(데이터: 이벤트 상세 정보, 경품 정보, 참여 방법)
|
||||||
|
|
||||||
|
== 이벤트 참여 신청 ==
|
||||||
|
|
||||||
|
Customer -> ParticipationSystem : **Command**: 참여 신청\n(데이터: 이름, 전화번호, 참여 경로)
|
||||||
|
|
||||||
|
ParticipationSystem -> EventLogDB : 참여 로그 기록\n(데이터: 참여 시간, 경로, 디바이스 정보)
|
||||||
|
activate EventLogDB
|
||||||
|
EventLogDB --> ParticipationSystem : 로그 저장 완료
|
||||||
|
deactivate EventLogDB
|
||||||
|
|
||||||
|
== 중복 참여 체크 ==
|
||||||
|
|
||||||
|
ParticipationSystem -> DuplicateCheck : 중복 확인 요청\n(데이터: 전화번호, 이벤트ID)
|
||||||
|
activate DuplicateCheck
|
||||||
|
|
||||||
|
note right of DuplicateCheck
|
||||||
|
**Policy**: 중복 참여 불가
|
||||||
|
- 전화번호 기반 확인
|
||||||
|
- 이벤트별 1회 제한
|
||||||
|
- 실시간 중복 체크
|
||||||
|
end note
|
||||||
|
|
||||||
|
DuplicateCheck -> ParticipantDB : 참여 이력 조회
|
||||||
|
activate ParticipantDB
|
||||||
|
ParticipantDB --> DuplicateCheck : 조회 결과
|
||||||
|
deactivate ParticipantDB
|
||||||
|
|
||||||
|
DuplicateCheck --> ParticipationSystem : **Event**: 중복체크 완료됨\n(데이터: 중복 여부)
|
||||||
|
deactivate DuplicateCheck
|
||||||
|
|
||||||
|
alt 중복 없음 (정상 참여)
|
||||||
|
|
||||||
|
ParticipationSystem -> ParticipantDB : 참여자 정보 저장\n(데이터: 참여자 정보, 참여 시간, 경로)
|
||||||
|
activate ParticipantDB
|
||||||
|
ParticipantDB --> ParticipationSystem : **Event**: 참여정보 저장됨\n(데이터: 참여번호)
|
||||||
|
deactivate ParticipantDB
|
||||||
|
|
||||||
|
ParticipationSystem -> NotificationSystem : 참여 확인 알림 발송 요청\n(데이터: 전화번호, 참여번호)
|
||||||
|
activate NotificationSystem
|
||||||
|
NotificationSystem --> Customer : **Event**: 참여 확인됨\n(알림톡: 참여 완료, 당첨자 발표 일정)
|
||||||
|
deactivate NotificationSystem
|
||||||
|
|
||||||
|
ParticipationSystem --> Customer : 참여 완료 화면\n(데이터: 참여번호, 경품 정보, 발표 일정)
|
||||||
|
|
||||||
|
note over Customer
|
||||||
|
**참여 완료**
|
||||||
|
✓ 참여번호: #12345
|
||||||
|
✓ 경품: KT 멤버십 5,000P
|
||||||
|
✓ 발표: 2025-10-24 18:00
|
||||||
|
✓ 당첨 시 알림톡 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
else 중복 참여
|
||||||
|
|
||||||
|
ParticipationSystem --> Customer : 중복 참여 불가 안내\n(사유: 이미 참여한 이벤트)
|
||||||
|
|
||||||
|
note over Customer
|
||||||
|
**중복 참여 제한**
|
||||||
|
- 1인 1회 참여 제한
|
||||||
|
- 공정한 당첨 기회 보장
|
||||||
|
end note
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
deactivate ParticipationSystem
|
||||||
|
|
||||||
|
== 실시간 참여 현황 집계 ==
|
||||||
|
|
||||||
|
ParticipationSystem -> EventLogDB : 실시간 집계 업데이트
|
||||||
|
activate EventLogDB
|
||||||
|
EventLogDB --> ParticipationSystem : 집계 완료
|
||||||
|
deactivate EventLogDB
|
||||||
|
|
||||||
|
note over ParticipationSystem
|
||||||
|
**실시간 집계 데이터**
|
||||||
|
- 총 참여자 수
|
||||||
|
- 채널별 참여 분포
|
||||||
|
- 시간대별 참여 추이
|
||||||
|
→ 효과 측정 시스템 전달
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
148
think/es/05-효과측정및분석.puml
Normal file
148
think/es/05-효과측정및분석.puml
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
@startuml 05-효과측정및분석
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 유저플로우 05: 효과 측정 및 분석
|
||||||
|
|
||||||
|
actor "소상공인" as Owner
|
||||||
|
participant "실시간 모니터링 시스템" as MonitoringSystem
|
||||||
|
participant "데이터 분석 엔진" as AnalyticsEngine
|
||||||
|
participant "AI 개선 제안 시스템" as AIImprovement
|
||||||
|
participant "매출 연동 시스템" as SalesSystem
|
||||||
|
database "참여자 DB" as ParticipantDB
|
||||||
|
database "채널 로그 DB" as ChannelLogDB
|
||||||
|
database "매출 DB" as SalesDB
|
||||||
|
database "분석 결과 DB" as AnalyticsDB
|
||||||
|
|
||||||
|
== 이벤트스토밍 요소 ==
|
||||||
|
|
||||||
|
note over Owner, AnalyticsDB
|
||||||
|
**Command**: 실시간 모니터링 조회, 분석 리포트 요청
|
||||||
|
**Event**: 참여자수 집계됨, 채널별 노출수 집계됨,
|
||||||
|
매장방문자 증가 감지됨, ROI 계산됨,
|
||||||
|
분석리포트 생성됨, 개선안 제시됨
|
||||||
|
**Actor**: 소상공인
|
||||||
|
**External System**: 분석 시스템, AI 개선안 생성 시스템
|
||||||
|
**Policy**: 실시간 모니터링, AI 자동 분석 및 개선 제안
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 실시간 효과 모니터링 ==
|
||||||
|
|
||||||
|
Owner -> MonitoringSystem : **Command**: 실시간 모니터링 조회
|
||||||
|
activate MonitoringSystem
|
||||||
|
|
||||||
|
MonitoringSystem -> ParticipantDB : 참여자 수 조회
|
||||||
|
activate ParticipantDB
|
||||||
|
ParticipantDB --> MonitoringSystem : **Event**: 참여자수 집계됨\n(데이터: 총 참여자 수, 시간대별 추이)
|
||||||
|
deactivate ParticipantDB
|
||||||
|
|
||||||
|
MonitoringSystem -> ChannelLogDB : 채널별 노출 수 조회
|
||||||
|
activate ChannelLogDB
|
||||||
|
ChannelLogDB --> MonitoringSystem : **Event**: 채널별 노출수 집계됨\n(데이터: 우리동네TV, 지니TV, SNS 노출 수)
|
||||||
|
deactivate ChannelLogDB
|
||||||
|
|
||||||
|
note over MonitoringSystem
|
||||||
|
**실시간 지표**
|
||||||
|
- 참여자 수
|
||||||
|
- 채널별 노출 수
|
||||||
|
- 참여율 (참여/노출)
|
||||||
|
- 시간대별 추이
|
||||||
|
end note
|
||||||
|
|
||||||
|
MonitoringSystem --> Owner : 실시간 대시보드 제공\n(데이터: 참여자 수, 노출 수, 참여율)
|
||||||
|
|
||||||
|
== 매장 방문자 및 매출 분석 ==
|
||||||
|
|
||||||
|
MonitoringSystem -> SalesSystem : 매장 방문자 데이터 요청\n(데이터: 이벤트 기간, 매장ID)
|
||||||
|
activate SalesSystem
|
||||||
|
|
||||||
|
SalesSystem -> SalesDB : 매출 데이터 조회\n(데이터: 이벤트 전후 매출 비교)
|
||||||
|
activate SalesDB
|
||||||
|
SalesDB --> SalesSystem : 매출 데이터
|
||||||
|
deactivate SalesDB
|
||||||
|
|
||||||
|
SalesSystem --> MonitoringSystem : **Event**: 매장방문자 증가 감지됨\n(데이터: 방문자 증가율, 매출 증가율)
|
||||||
|
deactivate SalesSystem
|
||||||
|
|
||||||
|
note right of SalesSystem
|
||||||
|
**Policy**: 실시간 매출 연동
|
||||||
|
- 이벤트 전후 비교
|
||||||
|
- 방문자 증가율 계산
|
||||||
|
- 매출 증가율 분석
|
||||||
|
end note
|
||||||
|
|
||||||
|
== ROI 계산 및 분석 ==
|
||||||
|
|
||||||
|
MonitoringSystem -> AnalyticsEngine : 종합 분석 요청\n(데이터: 참여 데이터, 노출 데이터, 매출 데이터)
|
||||||
|
activate AnalyticsEngine
|
||||||
|
|
||||||
|
AnalyticsEngine -> AnalyticsEngine : ROI 계산\n(수식: (매출 증가 - 이벤트 비용) / 이벤트 비용 × 100)
|
||||||
|
|
||||||
|
note right of AnalyticsEngine
|
||||||
|
**분석 항목**
|
||||||
|
- 참여율 = 참여자 / 노출 수
|
||||||
|
- 전환율 = 구매자 / 참여자
|
||||||
|
- 매출 증가율
|
||||||
|
- ROI = (수익 - 비용) / 비용
|
||||||
|
- 채널별 효율성
|
||||||
|
end note
|
||||||
|
|
||||||
|
AnalyticsEngine --> MonitoringSystem : **Event**: ROI 계산됨\n(데이터: ROI 300%, 채널별 효율성)
|
||||||
|
deactivate AnalyticsEngine
|
||||||
|
|
||||||
|
== 분석 리포트 생성 ==
|
||||||
|
|
||||||
|
Owner -> MonitoringSystem : **Command**: 분석 리포트 요청
|
||||||
|
|
||||||
|
MonitoringSystem -> AnalyticsEngine : 상세 리포트 생성 요청
|
||||||
|
activate AnalyticsEngine
|
||||||
|
|
||||||
|
AnalyticsEngine -> AnalyticsDB : 분석 결과 저장
|
||||||
|
activate AnalyticsDB
|
||||||
|
AnalyticsDB --> AnalyticsEngine : 저장 완료
|
||||||
|
deactivate AnalyticsDB
|
||||||
|
|
||||||
|
AnalyticsEngine --> MonitoringSystem : **Event**: 분석리포트 생성됨\n(데이터: 종합 분석 보고서)
|
||||||
|
deactivate AnalyticsEngine
|
||||||
|
|
||||||
|
MonitoringSystem --> Owner : 분석 리포트 제공
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**분석 리포트 내용**
|
||||||
|
✓ 총 참여자: 1,250명
|
||||||
|
✓ 채널별 노출: 15,000명
|
||||||
|
✓ 참여율: 8.3%
|
||||||
|
✓ 매출 증가: 20%
|
||||||
|
✓ ROI: 300%
|
||||||
|
✓ 채널 효율: 우리동네TV(최고)
|
||||||
|
end note
|
||||||
|
|
||||||
|
== AI 개선 제안 ==
|
||||||
|
|
||||||
|
MonitoringSystem -> AIImprovement : AI 개선안 요청\n(데이터: 이벤트 결과, 분석 지표)
|
||||||
|
activate AIImprovement
|
||||||
|
|
||||||
|
note right of AIImprovement
|
||||||
|
**AI 분석 기준**
|
||||||
|
- 성공/실패 요인 분석
|
||||||
|
- 채널별 성과 비교
|
||||||
|
- 타겟팅 정확도
|
||||||
|
- 최적화 기회 식별
|
||||||
|
end note
|
||||||
|
|
||||||
|
AIImprovement --> MonitoringSystem : **Event**: 개선안 제시됨\n(데이터: 다음 이벤트 개선 제안)
|
||||||
|
deactivate AIImprovement
|
||||||
|
|
||||||
|
MonitoringSystem --> Owner : AI 개선 제안 제공
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**AI 개선 제안**
|
||||||
|
✓ 우리동네TV 노출 확대 추천
|
||||||
|
✓ 저녁 시간대 집중 배치
|
||||||
|
✓ 경품 매력도 상향 조정
|
||||||
|
✓ 참여 방법 단순화
|
||||||
|
✓ 예상 ROI: 350%
|
||||||
|
end note
|
||||||
|
|
||||||
|
deactivate MonitoringSystem
|
||||||
|
|
||||||
|
@enduml
|
||||||
162
think/es/06-당첨자선정및알림.puml
Normal file
162
think/es/06-당첨자선정및알림.puml
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
@startuml 06-당첨자선정및알림
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 유저플로우 06: 당첨자 선정 및 알림
|
||||||
|
|
||||||
|
actor "소상공인" as Owner
|
||||||
|
actor "당첨자" as Winner
|
||||||
|
participant "당첨자 선정 시스템" as LotterySystem
|
||||||
|
participant "알림 발송 시스템" as NotificationSystem
|
||||||
|
participant "KT 멤버십 시스템" as KTMembership
|
||||||
|
participant "경품 지급 시스템" as RewardSystem
|
||||||
|
database "참여자 DB" as ParticipantDB
|
||||||
|
database "당첨 이력 DB" as WinnerDB
|
||||||
|
|
||||||
|
== 이벤트스토밍 요소 ==
|
||||||
|
|
||||||
|
note over Owner, WinnerDB
|
||||||
|
**Command**: 당첨자 선정, 알림 발송, 경품 지급 확인
|
||||||
|
**Event**: 이벤트 종료됨, 당첨자 자동선정됨,
|
||||||
|
당첨자 알림발송됨, 경품지급 완료됨
|
||||||
|
**Actor**: 소상공인, 당첨자
|
||||||
|
**External System**: 알림톡 시스템, KT 멤버십 포인트 시스템
|
||||||
|
**Policy**: 공정한 자동 추첨, 즉시 알림 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 이벤트 종료 및 당첨자 선정 ==
|
||||||
|
|
||||||
|
Owner -> LotterySystem : **Command**: 당첨자 선정 요청\n(데이터: 이벤트ID, 당첨자 수)
|
||||||
|
activate LotterySystem
|
||||||
|
|
||||||
|
LotterySystem --> Owner : **Event**: 이벤트 종료됨
|
||||||
|
|
||||||
|
LotterySystem -> ParticipantDB : 전체 참여자 목록 조회
|
||||||
|
activate ParticipantDB
|
||||||
|
ParticipantDB --> LotterySystem : 참여자 목록\n(데이터: 1,250명)
|
||||||
|
deactivate ParticipantDB
|
||||||
|
|
||||||
|
note right of LotterySystem
|
||||||
|
**Policy**: 공정한 자동 추첨
|
||||||
|
- 난수 생성기 사용
|
||||||
|
- 중복 당첨 방지
|
||||||
|
- 투명한 선정 기준
|
||||||
|
- 블록체인 기록 (선택)
|
||||||
|
end note
|
||||||
|
|
||||||
|
LotterySystem -> LotterySystem : 무작위 추첨 실행\n(알고리즘: Cryptographically Secure Random)
|
||||||
|
|
||||||
|
LotterySystem -> WinnerDB : 당첨자 정보 저장\n(데이터: 당첨자 목록, 추첨 시간, 추첨 알고리즘)
|
||||||
|
activate WinnerDB
|
||||||
|
WinnerDB --> LotterySystem : 저장 완료
|
||||||
|
deactivate WinnerDB
|
||||||
|
|
||||||
|
LotterySystem --> Owner : **Event**: 당첨자 자동선정됨\n(데이터: 당첨자 목록[10명], 추첨 로그)
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**당첨자 선정 완료**
|
||||||
|
✓ 총 참여: 1,250명
|
||||||
|
✓ 당첨자: 10명
|
||||||
|
✓ 당첨 확률: 0.8%
|
||||||
|
✓ 추첨 방식: 무작위
|
||||||
|
✓ 추첨 시간: 2025-10-24 18:00
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 당첨자 알림 발송 ==
|
||||||
|
|
||||||
|
LotterySystem -> NotificationSystem : 알림 발송 요청\n(데이터: 당첨자 목록, 경품 정보)
|
||||||
|
activate NotificationSystem
|
||||||
|
|
||||||
|
par 병렬 알림 발송
|
||||||
|
|
||||||
|
loop 각 당첨자에게
|
||||||
|
NotificationSystem -> Winner : **Event**: 당첨자 알림발송됨\n(알림톡: 당첨 축하, 경품 수령 안내)
|
||||||
|
|
||||||
|
note over Winner
|
||||||
|
**당첨 알림**
|
||||||
|
🎉 축하합니다!
|
||||||
|
✓ 경품: KT 멤버십 5,000P
|
||||||
|
✓ 수령 방법: 자동 지급
|
||||||
|
✓ 유효 기간: 30일
|
||||||
|
end note
|
||||||
|
end
|
||||||
|
|
||||||
|
NotificationSystem -> Owner : 알림 발송 현황 보고\n(데이터: 발송 완료 건수)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
NotificationSystem --> LotterySystem : 알림 발송 완료
|
||||||
|
deactivate NotificationSystem
|
||||||
|
|
||||||
|
== 경품 자동 지급 ==
|
||||||
|
|
||||||
|
alt 경품 유형: KT 멤버십 포인트
|
||||||
|
|
||||||
|
LotterySystem -> KTMembership : 포인트 지급 요청\n(데이터: 당첨자 전화번호, 포인트 금액)
|
||||||
|
activate KTMembership
|
||||||
|
|
||||||
|
note right of KTMembership
|
||||||
|
**자동 포인트 지급**
|
||||||
|
- 즉시 지급 처리
|
||||||
|
- 30일 유효 기간
|
||||||
|
- 사용 내역 추적
|
||||||
|
end note
|
||||||
|
|
||||||
|
loop 각 당첨자
|
||||||
|
KTMembership -> Winner : 포인트 자동 적립\n(데이터: 5,000P)
|
||||||
|
KTMembership --> Winner : 포인트 적립 완료 알림
|
||||||
|
end
|
||||||
|
|
||||||
|
KTMembership --> LotterySystem : **Event**: 경품지급 완료됨\n(데이터: 지급 완료 목록)
|
||||||
|
deactivate KTMembership
|
||||||
|
|
||||||
|
else 경품 유형: 실물 경품
|
||||||
|
|
||||||
|
LotterySystem -> RewardSystem : 경품 배송 요청\n(데이터: 당첨자 정보, 배송 주소)
|
||||||
|
activate RewardSystem
|
||||||
|
|
||||||
|
RewardSystem -> Winner : 배송지 정보 수집\n(알림톡: 배송지 입력 요청)
|
||||||
|
Winner --> RewardSystem : 배송지 정보 제공
|
||||||
|
|
||||||
|
RewardSystem --> LotterySystem : 배송 처리 완료
|
||||||
|
deactivate RewardSystem
|
||||||
|
|
||||||
|
RewardSystem -> Winner : 배송 시작 알림\n(데이터: 송장 번호)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
== 경품 지급 확인 및 완료 ==
|
||||||
|
|
||||||
|
LotterySystem -> WinnerDB : 경품 지급 이력 업데이트
|
||||||
|
activate WinnerDB
|
||||||
|
WinnerDB --> LotterySystem : 업데이트 완료
|
||||||
|
deactivate WinnerDB
|
||||||
|
|
||||||
|
LotterySystem --> Owner : 경품 지급 완료 보고\n(데이터: 지급 완료 목록, 지급 방식)
|
||||||
|
|
||||||
|
note over Owner
|
||||||
|
**경품 지급 완료**
|
||||||
|
✓ 포인트 지급: 10명 완료
|
||||||
|
✓ 총 지급액: 50,000P
|
||||||
|
✓ 즉시 지급 처리
|
||||||
|
✓ 수령 확인: 100%
|
||||||
|
end note
|
||||||
|
|
||||||
|
deactivate LotterySystem
|
||||||
|
|
||||||
|
== 이벤트 종료 후 피드백 ==
|
||||||
|
|
||||||
|
NotificationSystem -> Winner : 이벤트 참여 감사 메시지\n(내용: 재방문 유도, 다음 이벤트 안내)
|
||||||
|
activate NotificationSystem
|
||||||
|
|
||||||
|
note over Winner
|
||||||
|
**감사 메시지**
|
||||||
|
✓ 이벤트 참여 감사
|
||||||
|
✓ 매장 재방문 혜택 안내
|
||||||
|
✓ 다음 이벤트 예고
|
||||||
|
end note
|
||||||
|
|
||||||
|
deactivate NotificationSystem
|
||||||
|
|
||||||
|
Owner -> Owner : 이벤트 결과 검토 및\n다음 이벤트 기획
|
||||||
|
|
||||||
|
@enduml
|
||||||
57
think/es/userflow.puml
Normal file
57
think/es/userflow.puml
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
@startuml userflow
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title KT AI 기반 소상공인 이벤트 자동 생성 서비스 - 유저플로우 연결도
|
||||||
|
|
||||||
|
actor "소상공인" as Owner
|
||||||
|
actor "이벤트 참여자" as Customer
|
||||||
|
participant "회원가입 및 매장등록\n(01-회원가입및매장등록)" as Flow01
|
||||||
|
participant "AI 이벤트 기획 생성\n(02-AI이벤트기획생성)" as Flow02
|
||||||
|
participant "이벤트 채널 배포\n(03-이벤트채널배포)" as Flow03
|
||||||
|
participant "이벤트 참여 및 관리\n(04-이벤트참여및관리)" as Flow04
|
||||||
|
participant "효과 측정 및 분석\n(05-효과측정및분석)" as Flow05
|
||||||
|
participant "당첨자 선정 및 알림\n(06-당첨자선정및알림)" as Flow06
|
||||||
|
|
||||||
|
== 소상공인 여정 ==
|
||||||
|
|
||||||
|
Owner -> Flow01 : 1. 서비스 가입 및 매장 등록
|
||||||
|
Flow01 --> Owner : 회원가입 완료
|
||||||
|
|
||||||
|
Owner -> Flow02 : 2. AI 이벤트 기획 생성 요청
|
||||||
|
Flow02 --> Owner : 이벤트 기획안 제공
|
||||||
|
|
||||||
|
Owner -> Flow03 : 3. 다중 채널 배포 실행
|
||||||
|
Flow03 --> Owner : 배포 완료 확인
|
||||||
|
|
||||||
|
Owner -> Flow05 : 4. 실시간 효과 모니터링
|
||||||
|
Flow05 --> Owner : 분석 리포트 제공
|
||||||
|
|
||||||
|
Owner -> Flow06 : 5. 당첨자 선정 및 경품 지급
|
||||||
|
Flow06 --> Owner : 당첨자 알림 완료
|
||||||
|
|
||||||
|
== 이벤트 참여자 여정 ==
|
||||||
|
|
||||||
|
Customer -> Flow03 : 6. 채널을 통해 이벤트 발견
|
||||||
|
Flow03 --> Customer : 이벤트 정보 제공
|
||||||
|
|
||||||
|
Customer -> Flow04 : 7. 이벤트 참여 신청
|
||||||
|
Flow04 --> Customer : 참여 접수 완료
|
||||||
|
|
||||||
|
Customer -> Flow06 : 8. 당첨 여부 확인
|
||||||
|
Flow06 --> Customer : 당첨 알림 수신
|
||||||
|
|
||||||
|
== 시스템 데이터 흐름 ==
|
||||||
|
|
||||||
|
Flow02 -> Flow03 : 이벤트 콘텐츠 전달
|
||||||
|
Flow03 -> Flow04 : 참여 경로 정보 전달
|
||||||
|
Flow04 -> Flow05 : 참여 데이터 집계
|
||||||
|
Flow04 -> Flow06 : 참여자 목록 전달
|
||||||
|
Flow05 -> Flow02 : AI 개선 제안 피드백
|
||||||
|
|
||||||
|
note over Flow01, Flow06
|
||||||
|
소상공인은 가입 → 기획 → 배포 → 모니터링 → 선정의
|
||||||
|
순환 구조로 서비스를 이용하며,
|
||||||
|
고객은 발견 → 참여 → 당첨의 간단한 여정을 경험합니다.
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
66
tools/check-plantuml.ps1
Normal file
66
tools/check-plantuml.ps1
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[string]$FilePath = "C:\home\workspace\tripgen\design\backend\system\azure-physical-architecture.txt"
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Host "=== PlantUML Syntax Checker ===" -ForegroundColor Cyan
|
||||||
|
Write-Host "Target file: $FilePath" -ForegroundColor Yellow
|
||||||
|
|
||||||
|
# Check if file exists
|
||||||
|
if (-not (Test-Path $FilePath)) {
|
||||||
|
Write-Host "❌ File not found: $FilePath" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute directly in PowerShell
|
||||||
|
$timestamp = Get-Date -Format 'yyyyMMddHHmmss'
|
||||||
|
$tempFile = "/tmp/puml_$timestamp.puml"
|
||||||
|
|
||||||
|
# Copy file
|
||||||
|
Write-Host "`n1. Copying file..." -ForegroundColor Gray
|
||||||
|
Write-Host " Temporary file: $tempFile"
|
||||||
|
docker cp $FilePath "plantuml:$tempFile"
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Host "❌ File copy failed" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
Write-Host " ✅ Copy completed" -ForegroundColor Green
|
||||||
|
|
||||||
|
# Find JAR file path
|
||||||
|
Write-Host "`n2. Looking for PlantUML JAR file..." -ForegroundColor Gray
|
||||||
|
$JAR_PATH = docker exec plantuml sh -c "find / -name 'plantuml*.jar' 2>/dev/null | head -1"
|
||||||
|
Write-Host " JAR path: $JAR_PATH"
|
||||||
|
Write-Host " ✅ JAR file confirmed" -ForegroundColor Green
|
||||||
|
|
||||||
|
# Syntax check
|
||||||
|
Write-Host "`n3. Running syntax check..." -ForegroundColor Gray
|
||||||
|
$syntaxOutput = docker exec plantuml sh -c "java -jar $JAR_PATH -checkonly $tempFile 2>&1"
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -eq 0) {
|
||||||
|
Write-Host "`n✅ Syntax check passed!" -ForegroundColor Green
|
||||||
|
Write-Host " No syntax errors found in the diagram." -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "`n❌ Syntax errors detected!" -ForegroundColor Red
|
||||||
|
Write-Host "Error details:" -ForegroundColor Red
|
||||||
|
Write-Host $syntaxOutput -ForegroundColor Yellow
|
||||||
|
|
||||||
|
# Detailed error check
|
||||||
|
Write-Host "`nAnalyzing detailed errors..." -ForegroundColor Yellow
|
||||||
|
$detailError = docker exec plantuml sh -c "java -jar $JAR_PATH -failfast -v $tempFile 2>&1"
|
||||||
|
$errorLines = $detailError | Select-String "Error line"
|
||||||
|
|
||||||
|
if ($errorLines) {
|
||||||
|
Write-Host "`n📍 Error locations:" -ForegroundColor Magenta
|
||||||
|
$errorLines | ForEach-Object {
|
||||||
|
Write-Host " $($_.Line)" -ForegroundColor Red
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clean up temporary file
|
||||||
|
Write-Host "`n4. Cleaning up temporary files..." -ForegroundColor Gray
|
||||||
|
docker exec plantuml sh -c "rm -f $tempFile" 2>$null
|
||||||
|
Write-Host " ✅ Cleanup completed" -ForegroundColor Green
|
||||||
|
|
||||||
|
Write-Host "`n=== Check completed ===" -ForegroundColor Cyan
|
||||||
Loading…
x
Reference in New Issue
Block a user