From 7ad1e5aa218ab542ee205c7da0442ef280f45b2d Mon Sep 17 00:00:00 2001 From: djeon Date: Wed, 15 Oct 2025 17:06:11 +0900 Subject: [PATCH] =?UTF-8?q?PlantUML=20=EA=B0=80=EC=9D=B4=EB=93=9C=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B2=80=EC=82=AC=20=EB=8F=84=EA=B5=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- claude/plantuml-guide.md | 82 +++++++++++++++++++++ think/es/01-회의준비.puml | 69 +++++++++++++++++ think/es/02-실시간작성.puml | 73 ++++++++++++++++++ think/es/03-용어지원.puml | 89 ++++++++++++++++++++++ think/es/04-협업검증.puml | 95 ++++++++++++++++++++++++ think/es/05-회의종료.puml | 92 +++++++++++++++++++++++ think/es/06-Todo관리.puml | 118 ++++++++++++++++++++++++++++++ think/es/claude/plantuml-guide.md | 82 +++++++++++++++++++++ think/es/userflow.puml | 54 ++++++++++++++ tools/check-plantuml.sh | 50 +++++++++++++ 10 files changed, 804 insertions(+) create mode 100644 claude/plantuml-guide.md create mode 100644 think/es/01-회의준비.puml create mode 100644 think/es/02-실시간작성.puml create mode 100644 think/es/03-용어지원.puml create mode 100644 think/es/04-협업검증.puml create mode 100644 think/es/05-회의종료.puml create mode 100644 think/es/06-Todo관리.puml create mode 100644 think/es/claude/plantuml-guide.md create mode 100644 think/es/userflow.puml create mode 100755 tools/check-plantuml.sh diff --git a/claude/plantuml-guide.md b/claude/plantuml-guide.md new file mode 100644 index 0000000..5dd396c --- /dev/null +++ b/claude/plantuml-guide.md @@ -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. 다이어그램 타입별로 유효한 화살표가 다름 \ No newline at end of file diff --git a/think/es/01-회의준비.puml b/think/es/01-회의준비.puml new file mode 100644 index 0000000..1914587 --- /dev/null +++ b/think/es/01-회의준비.puml @@ -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 diff --git a/think/es/02-실시간작성.puml b/think/es/02-실시간작성.puml new file mode 100644 index 0000000..dde2124 --- /dev/null +++ b/think/es/02-실시간작성.puml @@ -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 diff --git a/think/es/03-용어지원.puml b/think/es/03-용어지원.puml new file mode 100644 index 0000000..7316b17 --- /dev/null +++ b/think/es/03-용어지원.puml @@ -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 diff --git a/think/es/04-협업검증.puml b/think/es/04-협업검증.puml new file mode 100644 index 0000000..3ff3598 --- /dev/null +++ b/think/es/04-협업검증.puml @@ -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 diff --git a/think/es/05-회의종료.puml b/think/es/05-회의종료.puml new file mode 100644 index 0000000..775a576 --- /dev/null +++ b/think/es/05-회의종료.puml @@ -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 diff --git a/think/es/06-Todo관리.puml b/think/es/06-Todo관리.puml new file mode 100644 index 0000000..3c7bf8a --- /dev/null +++ b/think/es/06-Todo관리.puml @@ -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 diff --git a/think/es/claude/plantuml-guide.md b/think/es/claude/plantuml-guide.md new file mode 100644 index 0000000..5dd396c --- /dev/null +++ b/think/es/claude/plantuml-guide.md @@ -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. 다이어그램 타입별로 유효한 화살표가 다름 \ No newline at end of file diff --git a/think/es/userflow.puml b/think/es/userflow.puml new file mode 100644 index 0000000..5e7be10 --- /dev/null +++ b/think/es/userflow.puml @@ -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 diff --git a/tools/check-plantuml.sh b/tools/check-plantuml.sh new file mode 100755 index 0000000..9ca522f --- /dev/null +++ b/tools/check-plantuml.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# PlantUML file syntax checker script +# Usage: ./check_plantuml.sh + +# Check parameters +if [ $# -eq 0 ]; then + echo "Usage: $0 " + 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."