mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 07:56:24 +00:00
PlantUML 가이드 및 검사 도구 추가
- claude/plantuml-guide.md: PlantUML 문법 검사 가이드 추가 - think/es/: 신규 디렉토리 추가 - tools/check-plantuml.sh: PlantUML 문법 검사 스크립트 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
103711b00a
commit
7ad1e5aa21
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. 다이어그램 타입별로 유효한 화살표가 다름
|
||||||
69
think/es/01-회의준비.puml
Normal file
69
think/es/01-회의준비.puml
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
@startuml 01-회의준비
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 01. 회의 준비 및 시작 - 이벤트스토밍 플로우
|
||||||
|
|
||||||
|
actor "회의록 작성자" as User
|
||||||
|
participant "회의록 시스템" as System
|
||||||
|
participant "캘린더 시스템" as Calendar
|
||||||
|
participant "알림 시스템" as Notification
|
||||||
|
|
||||||
|
== 회의 예약 ==
|
||||||
|
|
||||||
|
User -> System : **커맨드**: 회의 예약하기\n(데이터: 회의 제목, 날짜/시간, 장소, 참석자 목록)
|
||||||
|
activate System
|
||||||
|
System -> System : 회의 정보 검증
|
||||||
|
System --> User : **이벤트**: 회의가 예약됨\n(데이터: 회의 ID, 회의 정보)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
회의 예약 시 →
|
||||||
|
자동으로 참석자에게
|
||||||
|
초대 이메일 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Calendar : 일정 동기화 요청\n(데이터: 회의 정보, 캘린더 ID)
|
||||||
|
Calendar --> System : **이벤트**: 일정이 캘린더에 등록됨
|
||||||
|
|
||||||
|
System -> Notification : 초대 알림 발송 요청\n(데이터: 참석자 목록, 회의 정보)
|
||||||
|
Notification --> System : **이벤트**: 참석자가 초대됨\n(데이터: 참석자 목록, 초대 상태)
|
||||||
|
Notification -> User : 초대 이메일 발송
|
||||||
|
Notification -> User : **이벤트**: 알림이 발송됨\n(데이터: 알림 ID, 발송 대상)
|
||||||
|
|
||||||
|
== 회의록 도구 준비 ==
|
||||||
|
|
||||||
|
User -> System : **커맨드**: 회의록 템플릿 선택하기\n(데이터: 템플릿 ID, 커스터마이징 옵션)
|
||||||
|
activate System
|
||||||
|
System -> System : 템플릿 로드 및 설정
|
||||||
|
System --> User : **이벤트**: 회의록 도구가 준비됨\n(데이터: 회의록 ID, 템플릿 정보)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
== 회의 시작 전 리마인더 ==
|
||||||
|
|
||||||
|
note over System, Notification
|
||||||
|
**Policy/Rule**:
|
||||||
|
회의 시작 30분 전 →
|
||||||
|
참석자에게 리마인더 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Notification : 리마인더 발송 (30분 전)
|
||||||
|
Notification -> User : 회의 시작 알림
|
||||||
|
|
||||||
|
== 회의 시작 ==
|
||||||
|
|
||||||
|
User -> System : **커맨드**: 회의 시작하기\n(데이터: 회의 ID, 시작 시간)
|
||||||
|
activate System
|
||||||
|
System -> System : 회의 세션 생성
|
||||||
|
System -> System : 음성 녹음 준비
|
||||||
|
System --> User : **이벤트**: 회의가 시작됨\n(데이터: 회의 ID, 시작 시간, 참석자 수)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note over User, Notification
|
||||||
|
**Actor**: 회의록 작성자
|
||||||
|
**External System**: 캘린더 시스템, 알림 시스템
|
||||||
|
**커맨드 데이터**: 회의 정보, 템플릿 설정
|
||||||
|
**이벤트 데이터**: 회의 ID, 상태, 참석자 정보
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
73
think/es/02-실시간작성.puml
Normal file
73
think/es/02-실시간작성.puml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
@startuml 02-실시간작성
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 02. 실시간 회의록 작성 - 이벤트스토밍 플로우
|
||||||
|
|
||||||
|
actor "회의 참석자" as Participant
|
||||||
|
participant "회의록 시스템" as System
|
||||||
|
participant "AI 음성인식 엔진" as STT
|
||||||
|
participant "LLM" as LLM
|
||||||
|
|
||||||
|
== 음성 녹음 시작 ==
|
||||||
|
|
||||||
|
Participant -> System : 발언 시작
|
||||||
|
System -> System : **커맨드**: 음성 녹음 시작하기\n(데이터: 오디오 스트림, 회의 ID)
|
||||||
|
activate System
|
||||||
|
System --> Participant : **이벤트**: 음성 녹음이 시작됨\n(데이터: 녹음 ID, 시작 시간)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
== 발언 인식 및 텍스트 변환 ==
|
||||||
|
|
||||||
|
System -> STT : **커맨드**: 발언 인식 요청하기\n(데이터: 음성 데이터, 화자 정보, 타임스탬프)
|
||||||
|
activate STT
|
||||||
|
STT -> STT : 음성 분석
|
||||||
|
STT --> System : **이벤트**: 발언이 인식됨\n(데이터: 발언 ID, 화자, 발언 내용, 타임스탬프)
|
||||||
|
deactivate STT
|
||||||
|
|
||||||
|
note right of STT
|
||||||
|
**Policy/Rule**:
|
||||||
|
발언이 인식되면 →
|
||||||
|
AI가 실시간으로
|
||||||
|
텍스트 변환
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> STT : **커맨드**: 텍스트 변환 요청하기\n(데이터: 인식된 발언, 언어 설정)
|
||||||
|
activate STT
|
||||||
|
STT -> STT : 음성-텍스트 변환
|
||||||
|
STT --> System : **이벤트**: 텍스트가 변환됨\n(데이터: 텍스트 ID, 변환된 내용, 정확도)
|
||||||
|
deactivate STT
|
||||||
|
|
||||||
|
== AI 회의록 자동 작성 ==
|
||||||
|
|
||||||
|
note right of LLM
|
||||||
|
**Policy/Rule**:
|
||||||
|
텍스트가 변환되면 →
|
||||||
|
자동으로 회의록 구조에
|
||||||
|
맞춰 정리
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> LLM : **커맨드**: 회의록 자동 작성하기\n(데이터: 텍스트, 회의 맥락, 구조)
|
||||||
|
activate LLM
|
||||||
|
LLM -> LLM : 회의 내용 이해
|
||||||
|
LLM -> LLM : 문장 다듬기
|
||||||
|
LLM -> LLM : 구조화 (주제, 발언자, 내용)
|
||||||
|
LLM --> System : **이벤트**: 회의록 초안이 생성됨\n(데이터: 회의록 버전, 생성 시간, 구조화된 내용)
|
||||||
|
deactivate LLM
|
||||||
|
|
||||||
|
== 참석자 실시간 확인 ==
|
||||||
|
|
||||||
|
System --> Participant : **이벤트**: 회의록이 업데이트됨\n(실시간 동기화)
|
||||||
|
|
||||||
|
Participant -> System : **커맨드**: 회의록 확인하기\n(데이터: 회의록 ID, 뷰어 ID)
|
||||||
|
activate System
|
||||||
|
System --> Participant : **이벤트**: 참석자가 회의록을 확인함\n(데이터: 뷰어 ID, 확인 시간)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note over Participant, LLM
|
||||||
|
**Actor**: 회의 참석자, AI 시스템
|
||||||
|
**External System**: AI 음성인식 엔진 (Whisper, Google STT), LLM
|
||||||
|
**커맨드 데이터**: 음성 데이터, 화자 정보, 회의 맥락
|
||||||
|
**이벤트 데이터**: 발언 내용, 텍스트, 회의록 버전
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
89
think/es/03-용어지원.puml
Normal file
89
think/es/03-용어지원.puml
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
@startuml 03-용어지원
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 03. 전문용어 이해 지원 - 이벤트스토밍 플로우
|
||||||
|
|
||||||
|
actor "회의록 작성자" as User
|
||||||
|
participant "회의록 시스템" as System
|
||||||
|
participant "RAG 시스템" as RAG
|
||||||
|
participant "LLM" as LLM
|
||||||
|
participant "문서 저장소" as DocStore
|
||||||
|
|
||||||
|
== 전문용어 자동 감지 ==
|
||||||
|
|
||||||
|
System -> System : **커맨드**: 전문용어 감지하기\n(데이터: 회의록 텍스트, 용어 사전)
|
||||||
|
activate System
|
||||||
|
System -> System : 회의록 텍스트 분석
|
||||||
|
System --> System : **이벤트**: 전문용어가 감지됨\n(데이터: 용어, 감지 위치, 신뢰도)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
전문용어 감지 시 →
|
||||||
|
RAG 시스템이 과거 회의록 및
|
||||||
|
사내 문서에서 자동 검색
|
||||||
|
end note
|
||||||
|
|
||||||
|
== RAG 검색 수행 ==
|
||||||
|
|
||||||
|
System -> RAG : **커맨드**: 용어 설명 요청하기\n(데이터: 용어, 회의 맥락, 조직 정보)
|
||||||
|
activate RAG
|
||||||
|
RAG --> System : **이벤트**: RAG 검색이 시작됨\n(데이터: 검색 ID, 쿼리)
|
||||||
|
|
||||||
|
RAG -> DocStore : **커맨드**: RAG 검색 수행하기\n(데이터: 검색 쿼리, 문서 데이터베이스)
|
||||||
|
activate DocStore
|
||||||
|
DocStore -> DocStore : 벡터 유사도 검색
|
||||||
|
DocStore --> RAG : **이벤트**: 관련 문서가 검색됨\n(데이터: 문서 목록, 관련도 점수)
|
||||||
|
deactivate DocStore
|
||||||
|
|
||||||
|
== LLM 설명 생성 ==
|
||||||
|
|
||||||
|
RAG -> LLM : 검색된 문서 전달
|
||||||
|
activate LLM
|
||||||
|
LLM -> LLM : 문서 내용 분석
|
||||||
|
LLM -> LLM : 용어 설명 생성
|
||||||
|
LLM --> RAG : **이벤트**: 용어 설명이 생성됨\n(데이터: 설명 ID, 설명 내용, 참조 출처)
|
||||||
|
deactivate LLM
|
||||||
|
|
||||||
|
RAG --> System : 설명 반환
|
||||||
|
deactivate RAG
|
||||||
|
|
||||||
|
== 사용자에게 설명 제공 ==
|
||||||
|
|
||||||
|
System -> User : **커맨드**: 설명 제공하기\n(데이터: 용어, 설명 내용, 참조 문서)
|
||||||
|
activate System
|
||||||
|
System --> User : **이벤트**: 설명이 제공됨\n(데이터: 제공 시간, 수신자)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
User -> User : 용어 이해 완료
|
||||||
|
|
||||||
|
== 설명을 찾지 못한 경우 ==
|
||||||
|
|
||||||
|
alt 설명을 찾지 못함
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
설명을 찾지 못하면 →
|
||||||
|
전문가(회의 참석자)에게
|
||||||
|
설명 요청
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> User : 전문가에게 설명 요청 알림
|
||||||
|
User -> System : 수동으로 설명 입력
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
새로운 용어 설명이 추가되면 →
|
||||||
|
용어 사전에 자동 저장
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> DocStore : 용어 사전 업데이트
|
||||||
|
end
|
||||||
|
|
||||||
|
note over User, DocStore
|
||||||
|
**Actor**: 회의록 작성자, AI 시스템
|
||||||
|
**External System**: RAG 시스템 (벡터 DB, 임베딩), LLM, 문서 저장소
|
||||||
|
**커맨드 데이터**: 용어, 회의 맥락, 검색 쿼리
|
||||||
|
**이벤트 데이터**: 감지된 용어, 설명 내용, 참조 출처
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
95
think/es/04-협업검증.puml
Normal file
95
think/es/04-협업검증.puml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
@startuml 04-협업검증
|
||||||
|
!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
|
||||||
92
think/es/05-회의종료.puml
Normal file
92
think/es/05-회의종료.puml
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
@startuml 05-회의종료
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 05. 회의 종료 및 완료 - 이벤트스토밍 플로우
|
||||||
|
|
||||||
|
actor "회의록 작성자" as User
|
||||||
|
participant "회의록 시스템" as System
|
||||||
|
participant "LLM" as LLM
|
||||||
|
participant "캘린더 시스템" as Calendar
|
||||||
|
participant "알림 시스템" as Notification
|
||||||
|
|
||||||
|
== 회의 종료 ==
|
||||||
|
|
||||||
|
User -> System : **커맨드**: 회의 종료하기\n(데이터: 회의 ID, 종료 시간)
|
||||||
|
activate System
|
||||||
|
System -> System : 음성 녹음 중지
|
||||||
|
System -> System : 회의 통계 생성
|
||||||
|
System --> User : **이벤트**: 회의가 종료됨\n(데이터: 종료 시간, 회의 총 시간, 참석자 수)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
== 최종 회의록 확정 ==
|
||||||
|
|
||||||
|
User -> System : **커맨드**: 최종 회의록 확정하기\n(데이터: 회의록 버전, 확정자)
|
||||||
|
activate System
|
||||||
|
System -> System : 필수 항목 누락 검사
|
||||||
|
System -> System : 최종 버전 생성
|
||||||
|
System --> User : **이벤트**: 최종 회의록이 확정됨\n(데이터: 회의록 ID, 확정 버전, 확정 시간)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
회의 종료 시 →
|
||||||
|
AI가 자동으로 Todo 항목 추출
|
||||||
|
end note
|
||||||
|
|
||||||
|
== Todo 자동 추출 ==
|
||||||
|
|
||||||
|
System -> LLM : **커맨드**: Todo 자동 추출하기\n(데이터: 회의록 내용, 추출 규칙)
|
||||||
|
activate LLM
|
||||||
|
LLM -> LLM : 회의록 내용 분석
|
||||||
|
LLM -> LLM : 액션 아이템 식별
|
||||||
|
LLM -> LLM : 담당자 자동 식별
|
||||||
|
LLM --> System : **이벤트**: Todo가 자동 추출됨\n(데이터: Todo 목록, 추출된 항목 수, 담당자 정보)
|
||||||
|
deactivate LLM
|
||||||
|
|
||||||
|
note right of LLM
|
||||||
|
**Policy/Rule**:
|
||||||
|
Todo 추출 시 →
|
||||||
|
담당자 자동 식별 (발언 내용 기반)
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 다음 회의 일정 연동 ==
|
||||||
|
|
||||||
|
alt 다음 회의 일정이 언급됨
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
다음 회의 일정이 언급되면 →
|
||||||
|
자동으로 캘린더에 등록
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Calendar : **커맨드**: 일정 연동하기\n(데이터: 일정 정보, 캘린더 ID)
|
||||||
|
activate Calendar
|
||||||
|
Calendar -> Calendar : 일정 생성
|
||||||
|
Calendar --> System : **이벤트**: 일정이 캘린더에 연동됨\n(데이터: 일정 ID, 연동 상태)
|
||||||
|
deactivate Calendar
|
||||||
|
end
|
||||||
|
|
||||||
|
== 회의록 공유 ==
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
회의록 확정 시 →
|
||||||
|
참석자 전원에게 자동 공유
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Notification : **커맨드**: 회의록 공유하기\n(데이터: 공유 대상, 공유 권한, 공유 방식)
|
||||||
|
activate Notification
|
||||||
|
Notification -> Notification : 공유 링크 생성
|
||||||
|
Notification --> System : **이벤트**: 회의록이 공유됨\n(데이터: 공유 ID, 공유 대상, 공유 시간)
|
||||||
|
|
||||||
|
Notification -> User : 회의록 공유 알림
|
||||||
|
Notification --> System : **이벤트**: 알림이 발송됨\n(데이터: 알림 대상, 알림 내용)
|
||||||
|
deactivate Notification
|
||||||
|
|
||||||
|
note over User, Notification
|
||||||
|
**Actor**: 회의록 작성자, AI 시스템
|
||||||
|
**External System**: LLM (Todo 추출), 캘린더 시스템, 알림 시스템
|
||||||
|
**커맨드 데이터**: 회의 종료 정보, 회의록 버전, 일정 정보
|
||||||
|
**이벤트 데이터**: 확정 회의록, Todo 목록, 공유 상태
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
118
think/es/06-Todo관리.puml
Normal file
118
think/es/06-Todo관리.puml
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
@startuml 06-Todo관리
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 06. Todo 관리 및 추적 - 이벤트스토밍 플로우
|
||||||
|
|
||||||
|
actor "Todo 담당자" as Assignee
|
||||||
|
actor "회의 주최자" as Organizer
|
||||||
|
participant "Todo 시스템" as System
|
||||||
|
participant "알림 시스템" as Notification
|
||||||
|
participant "캘린더 시스템" as Calendar
|
||||||
|
participant "회의록 시스템" as MeetingNote
|
||||||
|
|
||||||
|
== Todo 할당 ==
|
||||||
|
|
||||||
|
System -> System : **커맨드**: Todo 할당하기\n(데이터: Todo ID, 담당자, 마감일, 우선순위)
|
||||||
|
activate System
|
||||||
|
System -> System : Todo 등록
|
||||||
|
System --> System : **이벤트**: Todo가 할당됨\n(데이터: Todo ID, 담당자, 마감일, 할당 시간)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
Todo 할당 시 →
|
||||||
|
담당자에게 즉시 알림 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Notification : **커맨드**: 담당자에게 알림 보내기\n(데이터: Todo 정보, 알림 채널)
|
||||||
|
activate Notification
|
||||||
|
Notification -> Assignee : 이메일/슬랙 알림
|
||||||
|
Notification --> System : **이벤트**: 담당자에게 알림이 발송됨\n(데이터: 알림 ID, 발송 시간, 발송 채널)
|
||||||
|
deactivate Notification
|
||||||
|
|
||||||
|
System -> Calendar : 마감일 캘린더 등록
|
||||||
|
Calendar --> System : 캘린더 등록 완료
|
||||||
|
|
||||||
|
== Todo 진행 상황 업데이트 ==
|
||||||
|
|
||||||
|
Assignee -> System : **커맨드**: Todo 진행 상황 업데이트하기\n(데이터: Todo ID, 진행률, 상태)
|
||||||
|
activate System
|
||||||
|
System -> System : 진행 상황 저장
|
||||||
|
System --> Assignee : **이벤트**: Todo 진행 상황이 업데이트됨\n(데이터: 업데이트 시간, 진행률, 상태: 시작 전/진행 중/완료)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
System -> Notification : 주최자에게 진행 상황 알림
|
||||||
|
Notification -> Organizer : 진행 상황 공유
|
||||||
|
|
||||||
|
== 마감일 리마인더 ==
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
마감일 3일 전 →
|
||||||
|
자동 리마인더 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> System : 마감일 모니터링
|
||||||
|
System --> System : **이벤트**: 마감일이 임박함\n(데이터: Todo ID, 남은 시간)
|
||||||
|
|
||||||
|
System -> Notification : **커맨드**: 리마인더 발송하기\n(데이터: Todo ID, 리마인더 시간)
|
||||||
|
activate Notification
|
||||||
|
Notification -> Assignee : 마감일 3일 전 알림
|
||||||
|
Notification --> System : **이벤트**: 리마인더가 발송됨\n(데이터: 리마인더 ID, 발송 시간)
|
||||||
|
deactivate Notification
|
||||||
|
|
||||||
|
== 마감일 당일 미완료 ==
|
||||||
|
|
||||||
|
alt 마감일 당일 미완료
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
마감일 당일 미완료 시 →
|
||||||
|
긴급 알림 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Notification : 긴급 알림
|
||||||
|
Notification -> Assignee : 마감일 경고
|
||||||
|
Notification -> Organizer : 지연 알림
|
||||||
|
end
|
||||||
|
|
||||||
|
== Todo 완료 ==
|
||||||
|
|
||||||
|
Assignee -> System : **커맨드**: Todo 완료 처리하기\n(데이터: Todo ID, 완료 시간, 완료자)
|
||||||
|
activate System
|
||||||
|
System -> System : 완료 상태 업데이트
|
||||||
|
System --> Assignee : **이벤트**: Todo가 완료됨\n(데이터: 완료 시간, 완료자)
|
||||||
|
deactivate System
|
||||||
|
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
Todo 완료 시 →
|
||||||
|
회의록에 완료 상태 자동 반영
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> MeetingNote : 회의록 업데이트
|
||||||
|
MeetingNote --> System : **이벤트**: 회의록에 완료 상태가 반영됨\n(데이터: 반영 시간, 회의록 버전)
|
||||||
|
|
||||||
|
System -> Notification : 완료 알림 발송
|
||||||
|
Notification -> Organizer : Todo 완료 알림
|
||||||
|
|
||||||
|
== 모든 Todo 완료 ==
|
||||||
|
|
||||||
|
alt 모든 Todo 완료
|
||||||
|
note right of System
|
||||||
|
**Policy/Rule**:
|
||||||
|
모든 Todo 완료 시 →
|
||||||
|
회의 주최자에게 완료 알림
|
||||||
|
end note
|
||||||
|
|
||||||
|
System -> Notification : 전체 완료 알림
|
||||||
|
Notification -> Organizer : 회의 액션 아이템 완료
|
||||||
|
end
|
||||||
|
|
||||||
|
note over Assignee, MeetingNote
|
||||||
|
**Actor**: Todo 담당자, 회의 주최자, AI 시스템
|
||||||
|
**External System**: 알림 시스템, 캘린더 시스템, 회의록 시스템
|
||||||
|
**커맨드 데이터**: Todo 정보, 담당자, 마감일, 진행 상황
|
||||||
|
**이벤트 데이터**: Todo 상태, 완료 여부, 리마인더 발송
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
82
think/es/claude/plantuml-guide.md
Normal file
82
think/es/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. 다이어그램 타입별로 유효한 화살표가 다름
|
||||||
54
think/es/userflow.puml
Normal file
54
think/es/userflow.puml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
@startuml userflow
|
||||||
|
!theme mono
|
||||||
|
|
||||||
|
title 회의록 작성 및 공유 개선 서비스 - 유저플로우 연결도
|
||||||
|
|
||||||
|
actor "회의록 작성자" as User
|
||||||
|
actor "회의 참석자" as Participant
|
||||||
|
participant "01. 회의 준비 및 시작\n(01-회의준비)" as Flow01
|
||||||
|
participant "02. 실시간 회의록 작성\n(02-실시간작성)" as Flow02
|
||||||
|
participant "03. 전문용어 이해 지원\n(03-용어지원)" as Flow03
|
||||||
|
participant "04. 실시간 협업 검증\n(04-협업검증)" as Flow04
|
||||||
|
participant "05. 회의 종료 및 완료\n(05-회의종료)" as Flow05
|
||||||
|
participant "06. Todo 관리 및 추적\n(06-Todo관리)" as Flow06
|
||||||
|
|
||||||
|
== 회의 전 단계 ==
|
||||||
|
|
||||||
|
User -> Flow01 : 1. 회의 예약 및 준비
|
||||||
|
Flow01 --> Participant : 2. 참석자 초대 알림
|
||||||
|
|
||||||
|
== 회의 진행 단계 ==
|
||||||
|
|
||||||
|
User -> Flow02 : 3. 회의 시작 및 실시간 작성
|
||||||
|
Flow02 --> Flow03 : 4. 전문용어 감지 시\n자동 지원 실행
|
||||||
|
Flow02 --> Flow04 : 5. 회의록 생성 후\n실시간 협업 검증
|
||||||
|
Participant -> Flow04 : 6. 참석자들이 회의록 확인/수정
|
||||||
|
|
||||||
|
== 병렬 실행 영역 ==
|
||||||
|
|
||||||
|
note over Flow02, Flow04
|
||||||
|
회의 진행 중 다음이 동시에 실행됨:
|
||||||
|
- 실시간 회의록 작성 (02)
|
||||||
|
- 전문용어 이해 지원 (03)
|
||||||
|
- 실시간 협업 검증 (04)
|
||||||
|
end note
|
||||||
|
|
||||||
|
== 회의 후 단계 ==
|
||||||
|
|
||||||
|
Flow04 -> Flow05 : 7. 검증 완료 후 회의 종료
|
||||||
|
Flow05 --> Flow06 : 8. Todo 자동 추출 및 할당
|
||||||
|
Flow06 --> User : 9. Todo 담당자 알림
|
||||||
|
Flow06 --> Participant : 10. Todo 진행 상황 공유
|
||||||
|
|
||||||
|
== 순환 구조 ==
|
||||||
|
|
||||||
|
Flow06 --> Flow01 : 11. 다음 회의 일정 생성\n(순환 시작)
|
||||||
|
|
||||||
|
note over Flow01, Flow06
|
||||||
|
사용자는 회의 준비→실시간 작성→용어 지원→협업 검증→
|
||||||
|
회의 종료→Todo 관리의 순환 구조로 서비스를 이용합니다.
|
||||||
|
각 플로우는 명확한 이벤트와 커맨드로 구성되며,
|
||||||
|
AI와 실시간 협업을 통해 정확한 회의록을 자동으로 생성합니다.
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
50
tools/check-plantuml.sh
Executable file
50
tools/check-plantuml.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# PlantUML file syntax checker script
|
||||||
|
# Usage: ./check_plantuml.sh <file_to_check>
|
||||||
|
|
||||||
|
# Check parameters
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "Usage: $0 <file_to_check>"
|
||||||
|
echo "Example: $0 diagram.puml"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# File to check parameter
|
||||||
|
CHECK_FILE="$1"
|
||||||
|
|
||||||
|
# Check if file exists
|
||||||
|
if [ ! -f "$CHECK_FILE" ]; then
|
||||||
|
echo "Error: File '$CHECK_FILE' does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1. Generate unique filename (prevent conflicts)
|
||||||
|
TEMP_FILE="/tmp/puml_$(date +%s)_$$.puml"
|
||||||
|
|
||||||
|
# 2. Copy file
|
||||||
|
echo "Copying file to Docker container..."
|
||||||
|
docker cp "$CHECK_FILE" plantuml:"$TEMP_FILE"
|
||||||
|
|
||||||
|
# 3. Find JAR file location
|
||||||
|
echo "Finding PlantUML JAR file location..."
|
||||||
|
JAR_PATH=$(docker exec plantuml find / -name "plantuml*.jar" 2>/dev/null | head -1)
|
||||||
|
|
||||||
|
if [ -z "$JAR_PATH" ]; then
|
||||||
|
echo "Error: PlantUML JAR file not found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. Syntax check
|
||||||
|
echo "Running PlantUML syntax check..."
|
||||||
|
docker exec plantuml java -jar "$JAR_PATH" -checkonly "$TEMP_FILE"
|
||||||
|
|
||||||
|
# 5. Detailed error check (if needed)
|
||||||
|
echo "Checking detailed error information..."
|
||||||
|
docker exec plantuml sh -c "cd /tmp && java -jar $JAR_PATH -failfast -v $TEMP_FILE 2>&1 | grep -E 'Error line'"
|
||||||
|
|
||||||
|
# 6. Clean up temporary file
|
||||||
|
echo "Cleaning up temporary files..."
|
||||||
|
docker exec -u root plantuml rm -f "$TEMP_FILE"
|
||||||
|
|
||||||
|
echo "Check completed."
|
||||||
Loading…
x
Reference in New Issue
Block a user