mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 10:16:24 +00:00
클라우드 아키텍처 패턴 적용 방안 작성 완료
- 요구사항 분석 (기능적/비기능적, 6개 기술적 도전과제) - 18개 클라우드 패턴 정량적 평가 및 선정 - MVP: 8개 패턴 (API Gateway, Queue, Cache, Pub-Sub 등) - Phase 2: 6개 패턴 추가 (CQRS, Circuit Breaker, Retry 등) - Phase 3: 4개 패턴 추가 (Event Sourcing, Saga, Priority Queue 등) - 서비스별 패턴 매핑 (8개 마이크로서비스) - 3개 Mermaid 아키텍처 다이어그램 - 전체 시스템 구조 - 실시간 협업 플로우 - AI/STT 비동기 처리 플로우 - Todo 실시간 연동 플로우 (Saga) - Phase별 구현 로드맵 (MVP 3개월, Phase 2 6개월, Phase 3 12개월) - 구현 시 고려사항 (API Gateway, Queue, Cache, WebSocket, AI/LLM 등) - 예상 성과 지표 - Phase 1: 100명, 월 $500, 사용자당 $5 - Phase 2: 1,000명, 월 $2,000, 사용자당 $2 (60% 절감) - Phase 3: 10,000명, 월 $10,000, 사용자당 $1 (80% 절감) - 가이드 문서 다운로드 - 아키텍처 패턴 선정 가이드 - 클라우드 디자인 패턴 요약표 - Mermaid 문법 검사 가이드 - Mermaid 검사 스크립트 (PowerShell) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b16a5638ef
commit
70e3ddeca1
@ -22,14 +22,7 @@
|
|||||||
"Bash(git add \"design/uiux_다람지/\")",
|
"Bash(git add \"design/uiux_다람지/\")",
|
||||||
"Bash(git commit -m \"$(cat <<''EOF''\n프로토타입 개발 완료 (다람지팀)\n\n- 스타일 가이드 작성 (style-guide.md)\n - 14개 섹션으로 구성된 완전한 디자인 시스템\n - Mobile First 철학 및 접근성 기준 정의\n \n- 공통 리소스 개발\n - common.css: 700+ 라인 반응형 스타일시트\n - common.js: 400+ 라인 유틸리티 라이브러리\n \n- 9개 프로토타입 화면 개발\n - 01-로그인: 사용자 인증\n - 02-대시보드: 메인 대시보드\n - 03-회의예약: 회의 생성 폼\n - 04-템플릿선택: 회의록 템플릿 선택\n - 05-회의진행: 실시간 회의 진행\n - 06-검증완료: 섹션별 검증\n - 07-회의종료: 회의 통계\n - 08-회의록공유: 공유 설정\n - 09-Todo관리: Todo 목록 및 진행 관리\n \n- 주요 특징\n - Mobile First 반응형 디자인\n - WCAG 2.1 Level AA 접근성 준수\n - 실제 동작하는 인터랙션 구현\n - 일관된 예제 데이터 활용\n - Playwright 브라우저 테스트 완료\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\")",
|
"Bash(git commit -m \"$(cat <<''EOF''\n프로토타입 개발 완료 (다람지팀)\n\n- 스타일 가이드 작성 (style-guide.md)\n - 14개 섹션으로 구성된 완전한 디자인 시스템\n - Mobile First 철학 및 접근성 기준 정의\n \n- 공통 리소스 개발\n - common.css: 700+ 라인 반응형 스타일시트\n - common.js: 400+ 라인 유틸리티 라이브러리\n \n- 9개 프로토타입 화면 개발\n - 01-로그인: 사용자 인증\n - 02-대시보드: 메인 대시보드\n - 03-회의예약: 회의 생성 폼\n - 04-템플릿선택: 회의록 템플릿 선택\n - 05-회의진행: 실시간 회의 진행\n - 06-검증완료: 섹션별 검증\n - 07-회의종료: 회의 통계\n - 08-회의록공유: 공유 설정\n - 09-Todo관리: Todo 목록 및 진행 관리\n \n- 주요 특징\n - Mobile First 반응형 디자인\n - WCAG 2.1 Level AA 접근성 준수\n - 실제 동작하는 인터랙션 구현\n - 일관된 예제 데이터 활용\n - Playwright 브라우저 테스트 완료\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\")",
|
||||||
"Bash(git commit -m \"UI/UX 프로토타입 디렉토리 정리\n\n- 기존 프로토타입 파일 삭제\n- 백업 디렉토리(uiux_bk) 추가\n- 프로젝트 구조 정리\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\")",
|
"Bash(git commit -m \"UI/UX 프로토타입 디렉토리 정리\n\n- 기존 프로토타입 파일 삭제\n- 백업 디렉토리(uiux_bk) 추가\n- 프로젝트 구조 정리\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\")",
|
||||||
"Bash(git add design-last/uiux/)",
|
"Bash(curl -s https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/architecture-patterns.md -o claude/architecture-patterns.md)"
|
||||||
"Bash(git commit -m \"$(cat <<''EOF''\nUI/UX 설계서 작성 완료\n\n- Mobile First 설계 원칙에 따라 UI/UX 설계서 작성\n- 11개 주요 화면 설계 (로그인, 대시보드, 회의예약, 템플릿선택, 회의진행, 검증완료, 회의종료, 회의록공유, Todo관리, 회의록상세조회, 회의록수정)\n- 화면별 상세 설계 (개요, 기능, UI 구성, 인터랙션, 데이터 요구사항, 에러 처리)\n- 화면 간 사용자 플로우 및 네비게이션 전략 정의\n- 반응형 설계 전략 (Mobile/Tablet/Desktop 브레이크포인트)\n- WCAG 2.1 Level AA 접근성 보장 방안\n- 성능 최적화 방안 (코드 스플리팅, 캐싱, WebSocket 최적화)\n- 유저스토리와 1:1 매칭 확인\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\")",
|
|
||||||
"Bash(git add \"design-last/uiux_다람지/\")",
|
|
||||||
"Bash(git commit -m \"$(cat <<''EOF''\n프로토타입 개발 완료 (다람지팀)\n\n- 스타일 가이드 작성 (style-guide.md)\n - 14개 섹션으로 구성된 완전한 디자인 시스템\n - Mobile First 철학 및 접근성 기준 정의\n \n- 공통 리소스 개발\n - common.css: 1,007줄 완전한 반응형 스타일시트\n - common.js: 400+줄 유틸리티 라이브러리\n \n- 11개 프로토타입 화면 개발\n - 01-로그인: 사용자 인증\n - 02-대시보드: 메인 대시보드\n - 03-회의예약: 회의 생성 폼\n - 04-템플릿선택: 회의록 템플릿 선택\n - 05-회의진행: 실시간 회의 진행\n - 06-검증완료: 섹션별 검증\n - 07-회의종료: 회의 통계\n - 08-회의록공유: 공유 설정\n - 09-Todo관리: Todo 목록 및 진행 관리\n - 10-회의록상세조회: 회의록 상세 보기\n - 11-회의록수정: 지난 회의록 수정\n \n- 주요 특징\n - Mobile First 반응형 디자인\n - WCAG 2.1 Level AA 접근성 준수\n - 실제 동작하는 인터랙션 구현\n - 일관된 예제 데이터 활용\n - 완전한 사용자 플로우 구현\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\")",
|
|
||||||
"Bash(git add \"design-last/uiux_다람지/prototype/01-로그인.html\")",
|
|
||||||
"Bash(git commit -m \"로그인 페이지 버그 수정\n\n- CSS keyframes를 script 태그에서 style 태그로 이동\n- FormValidator 검증을 간단한 검증으로 변경하여 안정성 향상\n- 로그인 후 대시보드 이동 기능 정상화\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\")",
|
|
||||||
"Bash(git commit -m \"프로젝트 구조 정리 및 프로토타입 업데이트\n\n- design-last, design-v1 디렉토리 정리\n- UI/UX 프로토타입 개선 및 통합\n- 스타일 가이드 및 테스트 결과 업데이트\n- 유저스토리 목록 추가\n- 불필요한 문서 제거\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\")",
|
|
||||||
"Bash(git commit -m \"UI/UX 프로토타입 통합 및 백업\n\n- design/uiux 디렉토리로 프로토타입 통합\n- 다람지팀 프로토타입을 design/uiux_bk로 백업\n- 9개 프로토타입 화면 업데이트 (01-09)\n- 회의록 상세조회, 수정 화면 추가 (10-11)\n- 스타일 가이드 및 공통 리소스 개선\n- 테스트 결과 문서 업데이트\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\")"
|
|
||||||
],
|
],
|
||||||
"deny": [],
|
"deny": [],
|
||||||
"ask": []
|
"ask": []
|
||||||
|
|||||||
169
claude/architecture-patterns.md
Normal file
169
claude/architecture-patterns.md
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
# 클라우드 아키텍처패턴선정 가이드
|
||||||
|
|
||||||
|
## 개요
|
||||||
|
이 가이드는 마이크로서비스 기반 클라우드 시스템을 위한 아키텍처 패턴 선정 방법론을 제공합니다. 체계적인 분석과 정량적 평가를 통해 최적의 패턴을 선정할 수 있습니다.
|
||||||
|
|
||||||
|
## 1. 요구사항 분석
|
||||||
|
|
||||||
|
### 1.1 유저스토리 분석
|
||||||
|
각 서비스별로 기능적/비기능적 요구사항을 명확히 도출합니다.
|
||||||
|
|
||||||
|
**기능적 요구사항**:
|
||||||
|
- 각 유저스토리에서 요구하는 핵심 기능
|
||||||
|
- 서비스 간 데이터 교환 요구사항
|
||||||
|
- 비즈니스 로직의 복잡도와 특성
|
||||||
|
|
||||||
|
**비기능적 요구사항**:
|
||||||
|
- 성능 요구사항 (응답시간, 처리량)
|
||||||
|
- 가용성 및 신뢰성 요구사항
|
||||||
|
- 확장성 및 유지보수성 요구사항
|
||||||
|
- 보안 및 컴플라이언스 요구사항
|
||||||
|
|
||||||
|
### 1.2 UI/UX설계 분석
|
||||||
|
Wireframe을 통해 사용자 인터랙션 패턴과 데이터 플로우를 파악합니다.
|
||||||
|
|
||||||
|
**분석 항목**:
|
||||||
|
- 사용자 인터랙션 패턴 (동기/비동기 처리 필요성)
|
||||||
|
- 데이터 조회/변경 패턴
|
||||||
|
- 화면 간 전환 흐름
|
||||||
|
- 실시간 업데이트 요구사항
|
||||||
|
|
||||||
|
### 1.3 통합 분석
|
||||||
|
유저스토리와 UI/UX 설계를 연계하여 **기술적 도전과제를 식별**합니다.
|
||||||
|
|
||||||
|
**도전과제 식별**:
|
||||||
|
- 복잡한 비즈니스 트랜잭션
|
||||||
|
- 대용량 데이터 처리
|
||||||
|
- 실시간 처리 요구사항
|
||||||
|
- 외부 시스템 연동 복잡성
|
||||||
|
- 서비스 간 의존성 관리
|
||||||
|
|
||||||
|
## 2. 패턴 선정
|
||||||
|
|
||||||
|
### 2.1 평가 기준
|
||||||
|
다음 5가지 기준으로 각 패턴을 정량적으로 평가합니다.
|
||||||
|
|
||||||
|
| 기준 | 가중치 | 평가 내용 |
|
||||||
|
|------|--------|-----------|
|
||||||
|
| **기능 적합성** | 35% | 요구사항을 직접 해결하는 능력 |
|
||||||
|
| **성능 효과** | 25% | 응답시간 및 처리량 개선 효과 |
|
||||||
|
| **운영 복잡도** | 20% | 구현 및 운영의 용이성 |
|
||||||
|
| **확장성** | 15% | 미래 요구사항에 대한 대응력 |
|
||||||
|
| **비용 효율성** | 5% | 개발/운영 비용 대비 효과(ROI) |
|
||||||
|
|
||||||
|
### 2.2 정량적 평가 방법
|
||||||
|
|
||||||
|
**평가 척도**: 1-10점 (10점이 가장 우수)
|
||||||
|
|
||||||
|
**패턴별 평가 매트릭스 예시**:
|
||||||
|
|
||||||
|
| 패턴 | 기능 적합성<br/>(35%) | 성능 효과<br/>(25%) | 운영 복잡도<br/>(20%) | 확장성<br/>(15%) | 비용 효율성<br/>(5%) | **총점** |
|
||||||
|
|------|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||||
|
| API Gateway | 8 × 0.35 = 2.8 | 7 × 0.25 = 1.75 | 8 × 0.20 = 1.6 | 9 × 0.15 = 1.35 | 7 × 0.05 = 0.35 | **7.85** |
|
||||||
|
| CQRS | 9 × 0.35 = 3.15 | 9 × 0.25 = 2.25 | 5 × 0.20 = 1.0 | 8 × 0.15 = 1.2 | 6 × 0.05 = 0.3 | **7.90** |
|
||||||
|
| Event Sourcing | 7 × 0.35 = 2.45 | 8 × 0.25 = 2.0 | 4 × 0.20 = 0.8 | 9 × 0.15 = 1.35 | 5 × 0.05 = 0.25 | **6.85** |
|
||||||
|
|
||||||
|
### 2.3 단계별 적용 로드맵
|
||||||
|
MVP → 확장 → 고도화 3단계로 구분하여 점진적 적용 계획을 수립합니다.
|
||||||
|
|
||||||
|
**Phase 1: MVP (Minimum Viable Product)**
|
||||||
|
- 핵심 비즈니스 기능 중심
|
||||||
|
- 단순하고 안정적인 패턴 우선
|
||||||
|
- 빠른 출시를 위한 최소 기능
|
||||||
|
|
||||||
|
**Phase 2: 확장 (Scale-up)**
|
||||||
|
- 사용자 증가에 따른 성능 최적화
|
||||||
|
- 고급 패턴 도입
|
||||||
|
- 모니터링 및 운영 자동화
|
||||||
|
|
||||||
|
**Phase 3: 고도화 (Advanced)**
|
||||||
|
- 복잡한 비즈니스 요구사항 대응
|
||||||
|
- 최신 기술 및 패턴 적용
|
||||||
|
- 글로벌 확장 대비
|
||||||
|
|
||||||
|
## 3. 문서 작성
|
||||||
|
|
||||||
|
### 3.1 구조화된 작성 순서
|
||||||
|
1. **요구사항 분석 결과**
|
||||||
|
2. **패턴 평가** (평가 매트릭스 포함)
|
||||||
|
3. **적용 설계** (Mermaid 다이어그램)
|
||||||
|
4. **구현 계획** (Phase별 로드맵)
|
||||||
|
|
||||||
|
### 3.2 Mermaid 다이어그램 작성
|
||||||
|
서비스 아키텍처와 패턴 적용을 시각적으로 표현합니다.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TB
|
||||||
|
Client[클라이언트] --> Gateway[API Gateway]
|
||||||
|
Gateway --> Auth[인증 서비스]
|
||||||
|
Gateway --> UserSvc[사용자 서비스]
|
||||||
|
Gateway --> OrderSvc[주문 서비스]
|
||||||
|
|
||||||
|
OrderSvc --> EventBus[이벤트 버스]
|
||||||
|
EventBus --> PaymentSvc[결제 서비스]
|
||||||
|
EventBus --> NotificationSvc[알림 서비스]
|
||||||
|
|
||||||
|
UserSvc --> UserDB[(사용자 DB)]
|
||||||
|
OrderSvc --> OrderDB[(주문 DB)]
|
||||||
|
PaymentSvc --> PaymentDB[(결제 DB)]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 실용적 내용 포함
|
||||||
|
- **코드 예시**: 패턴 구현을 위한 구체적인 코드 스니펫
|
||||||
|
- **구현 시 고려사항**: 실제 개발 시 주의할 점
|
||||||
|
- **예상 효과**: 정량적 성과 지표 (응답시간 개선, 처리량 증가 등)
|
||||||
|
|
||||||
|
## 참고 자료
|
||||||
|
- **유저스토리**
|
||||||
|
- UI/UX설계서
|
||||||
|
- **클라우드아키텍처패턴요약표**
|
||||||
|
|
||||||
|
## 결과 파일
|
||||||
|
선정된 아키텍처 패턴은 다음과 같이 문서화됩니다:
|
||||||
|
|
||||||
|
### 파일명
|
||||||
|
design/pattern/architecture-pattern.md
|
||||||
|
|
||||||
|
### 필수 포함 내용
|
||||||
|
1. **요구사항 분석 결과**
|
||||||
|
- 기능적/비기능적 요구사항 상세 분석
|
||||||
|
- 기술적 도전과제 식별
|
||||||
|
|
||||||
|
2. **패턴 선정 매트릭스 (평가표)**
|
||||||
|
- 후보 패턴별 정량적 평가 점수
|
||||||
|
- 선정 근거 및 이유
|
||||||
|
|
||||||
|
3. **서비스별 패턴 적용 설계 (Mermaid)**
|
||||||
|
- 전체 아키텍처 구조
|
||||||
|
- 패턴별 적용 영역 표시
|
||||||
|
|
||||||
|
4. **Phase별 구현 로드맵**
|
||||||
|
- 단계별 적용 계획
|
||||||
|
- 마일스톤 및 목표 설정
|
||||||
|
|
||||||
|
5. **예상 성과 지표**
|
||||||
|
- 성능 개선 예상치
|
||||||
|
- 비용 절감 효과
|
||||||
|
- 개발 생산성 향상
|
||||||
|
|
||||||
|
## 체크리스트
|
||||||
|
|
||||||
|
작성 완료 후 다음 항목들을 검토하세요:
|
||||||
|
|
||||||
|
- [ ] **각 유저스토리가 어떤 패턴으로 해결되는지 명시했는가?**
|
||||||
|
- [ ] **패턴 선정 이유를 정량적으로 설명했는가?**
|
||||||
|
- [ ] **패턴 간 상호작용과 통합 아키텍처를 표현했는가?**
|
||||||
|
- [ ] **구현 우선순위와 단계별 목표가 명확한가?**
|
||||||
|
- [ ] **실무자가 바로 활용할 수 있는 수준인가?**
|
||||||
|
|
||||||
|
## 작성 시 주의사항
|
||||||
|
|
||||||
|
1. **객관적 평가**: 주관적 판단보다는 정량적 데이터 기반 선정
|
||||||
|
2. **현실성**: 팀의 기술 수준과 프로젝트 일정을 고려한 실현 가능한 패턴 선정
|
||||||
|
3. **확장성**: 현재 요구사항뿐만 아니라 미래 확장성까지 고려
|
||||||
|
4. **비용 효율성**: 과도한 엔지니어링 지양, 비즈니스 가치 중심 선정
|
||||||
|
5. **문서화**: 선정 과정과 근거를 명확히 문서화하여 후속 의사결정 지원
|
||||||
|
|
||||||
|
## 완료 후 mermaid 스크립트 테스트 방법 안내
|
||||||
|
- https://mermaid.live/edit 에 접근
|
||||||
|
- 스크립트 내용을 붙여넣어 확인
|
||||||
104
claude/cloud-design-patterns.md
Normal file
104
claude/cloud-design-patterns.md
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
# 클라우드 디자인 패턴 개요
|
||||||
|
|
||||||
|
## 전체 분류 현황
|
||||||
|
|
||||||
|
총 **42개의 클라우드 디자인 패턴**
|
||||||
|
|
||||||
|
- **DB 성능개선**: 1개
|
||||||
|
- **읽기 최적화**: 4개
|
||||||
|
- **핵심업무 집중**: 6개
|
||||||
|
- **안정적 현대화**: 2개
|
||||||
|
- **효율적 분산처리**: 13개
|
||||||
|
- **안정성**: 6개
|
||||||
|
- **보안**: 3개
|
||||||
|
- **운영**: 7개
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 패턴 목록
|
||||||
|
|
||||||
|
### 1. DB 성능개선 (1개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 1 | Sharding | 데이터 양 줄이기 | 데이터 저장소를 수평적으로 분할(shard)하여 대규모 데이터 저장 및 접근 시 확장성을 높이는 패턴 |
|
||||||
|
|
||||||
|
### 2. 읽기 최적화 (4개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 2 | Index Table | NoSQL DB Query 최적화 | 데이터 저장소에서 자주 참조되는 필드에 대한 인덱스를 생성하여 쿼리 성능을 개선하는 패턴 |
|
||||||
|
| 3 | Cache-Aside | 성능 향상 및 데이터 일관성 유지 | 데이터 저장소에서 캐시에 데이터를 필요에 따라 로드하여 성능을 개선하고, 캐시와 데이터 저장소 간의 일관성을 유지하는 패턴 |
|
||||||
|
| 4 | Materialized View | 쿼리 성능 최적화 | 데이터를 미리 변환하여 준비된 뷰를 생성함으로써 쿼리 성능을 높이고 데이터 추출을 효율화하는 패턴 |
|
||||||
|
| 5 | CQRS | 읽기/쓰기 분리 | 데이터 저장소의 읽기와 쓰기 작업을 분리하여 성능, 확장성, 보안성을 높이는 패턴 |
|
||||||
|
|
||||||
|
### 3. 핵심업무 집중 (6개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 6 | Gateway Offloading | 횡단관심사 분리 | SSL 인증서 관리, 인증, 로깅 등의 공통 기능을 게이트웨이로 분리하여 애플리케이션의 복잡도를 낮추는 패턴 |
|
||||||
|
| 7 | Gateway Routing | 라우팅 중앙 처리 | 단일 엔드포인트를 통해 요청을 받아 백엔드 서비스나 인스턴스로 라우팅하는 패턴 |
|
||||||
|
| 8 | Gateway Aggregation | 클라이언트 요청 수 줄이기 | 단일 엔드포인트에서 클라이언트 요청을 받아 여러 백엔드 서비스로 분배하고 응답을 취합하는 패턴 |
|
||||||
|
| 9 | Backends for Frontends | 프론트엔드 유형별 전용처리 | 특정 프런트엔드에 특화된 백엔드 서비스를 별도로 구축하는 패턴 |
|
||||||
|
| 10 | Sidecar | 공통 기능 분리 | 애플리케이션의 일부 컴포넌트를 별도 프로세스나 컨테이너로 분리하여 격리와 확장성을 제공하는 패턴 |
|
||||||
|
| 11 | Ambassador | 네트워크 통신의 안정성과 보안 강화 | 클라이언트를 대신해 네트워크 요청을 처리하는 헬퍼 서비스를 생성하는 패턴 |
|
||||||
|
|
||||||
|
### 4. 안정적 현대화 (2개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 12 | Strangler Fig | 현대화의 위험 최소화와 점진적 전환 | 레거시 시스템을 점진적으로 새로운 애플리케이션 및 서비스로 교체하는 패턴 |
|
||||||
|
| 13 | Anti-Corruption Layer | 시스템 간 안정적 인터페이스 | 서로 다른 하위 시스템 간의 의미적 차이를 조정하기 위해 중간 계층을 구현하는 패턴 |
|
||||||
|
|
||||||
|
### 5. 효율적 분산처리 (13개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 14 | Pipes and Filters | 작업 단계 모듈화로 재사용성과 성능 향상 | 복잡한 작업을 독립적인 단계(필터)로 분리하고 메시지(파이프)로 연결하여 모듈성과 유연성을 높이는 패턴 |
|
||||||
|
| 15 | Scheduler Agent Supervisor | 워크플로우의 신뢰성 향상 | 작업 단계를 스케줄러, 에이전트, 감독자로 분리하여 신뢰성과 확장성을 높이는 패턴 |
|
||||||
|
| 16 | Leader Election | 분산 작업의 충돌 방지와 안정성 향상 | 분산 시스템에서 여러 작업 인스턴스 중 하나를 리더로 선출하여 조정 역할을 맡기는 패턴 |
|
||||||
|
| 17 | Saga | 데이터 일관성 보장 | 각 서비스의 로컬 트랜잭션을 사용하여 분산 트랜잭션의 일관성을 보장하는 패턴 |
|
||||||
|
| 18 | Compensating Transaction | 오류 복구로 데이터 일관성 보장 | 분산 트랜잭션에서 실패한 작업을 보상하기 위해 이전 작업을 취소하거나 상쇄하는 트랜잭션을 실행하는 패턴 |
|
||||||
|
| 19 | Priority Queue | 중요 작업의 우선 처리 보장 | 메시지의 우선순위에 따라 처리 순서를 조정하는 큐를 사용하는 패턴 |
|
||||||
|
| 20 | Queue-Based Load Leveling | 부하의 균등한 분산으로 안정성 확보 | 메시지 큐를 사용하여 작업과 서비스 간의 부하를 균등하게 분산시키는 패턴 |
|
||||||
|
| 21 | Sequential Convoy | 처리순서 보장 | 관련 메시지 집합을 순서대로 처리하되 다른 메시지 처리를 차단하지 않도록 하는 패턴 |
|
||||||
|
| 22 | Claim Check | 메시지 크기 최소화 및 성능과 보안 향상 | 메시지에서 페이로드를 분리하여 외부 저장소에 저장하고 참조키(클레임 체크)를 사용하는 패턴 |
|
||||||
|
| 23 | Publisher-Subscriber | 단일 이벤트 메시지의 복수 서비스 처리 보장 | 다수의 소비자(Consumer)에게 이벤트를 발행하는 패턴 |
|
||||||
|
| 24 | Asynchronous Request-Reply | 장시간 처리 작업의 응답시간 단축 | 프런트엔드(클라이언트)와 백엔드 간 비동기로 요청과 응답을 분리하여 응답 시간을 단축하는 패턴 |
|
||||||
|
| 25 | Competing Consumers | 병렬처리로 작업 처리 속도 향상 | 동일 메시지 채널에서 여러 소비자가 경쟁적으로 메시지를 처리하여 병렬성을 높이는 패턴 |
|
||||||
|
| 26 | Choreography | 중앙집중 처리의 병목현상 방지 | 중앙 조정자 없이 각 서비스가 자율적으로 이벤트를 구독하고 반응하여 전체 워크플로를 수행하는 패턴 |
|
||||||
|
|
||||||
|
### 6. 안정성 (6개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 27 | Rate Limiting | 요청 폭주 방지로 안정성 유지 | 일정 기간 동안 허용되는 요청 수를 제한하여 과부하를 방지하고 서비스 안정성을 높이는 패턴 |
|
||||||
|
| 28 | Throttling | 요청 폭주 방지로 안정성 유지 | 시스템의 부하 상태에 따라 요청 처리량을 동적으로 조절하여 과부하를 방지하는 패턴 |
|
||||||
|
| 29 | Bulkhead | 자원풀 격리로 장애 전파 방지 | 애플리케이션 요소를 격리된 풀로 분할하여 하나의 장애가 전체로 전파되는 것을 방지하는 패턴 |
|
||||||
|
| 30 | Circuit Breaker | 장애전파 방지 | 장애가 발생한 구성 요소를 빠르게 감지하고 요청 실패를 최소화하는 패턴 |
|
||||||
|
| 31 | Retry | 일시적 오류시 처리 보장 | 일시적인 오류에 대해 실패한 요청을 재시도하여 복원력을 높이는 패턴 |
|
||||||
|
| 32 | Event Sourcing | 데이터 멱등성 보장과 변경 기록 제공 | 데이터에 대한 모든 변경사항을 이벤트로 저장하고, 이벤트를 재생하여 데이터의 상태를 복원하는 패턴 |
|
||||||
|
|
||||||
|
### 7. 보안 (3개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 33 | Federated Identity | 사용자 인증 및 관리 효율화 | 인증을 외부 ID 제공자에 위임하여 사용자 관리를 간소화하고 SSO를 구현하는 패턴 |
|
||||||
|
| 34 | Gatekeeper | 데이터 접근 제어와 보안 강화 | 신뢰할 수 있는 호스트에 보안 관련 기능을 집중시켜 스토리지나 서비스의 보안을 강화하는 패턴 |
|
||||||
|
| 35 | Valet Key | 네트워크 대역폭 감소 | 클라이언트가 특정 리소스에 제한된 직접 접근을 할 수 있도록 토큰을 사용하는 패턴 |
|
||||||
|
|
||||||
|
### 8. 운영 (7개)
|
||||||
|
|
||||||
|
| No. | 패턴명 | 목적 | 설명 |
|
||||||
|
|-----|--------|------|------|
|
||||||
|
| 36 | Geodes | 글로벌 서비스 가용성과 성능 최적화 | 백엔드 서비스를 여러 지역에 분산 배치하여 지연 시간을 줄이고 가용성을 높이는 패턴 |
|
||||||
|
| 37 | Deployment Stamps | 멀티 테넌트 관리 | 리소스 그룹을 복제하여 작업이나 테넌트 단위로 격리된 운영 환경을 제공하는 패턴 |
|
||||||
|
| 38 | Health Endpoint Monitoring | 서비스 가용성 상태 점검 | 애플리케이션의 상태를 모니터링하기 위한 전용 API 엔드포인트를 노출하는 패턴 |
|
||||||
|
| 39 | Compute Resource Consolidation | 자원 사용 효율성과 비용 절감 | 여러 작업이나 운영을 단일 컴퓨팅 단위로 통합하여 효율성과 비용을 최적화하는 패턴 |
|
||||||
|
| 40 | Static Content Hosting | 정적 자원 제공, 비용절감과 성능 향상 | 정적 콘텐츠를 클라우드 스토리지에 배포하여 클라이언트에 직접 제공함으로써 컴퓨팅 인스턴스 사용을 줄이는 패턴 |
|
||||||
|
| 41 | External Configuration Store | 환경설정 중앙관리와 재배포 없이 설정 변경 적용 | 애플리케이션의 설정 정보를 중앙화하여 관리 효율성을 높이고 설정 값 변경 시 재배포 없이 적용하는 패턴 |
|
||||||
|
| 42 | Edge Workload Configuration | 엣지컴퓨팅의 효율적 관리 | 장치와 시스템이 혼재된 엣지 환경에서 워크로드 구성을 효율적으로 관리하여 지연 시간 단축과 네트워크 비용 절감을 하는 패턴 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> **참고**: 이 문서는 클라우드 환경에서 자주 사용되는 디자인 패턴들을 체계적으로 분류하여 정리한 것입니다. 각 패턴은 특정 목적과 상황에 맞게 적용될 수 있으며, 실제 구현 시에는 프로젝트의 요구사항과 제약사항을 충분히 고려해야 합니다.
|
||||||
300
claude/mermaid-guide.md
Normal file
300
claude/mermaid-guide.md
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
# Mermaid문법검사가이드
|
||||||
|
|
||||||
|
## 개요
|
||||||
|
|
||||||
|
Mermaid 다이어그램의 문법 오류를 사전에 검출하여 렌더링 실패를 방지하기 위한 가이드입니다. Docker 기반 Mermaid CLI를 활용하여 로컬에서 빠르게 문법을 검증할 수 있습니다.
|
||||||
|
|
||||||
|
## Mermaid CLI 서버 설치 및 검사
|
||||||
|
|
||||||
|
### Docker로 Mermaid CLI 컨테이너 실행
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mermaid CLI 컨테이너가 실행 중인지 확인
|
||||||
|
docker ps | grep mermaid-cli
|
||||||
|
|
||||||
|
# ⚠️ 중요: 첫 실행 시 이미지 다운로드를 먼저 진행 (큰 이미지로 인한 타임아웃 방지)
|
||||||
|
docker pull minlag/mermaid-cli:latest
|
||||||
|
|
||||||
|
# Mermaid CLI 컨테이너가 없으면 설치 및 실행 (root 권한으로 실행, 포트 48080 사용)
|
||||||
|
docker run -d --rm --name mermaid-cli -u root -p 48080:8080 --entrypoint sh minlag/mermaid-cli:latest -c "while true;do sleep 3600; done"
|
||||||
|
|
||||||
|
# 컨테이너 상태 확인
|
||||||
|
docker logs mermaid-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 💡 Docker 이미지 다운로드 관련 주의사항
|
||||||
|
|
||||||
|
**첫 실행 시 발생할 수 있는 문제:**
|
||||||
|
- `minlag/mermaid-cli:latest` 이미지가 큰 용량(약 700MB+)이므로 다운로드에 시간이 오래 걸림
|
||||||
|
- `docker run` 명령 실행 시 이미지가 없으면 자동 다운로드하지만 타임아웃 발생 가능
|
||||||
|
- **해결방법**: `docker pull` 명령으로 이미지를 먼저 다운로드한 후 컨테이너 실행
|
||||||
|
|
||||||
|
**권장 실행 순서:**
|
||||||
|
1. `docker pull minlag/mermaid-cli:latest` (이미지 다운로드)
|
||||||
|
2. `docker run` 명령으로 컨테이너 실행
|
||||||
|
3. 필수 설정 진행
|
||||||
|
|
||||||
|
#### ⚠️ 중요: 최초 컨테이너 생성 후 필수 설정
|
||||||
|
|
||||||
|
Mermaid CLI는 Puppeteer를 사용하여 다이어그램을 렌더링하므로 Chromium 브라우저가 필요합니다.
|
||||||
|
컨테이너를 처음 생성한 후 다음 명령을 실행하여 필요한 패키지를 설치해야 합니다:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Chromium 및 필요한 종속성 설치
|
||||||
|
docker exec mermaid-cli sh -c "apk add --no-cache chromium chromium-chromedriver nss freetype harfbuzz ca-certificates ttf-freefont"
|
||||||
|
|
||||||
|
# Puppeteer가 사용할 설정 파일 생성
|
||||||
|
docker exec mermaid-cli sh -c "echo '{\"executablePath\": \"/usr/bin/chromium-browser\", \"args\": [\"--no-sandbox\", \"--disable-setuid-sandbox\", \"--disable-dev-shm-usage\"]}' > /tmp/puppeteer-config.json"
|
||||||
|
```
|
||||||
|
|
||||||
|
이 설정은 컨테이너가 실행되는 동안 유지되므로 한 번만 실행하면 됩니다.
|
||||||
|
|
||||||
|
문법검사 후 Container를 중지하지 않고 계속 사용함
|
||||||
|
|
||||||
|
## 문법 검사 방법
|
||||||
|
현재 OS에 맞게 수행.
|
||||||
|
|
||||||
|
### Linux/macOS 버전
|
||||||
|
**스크립트 파일(tools/check-mermaid.sh)을 이용하여 수행**
|
||||||
|
|
||||||
|
1. tools/check-mermaid.sh 파일 존재 여부 확인
|
||||||
|
2. 스크립트 파일이 없으면 "Mermaid문법검사기(Linux/Mac)"를 tools/check-mermaid.sh 파일로 다운로드하여 스크립트 파일을 만듦
|
||||||
|
3. 스크립트 파일이 있으면 그 스크립트 파일을 이용하여 검사
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 스크립트 실행 권한 부여 (최초 1회)
|
||||||
|
chmod +x tools/check-mermaid.sh
|
||||||
|
|
||||||
|
# 2. 문법 검사 실행
|
||||||
|
./tools/check-mermaid.sh {검사할 파일}
|
||||||
|
|
||||||
|
# 예시
|
||||||
|
./tools/check-mermaid.sh design/backend/physical/physical-architecture.mmd
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows PowerShell 버전
|
||||||
|
**스크립트 파일(tools/check-mermaid.ps1)을 이용하여 수행**
|
||||||
|
|
||||||
|
1. tools/check-mermaid.ps1 파일 존재 여부 확인
|
||||||
|
2. 스크립트 파일이 없으면 "Mermaid문법검사기(Window)"를 tools/check-mermaid.ps1 파일로 다운로드하여 스크립트 파일을 만듦
|
||||||
|
3. 스크립트 파일이 있으면 그 스크립트 파일을 이용하여 검사
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 문법 검사 실행
|
||||||
|
.\tools\check-mermaid.ps1 {검사할 파일}
|
||||||
|
|
||||||
|
# 예시
|
||||||
|
.\tools\check-mermaid.ps1 design\backend\physical\physical-architecture.mmd
|
||||||
|
```
|
||||||
|
|
||||||
|
### 수동 검사 방법 (스크립트 없이)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 고유 파일명 생성 (충돌 방지)
|
||||||
|
TEMP_FILE="/tmp/mermaid_$(date +%s)_$$.mmd"
|
||||||
|
|
||||||
|
# 2. 파일 복사
|
||||||
|
docker cp {검사할 파일} mermaid-cli:${TEMP_FILE}
|
||||||
|
|
||||||
|
# 3. 문법 검사 (Puppeteer 설정 파일 사용)
|
||||||
|
docker exec mermaid-cli sh -c "cd /home/mermaidcli && node_modules/.bin/mmdc -i ${TEMP_FILE} -o /tmp/output.svg -p /tmp/puppeteer-config.json -q"
|
||||||
|
|
||||||
|
# 4. 임시 파일 삭제
|
||||||
|
docker exec mermaid-cli rm -f ${TEMP_FILE} /tmp/output.svg
|
||||||
|
```
|
||||||
|
|
||||||
|
**주의**: Puppeteer 설정 파일(`/tmp/puppeteer-config.json`)이 있어야 합니다. 없다면 위의 "최초 컨테이너 생성 후 필수 설정"을 먼저 실행하세요.
|
||||||
|
|
||||||
|
### 검사 결과 해석
|
||||||
|
|
||||||
|
| 출력 | 의미 | 대응 방법 |
|
||||||
|
|------|------|-----------|
|
||||||
|
| "Success: Mermaid syntax is valid!" | 문법 오류 없음 ✅ | 정상, 렌더링 가능 |
|
||||||
|
| "Parse error on line X" | X번째 줄 구문 오류 ❌ | 해당 라인 문법 확인 |
|
||||||
|
| "Expecting 'XXX'" | 예상 토큰 오류 ❌ | 누락된 문법 요소 추가 |
|
||||||
|
| "Syntax error" | 일반 문법 오류 ❌ | 전체 구조 재검토 |
|
||||||
|
|
||||||
|
## Mermaid 다이어그램 타입별 주의사항
|
||||||
|
|
||||||
|
### 1. Graph/Flowchart
|
||||||
|
```mermaid
|
||||||
|
graph TB
|
||||||
|
%% 올바른 사용법 ✅
|
||||||
|
A[Node A] --> B[Node B]
|
||||||
|
C[Node C] -.-> D[Node D]
|
||||||
|
E[Node E] ==> F[Node F]
|
||||||
|
|
||||||
|
%% 주의사항
|
||||||
|
%% - 노드 ID에 공백 불가 (대신 [Label] 사용)
|
||||||
|
%% - subgraph와 end 개수 일치 필요
|
||||||
|
%% - 따옴표 안에서 특수문자 주의
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Sequence Diagram
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
%% 올바른 사용법 ✅
|
||||||
|
participant A as Service A
|
||||||
|
participant B as Service B
|
||||||
|
|
||||||
|
A->>B: Request
|
||||||
|
B-->>A: Response
|
||||||
|
A->>+B: Call with activation
|
||||||
|
B-->>-A: Return with deactivation
|
||||||
|
|
||||||
|
%% 주의사항
|
||||||
|
%% - participant 선언 권장
|
||||||
|
%% - 활성화(+)/비활성화(-) 쌍 맞추기
|
||||||
|
%% - Note 블록 종료 확인
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Class Diagram
|
||||||
|
```mermaid
|
||||||
|
classDiagram
|
||||||
|
%% 올바른 사용법 ✅
|
||||||
|
class Animal {
|
||||||
|
+String name
|
||||||
|
+int age
|
||||||
|
+makeSound() void
|
||||||
|
}
|
||||||
|
|
||||||
|
class Dog {
|
||||||
|
+String breed
|
||||||
|
+bark() void
|
||||||
|
}
|
||||||
|
|
||||||
|
Animal <|-- Dog : inherits
|
||||||
|
|
||||||
|
%% 주의사항
|
||||||
|
%% - 메서드 괄호 필수
|
||||||
|
%% - 관계 표현 정확히
|
||||||
|
%% - 접근 제한자 기호 확인
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. State Diagram
|
||||||
|
```mermaid
|
||||||
|
stateDiagram-v2
|
||||||
|
%% 올바른 사용법 ✅
|
||||||
|
[*] --> Idle
|
||||||
|
Idle --> Processing : start
|
||||||
|
Processing --> Completed : finish
|
||||||
|
Processing --> Error : error
|
||||||
|
Error --> Idle : reset
|
||||||
|
Completed --> [*]
|
||||||
|
|
||||||
|
%% 주의사항
|
||||||
|
%% - [*]는 시작/종료 상태
|
||||||
|
%% - 상태 이름에 공백 불가
|
||||||
|
%% - 전이 레이블 콜론(:) 사용
|
||||||
|
```
|
||||||
|
|
||||||
|
## 일반적인 오류와 해결 방법
|
||||||
|
|
||||||
|
### 1. 괄호 불균형
|
||||||
|
```mermaid
|
||||||
|
%% 잘못된 예 ❌
|
||||||
|
graph TB
|
||||||
|
A[Node (with parenthesis)] %% 괄호 안에 괄호
|
||||||
|
|
||||||
|
%% 올바른 예 ✅
|
||||||
|
graph TB
|
||||||
|
A[Node with parenthesis]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 특수 문자 이스케이프
|
||||||
|
```mermaid
|
||||||
|
%% 잘못된 예 ❌
|
||||||
|
graph TB
|
||||||
|
A[Security & Management] %% & 문자 직접 사용
|
||||||
|
|
||||||
|
%% 올바른 예 ✅
|
||||||
|
graph TB
|
||||||
|
A[Security & Management] %% HTML 엔티티 사용
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. subgraph/end 불일치
|
||||||
|
```mermaid
|
||||||
|
%% 잘못된 예 ❌
|
||||||
|
graph TB
|
||||||
|
subgraph One
|
||||||
|
A --> B
|
||||||
|
subgraph Two
|
||||||
|
C --> D
|
||||||
|
end %% Two만 닫힘, One은 안 닫힘
|
||||||
|
|
||||||
|
%% 올바른 예 ✅
|
||||||
|
graph TB
|
||||||
|
subgraph One
|
||||||
|
A --> B
|
||||||
|
subgraph Two
|
||||||
|
C --> D
|
||||||
|
end
|
||||||
|
end %% 모든 subgraph 닫기
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 노드 참조 오류
|
||||||
|
```mermaid
|
||||||
|
%% 잘못된 예 ❌
|
||||||
|
graph TB
|
||||||
|
A --> UnknownNode %% 정의되지 않은 노드
|
||||||
|
|
||||||
|
%% 올바른 예 ✅
|
||||||
|
graph TB
|
||||||
|
A[Node A] --> B[Node B] %% 모든 노드 정의
|
||||||
|
```
|
||||||
|
|
||||||
|
## 컨테이너 관리
|
||||||
|
|
||||||
|
### 컨테이너 중지 및 삭제
|
||||||
|
```bash
|
||||||
|
# 컨테이너 중지
|
||||||
|
docker stop mermaid-cli
|
||||||
|
|
||||||
|
# 컨테이너 삭제
|
||||||
|
docker rm mermaid-cli
|
||||||
|
|
||||||
|
# 한 번에 중지 및 삭제
|
||||||
|
docker stop mermaid-cli && docker rm mermaid-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
### 컨테이너 재시작
|
||||||
|
```bash
|
||||||
|
# 컨테이너 재시작
|
||||||
|
docker restart mermaid-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
## 성능 최적화 팁
|
||||||
|
|
||||||
|
1. **컨테이너 유지**: 검사 후 컨테이너를 중지하지 않고 유지하여 다음 검사 시 빠르게 실행
|
||||||
|
2. **배치 검사**: 여러 파일을 연속으로 검사할 때 컨테이너 재시작 없이 진행
|
||||||
|
3. **로컬 파일 사용**: 네트워크 경로보다 로컬 파일 경로 사용 권장
|
||||||
|
|
||||||
|
## 문제 해결
|
||||||
|
|
||||||
|
### Docker 관련 오류
|
||||||
|
```bash
|
||||||
|
# Docker 데몬 실행 확인
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
# Docker Desktop 시작 (Windows/Mac)
|
||||||
|
# Docker 서비스 시작 (Linux)
|
||||||
|
sudo systemctl start docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### 권한 오류
|
||||||
|
```bash
|
||||||
|
# Linux/Mac에서 스크립트 실행 권한
|
||||||
|
chmod +x tools/check-mermaid.sh
|
||||||
|
|
||||||
|
# Docker 권한 (Linux)
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
```
|
||||||
|
|
||||||
|
### 컨테이너 이미지 오류
|
||||||
|
```bash
|
||||||
|
# 이미지 재다운로드
|
||||||
|
docker pull minlag/mermaid-cli:latest
|
||||||
|
|
||||||
|
# 기존 컨테이너 삭제 후 재생성
|
||||||
|
docker stop mermaid-cli && docker rm mermaid-cli
|
||||||
|
```
|
||||||
1274
design/pattern/architecture-pattern.md
Normal file
1274
design/pattern/architecture-pattern.md
Normal file
File diff suppressed because it is too large
Load Diff
96
tools/check-mermaid.ps1
Normal file
96
tools/check-mermaid.ps1
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# Mermaid Syntax Checker using Docker Container
|
||||||
|
# Similar to PlantUML checker - keeps container running for better performance
|
||||||
|
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true, Position=0)]
|
||||||
|
[string]$FilePath
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check if file exists
|
||||||
|
if (-not (Test-Path $FilePath)) {
|
||||||
|
Write-Host "Error: File not found: $FilePath" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get absolute path
|
||||||
|
$absolutePath = (Resolve-Path $FilePath).Path
|
||||||
|
$fileName = Split-Path $absolutePath -Leaf
|
||||||
|
|
||||||
|
Write-Host "`nChecking Mermaid syntax for: $fileName" -ForegroundColor Cyan
|
||||||
|
Write-Host ("=" * 60) -ForegroundColor Gray
|
||||||
|
|
||||||
|
# Check if mermaid container is running
|
||||||
|
$containerRunning = docker ps --filter "name=mermaid-cli" --format "{{.Names}}" 2>$null
|
||||||
|
|
||||||
|
if (-not $containerRunning) {
|
||||||
|
Write-Host "Error: Mermaid CLI container is not running." -ForegroundColor Red
|
||||||
|
Write-Host "Please follow the setup instructions in the Mermaid guide to start the container." -ForegroundColor Yellow
|
||||||
|
Write-Host "`nQuick setup commands:" -ForegroundColor Cyan
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "# 1. Start container with root privileges (port 48080)" -ForegroundColor Green
|
||||||
|
Write-Host "docker run -d --rm --name mermaid-cli -u root -p 48080:8080 --entrypoint sh minlag/mermaid-cli:latest -c `"while true;do sleep 3600; done`"" -ForegroundColor White
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "# 2. Install Chromium and dependencies" -ForegroundColor Green
|
||||||
|
Write-Host "docker exec mermaid-cli sh -c `"apk add --no-cache chromium chromium-chromedriver nss freetype harfbuzz ca-certificates ttf-freefont`"" -ForegroundColor White
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "# 3. Create Puppeteer configuration" -ForegroundColor Green
|
||||||
|
Write-Host "docker exec mermaid-cli sh -c `"echo '{```"executablePath```": ```"/usr/bin/chromium-browser```", ```"args```": [```"--no-sandbox```", ```"--disable-setuid-sandbox```", ```"--disable-dev-shm-usage```"]}' > /tmp/puppeteer-config.json`"" -ForegroundColor White
|
||||||
|
Write-Host ""
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set Puppeteer configuration file path
|
||||||
|
$puppeteerConfigFile = "/tmp/puppeteer-config.json"
|
||||||
|
|
||||||
|
# Generate unique temp filename
|
||||||
|
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
|
||||||
|
$processId = $PID
|
||||||
|
$tempFile = "/tmp/mermaid_${timestamp}_${processId}.mmd"
|
||||||
|
$outputFile = "/tmp/mermaid_${timestamp}_${processId}.svg"
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Copy file to container
|
||||||
|
Write-Host "Copying file to container..." -ForegroundColor Gray
|
||||||
|
docker cp "$absolutePath" "mermaid-cli:$tempFile" 2>&1 | Out-Null
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Host "Error: Failed to copy file to container" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run syntax check with Puppeteer configuration
|
||||||
|
Write-Host "Running syntax check..." -ForegroundColor Gray
|
||||||
|
$output = docker exec mermaid-cli sh -c "cd /home/mermaidcli && node_modules/.bin/mmdc -i '$tempFile' -o '$outputFile' -p '$puppeteerConfigFile' -q" 2>&1
|
||||||
|
$exitCode = $LASTEXITCODE
|
||||||
|
|
||||||
|
if ($exitCode -eq 0) {
|
||||||
|
Write-Host "`nSuccess: Mermaid syntax is valid!" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "`nError: Mermaid syntax validation failed!" -ForegroundColor Red
|
||||||
|
Write-Host "`nError details:" -ForegroundColor Red
|
||||||
|
|
||||||
|
# Parse and display error messages
|
||||||
|
$errorLines = $output -split "`n"
|
||||||
|
foreach ($line in $errorLines) {
|
||||||
|
if ($line -match "Error:|Parse error|Expecting|Syntax error") {
|
||||||
|
Write-Host " $line" -ForegroundColor Red
|
||||||
|
} elseif ($line -match "line \d+|at line") {
|
||||||
|
Write-Host " $line" -ForegroundColor Yellow
|
||||||
|
} elseif ($line.Trim() -ne "") {
|
||||||
|
Write-Host " $line" -ForegroundColor DarkRed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
# Clean up temp files
|
||||||
|
Write-Host "`nCleaning up..." -ForegroundColor Gray
|
||||||
|
docker exec mermaid-cli rm -f "$tempFile" "$outputFile" 2>&1 | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`nValidation complete!" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# Note: Container is kept running for subsequent checks
|
||||||
|
# To stop: docker stop mermaid-cli && docker rm mermaid-cli
|
||||||
Loading…
x
Reference in New Issue
Block a user