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:
djeon 2025-10-15 17:06:11 +09:00
parent 103711b00a
commit 7ad1e5aa21
10 changed files with 804 additions and 0 deletions

82
claude/plantuml-guide.md Normal file
View 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. 다이어그램 타입별로 유효한 화살표가 다름

View 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

View 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

View 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

View 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

View 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
View 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

View 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
View 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
View 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."