mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 16:06:23 +00:00
96 lines
3.0 KiB
Plaintext
96 lines
3.0 KiB
Plaintext
@startuml
|
|
!theme mono
|
|
|
|
title 04. 실시간 협업 검증 - 이벤트스토밍 플로우
|
|
|
|
actor "회의 참석자 A" as UserA
|
|
actor "회의 참석자 B" as UserB
|
|
participant "회의록 시스템" as System
|
|
participant "웹소켓 서버" as WebSocket
|
|
participant "버전 관리" as Version
|
|
|
|
== 참석자 A가 회의록 수정 ==
|
|
|
|
UserA -> System : **커맨드**: 회의록 수정하기\n(데이터: 회의록 ID, 수정 내용, 수정자, 타임스탬프)
|
|
activate System
|
|
System -> System : 수정 내용 검증
|
|
System --> UserA : **이벤트**: 참석자가 회의록을 수정함\n(데이터: 수정 ID, 수정자, 수정 내용, 수정 위치)
|
|
deactivate System
|
|
|
|
System -> Version : 수정 이력 저장\n(데이터: 수정 ID, 버전 정보)
|
|
activate Version
|
|
Version --> System : 버전 저장 완료
|
|
deactivate Version
|
|
|
|
note right of System
|
|
**Policy/Rule**:
|
|
회의록 수정 시 →
|
|
웹소켓을 통해 모든 참석자에게
|
|
즉시 동기화
|
|
end note
|
|
|
|
== 실시간 동기화 ==
|
|
|
|
System -> WebSocket : **커맨드**: 수정 동기화하기\n(데이터: 수정 델타, 버전 정보)
|
|
activate WebSocket
|
|
WebSocket -> UserB : 실시간 동기화 전송
|
|
WebSocket --> System : **이벤트**: 수정 사항이 동기화됨\n(데이터: 동기화 시간, 영향받은 참석자 목록)
|
|
deactivate WebSocket
|
|
|
|
UserB -> UserB : 화면에 수정 사항 반영
|
|
|
|
== 동시 수정 충돌 발생 ==
|
|
|
|
UserB -> System : **커맨드**: 회의록 수정하기\n(동일 위치 수정 시도)
|
|
activate System
|
|
System -> System : 충돌 감지
|
|
System --> System : **이벤트**: 충돌이 감지됨\n(데이터: 충돌 ID, 충돌 위치, 관련 수정자)
|
|
deactivate System
|
|
|
|
note right of System
|
|
**Policy/Rule**:
|
|
동시 수정 발생 시 →
|
|
최종 수정이 우선 (Last Write Wins)
|
|
또는 충돌 알림
|
|
end note
|
|
|
|
== 충돌 해결 ==
|
|
|
|
System -> WebSocket : 충돌 알림 전송
|
|
WebSocket -> UserB : 충돌 알림 표시
|
|
|
|
UserB -> System : **커맨드**: 충돌 해결하기\n(데이터: 충돌 내용, 해결 방법)
|
|
activate System
|
|
System -> System : 충돌 해결 처리
|
|
System --> UserB : **이벤트**: 충돌이 해결됨\n(데이터: 해결 방법, 최종 내용)
|
|
deactivate System
|
|
|
|
System -> WebSocket : 해결된 내용 동기화
|
|
WebSocket -> UserA : 최종 내용 전송
|
|
|
|
== 검증 완료 ==
|
|
|
|
UserA -> System : **커맨드**: 검증 완료 표시하기\n(데이터: 검증자, 검증 시간)
|
|
activate System
|
|
System -> System : 검증 상태 업데이트
|
|
System --> UserA : **이벤트**: 검증이 완료됨\n(데이터: 검증자, 검증 상태, 완료 시간)
|
|
deactivate System
|
|
|
|
note right of System
|
|
**Policy/Rule**:
|
|
주요 섹션 검증 완료 시 →
|
|
해당 섹션 잠금 가능
|
|
end note
|
|
|
|
System -> WebSocket : 검증 완료 알림
|
|
WebSocket -> UserB : 검증 상태 동기화
|
|
|
|
note over UserA, Version
|
|
**Actor**: 회의 참석자들, 회의록 작성자
|
|
**External System**: 웹소켓 서버 (실시간 동기화), 버전 관리 시스템
|
|
**커맨드 데이터**: 수정 내용, 수정자, 충돌 해결 방법
|
|
**이벤트 데이터**: 수정 이력, 동기화 상태, 검증 완료
|
|
end note
|
|
|
|
@enduml
|