FanPulse Event Storming 결과
프로젝트 정보
| 항목 |
내용 |
| 프로젝트명 |
FanPulse |
| 작성일 |
2025-12-28 |
| 버전 |
1.0.0 |
1. Event Storming 개요
Event Storming은 도메인 이벤트를 중심으로 비즈니스 프로세스를 시각화하는 방법론입니다. 이 문서는 FanPulse의 주요 비즈니스 흐름을 이벤트 중심으로 정리합니다.
범례
| 색상 |
의미 |
| 주황색 |
Domain Event (과거형) |
| 파란색 |
Command (명령) |
| 노란색 |
Aggregate |
| 분홍색 |
External System |
| 보라색 |
Policy (정책) |
| 초록색 |
Read Model |
2. 사용자 가입 및 인증 흐름
sequenceDiagram
participant User as 사용자
participant Identity as Identity Context
participant Notification as Notification Context
participant Reward as Reward Context
rect rgb(200, 230, 255)
Note over User,Identity: 이메일 회원가입
User->>Identity: RegisterWithEmail
Identity->>Identity: 이메일 중복 검증
Identity->>Identity: 비밀번호 해시
Identity-->>Identity: UserRegistered
end
rect rgb(255, 230, 200)
Note over Identity,Notification: 이벤트 처리
Identity-->>Notification: UserRegistered 이벤트
Identity-->>Reward: UserRegistered 이벤트
Notification->>User: 환영 알림 전송
Reward->>Reward: 초기 포인트 지급 (+100P)
end
rect rgb(200, 255, 230)
Note over User,Identity: 로그인
User->>Identity: LoginWithEmail
Identity->>Identity: 비밀번호 검증
Identity-->>Identity: UserLoggedIn
Identity->>User: JWT 토큰 반환
end
이벤트 목록
| 이벤트 |
트리거 |
구독자 |
처리 |
| UserRegistered |
회원가입 완료 |
Notification, Reward |
환영 알림, 초기 포인트 |
| UserLoggedIn |
로그인 성공 |
- |
세션 기록 |
| PasswordChanged |
비밀번호 변경 |
Notification |
보안 알림 |
| UserDeleted |
회원 탈퇴 |
All |
연관 데이터 정리 |
3. 투표 참여 흐름
sequenceDiagram
participant User as 사용자
participant Voting as Voting Context
participant Membership as Membership Context
participant Reward as Reward Context
participant Notification as Notification Context
rect rgb(200, 230, 255)
Note over User,Voting: 투표 참여
User->>Voting: CastVote
Voting->>Voting: 투표 상태 검증 (ACTIVE)
Voting->>Voting: 중복 투표 검증
Voting->>Voting: 투표권 확인
end
rect rgb(255, 230, 200)
Note over Voting,Membership: VIP 혜택 확인
Voting->>Membership: GetMembershipStatus
Membership-->>Voting: VIP 여부 반환
end
rect rgb(200, 255, 230)
Note over Voting,Notification: 투표 처리
Voting->>Voting: 투표권 차감
Voting->>Voting: 투표 기록
Voting->>Voting: 옵션 카운트 증가
Voting-->>Voting: VoteCasted
end
rect rgb(255, 200, 230)
Note over Voting,Notification: 이벤트 처리
Voting-->>Reward: VoteCasted 이벤트
Voting-->>Notification: VoteCasted 이벤트
Reward->>Reward: 포인트 적립 (+5P)
Notification->>User: 투표 완료 알림
end
투표 정책 (Policy)
graph LR
subgraph 투표권 정책
A[일일 리셋 정책] --> B[자정에 DailyVotes 리셋]
C[VIP 정책] --> D[VIP는 일일 3회, FREE는 1회]
E[보너스 정책] --> F[광고 시청 시 +1 투표권]
end
subgraph 투표 제한 정책
G[중복 방지] --> H[투표당 1회만 참여 가능]
I[마감 검증] --> J[마감된 투표 참여 불가]
end
이벤트 목록
| 이벤트 |
트리거 |
구독자 |
처리 |
| VoteCasted |
투표 완료 |
Reward, Notification |
포인트 적립, 알림 |
| PollCreated |
투표 생성 |
Notification |
신규 투표 알림 |
| PollClosed |
투표 마감 |
Notification |
결과 발표 알림 |
| BonusVotesAdded |
보너스 획득 |
- |
투표권 추가 |
| DailyVotesReset |
자정 리셋 |
- |
일일 투표권 초기화 |