파이썬으로 소프트웨어 프로젝트 구조를 분석하고 다이어그램을 자동 생성하는 도구를 만들어주세요.
요구사항:
1. /home/chaeya/workspaces/airun 폴더에 있는 프로젝트 소스 코드를 분석합니다
2. 다음 세 가지 다이어그램을 생성합니다:
   a) 클래스 구조도 (DOT 형식)
   b) 프로세스 흐름도 (Mermaid flowchart)
   c) 시스템 아키텍처 시퀀스 다이어그램 (Mermaid sequence)

3. 클래스 구조도 생성:
   - 프로젝트 내 Python 파일에서 클래스 정의를 추출
   - 클래스 간의 상속 관계 파악
   - DOT 형식으로 다이어그램 소스 코드 생성
   - 생성된 소스 코드를 output/class_diagram.dot 파일로 저장
   - utils.create_dot_diagram() 함수를 사용하여 PNG 이미지로 변환
   
   예시:
   ```python
   # DOT 형식으로 클래스 다이어그램 생성
   dot_source = """
   digraph ClassDiagram {
     // 그래프 설정
     rankdir=BT;
     node [shape=record, style=filled, fillcolor=lightblue];
     
     // 클래스 정의
     BaseClass [label="{BaseClass|+ attribute1\l+ attribute2\l|+ method1()\l+ method2()\l}"];
     ChildClass1 [label="{ChildClass1|+ child_attr1\l|+ child_method1()\l}"];
     ChildClass2 [label="{ChildClass2|+ child_attr2\l|+ child_method2()\l}"];
     
     // 상속 관계
     ChildClass1 -> BaseClass [arrowhead=empty];
     ChildClass2 -> BaseClass [arrowhead=empty];
   }
   """
   
   # DOT 소스 저장
   save_file("output/class_diagram.dot", dot_source)
   
   # PNG 이미지로 변환
   output_path = create_dot_diagram(
       dot_path="output/class_diagram.dot",
       output_path="output/class_diagram.png",
       format="png"
   )
   ```

4. 프로세스 흐름도 생성:
   - 프로젝트 내 주요 프로세스 흐름 분석
   - Mermaid flowchart 형식으로 다이어그램 소스 코드 생성
   - 생성된 소스 코드를 output/process_flow.mmd 파일로 저장
   - utils.create_mermaid_diagram() 함수를 사용하여 PNG 이미지로 변환
   
   예시:
   ```python
   # Mermaid 형식으로 프로세스 흐름도 생성
   flowchart_code = """
   flowchart TD
       A[시작] --> B[데이터 로드]
       B --> C{데이터 유효성 검사}
       C -->|성공| D[데이터 처리]
       C -->|실패| E[에러 처리]
       D --> F[결과 저장]
       E --> G[로그 기록]
       F --> H[종료]
       G --> H
   """
   
   # Mermaid 소스 저장
   save_file("output/process_flow.mmd", flowchart_code)
   
   # PNG 이미지로 변환
   output_path = create_mermaid_diagram(
       mermaid_code=flowchart_code,
       output_path="output/process_flow.png",
       diagram_type="flowchart"
   )
   ```

5. 시스템 아키텍처 시퀀스 다이어그램 생성:
   - 주요 컴포넌트 간의 상호작용 분석
   - Mermaid sequence 형식으로 다이어그램 소스 코드 생성
   - 생성된 소스 코드를 output/sequence_diagram.mmd 파일로 저장
   - utils.create_mermaid_diagram() 함수를 사용하여 PNG 이미지로 변환
   
   예시:
   ```python
   # Mermaid 형식으로 시퀀스 다이어그램 생성
   sequence_code = """
   sequenceDiagram
       participant 사용자
       participant 웹서버
       participant 데이터베이스
       
       사용자->>웹서버: 요청
       웹서버->>데이터베이스: 쿼리 요청
       데이터베이스-->>웹서버: 쿼리 결과
       웹서버-->>사용자: 응답
   """
   
   # Mermaid 소스 저장
   save_file("output/sequence_diagram.mmd", sequence_code)
   
   # PNG 이미지로 변환
   output_path = create_mermaid_diagram(
       mermaid_code=sequence_code,
       output_path="output/sequence_diagram.png",
       diagram_type="sequence"
   )
   ```

6. SWOT 분석 매트릭스 생성:
   - 프로젝트에 대한 SWOT 분석 데이터 정의
   - utils.create_swot_matrix() 함수를 사용하여 DOT 소스 코드 생성
   - 생성된 소스 코드를 output/swot_matrix.dot 파일로 저장
   - utils.create_dot_diagram() 함수를 사용하여 PNG 이미지로 변환
   
   예시:
   ```python
   # SWOT 데이터 정의
   swot_data = {
       'strengths': [
           '모듈화된 아키텍처',
           '자동화된 테스트 포함',
           '명확한 문서화'
       ],
       'weaknesses': [
           '일부 모듈의 의존성 높음',
           '레거시 코드 존재',
           '성능 최적화 필요'
       ],
       'opportunities': [
           '오픈소스 기여 가능성',
           '새로운 기술 통합',
           '사용자 커뮤니티 확장'
       ],
       'threats': [
           '유사 프로젝트와의 경쟁',
           '기술 부채 증가',
           '유지보수 인력 부족'
       ],
       'strategies': {
           'SO': ['모듈 단위 오픈소스화', '문서화 표준 확립'],
           'WO': ['의존성 리팩토링', '레거시 코드 현대화'],
           'ST': ['차별화 전략 수립', '지속적 통합 강화'],
           'WT': ['기술 부채 해소 계획', '지식 공유 체계 구축']
       }
   }
   
   # SWOT 매트릭스 DOT 소스 생성
   dot_source = create_swot_matrix(swot_data)
   
   # DOT 소스 저장
   save_file("output/swot_matrix.dot", dot_source)
   
   # PNG 이미지로 변환
   output_path = create_dot_diagram(
       dot_path="output/swot_matrix.dot",
       output_path="output/swot_matrix.png",
       format="png"
   )
   ```

7. 모든 다이어그램을 포함한 PDF 보고서 생성:
   - utils.PDFDocument 클래스를 사용하여 PDF 문서 생성
   - output/project_analysis_report.pdf 파일로 저장
   - PDFDocument 객체 생성 후 add_page() 호출하지 않음 (첫 페이지는 자동 생성됨)
   
   예시:
   ```python
   # PDF 문서 생성
   doc = PDFDocument()
   
   # 제목 추가
   doc.add_heading("프로젝트 분석 보고서", level=1)
   
   # 소개 문단 추가
   doc.add_paragraph("이 보고서는 프로젝트 구조와 아키텍처를 자동으로 분석하여 생성되었습니다.")
   
   # 클래스 다이어그램 추가
   doc.add_heading("클래스 구조도", level=2)
   doc.add_paragraph("아래는 프로젝트의 주요 클래스와 그 관계를 보여주는 다이어그램입니다.")
   doc.add_image("output/class_diagram.png")
   
   # 프로세스 흐름도 추가
   doc.add_heading("프로세스 흐름도", level=2)
   doc.add_paragraph("아래는 프로젝트의 주요 프로세스 흐름을 보여주는 다이어그램입니다.")
   doc.add_image("output/process_flow.png")
   
   # 시퀀스 다이어그램 추가
   doc.add_heading("시스템 아키텍처 시퀀스 다이어그램", level=2)
   doc.add_paragraph("아래는 시스템 컴포넌트 간의 상호작용을 보여주는 시퀀스 다이어그램입니다.")
   doc.add_image("output/sequence_diagram.png")
   
   # SWOT 분석 추가
   doc.add_heading("SWOT 분석", level=2)
   doc.add_paragraph("아래는 프로젝트의 강점, 약점, 기회, 위협 요소를 분석한 SWOT 매트릭스입니다.")
   doc.add_image("output/swot_matrix.png")
   
   # PDF 저장
   doc.save("output/project_analysis_report.pdf")
   ```
8. 생성된 PDF 보고서와 다이어그램 이미지를 압축하여 ZIP 파일로 저장:
   - 모든 다이어그램 이미지와 PDF 보고서를 포함
   - output/project_analysis.zip 파일로 저장
   
   예시:
   ```python
   import zipfile
   
   # ZIP 파일 생성
   with zipfile.ZipFile("output/project_analysis.zip", "w") as zipf:
       # 다이어그램 이미지 추가
       zipf.write("output/class_diagram.png", "class_diagram.png")
       zipf.write("output/process_flow.png", "process_flow.png")
       zipf.write("output/sequence_diagram.png", "sequence_diagram.png")
       zipf.write("output/swot_matrix.png", "swot_matrix.png")
       zipf.write("output/gantt_chart.png", "gantt_chart.png")
       
       # 소스 파일 추가
       zipf.write("output/class_diagram.dot", "source/class_diagram.dot")
       zipf.write("output/process_flow.mmd", "source/process_flow.mmd")
       zipf.write("output/sequence_diagram.mmd", "source/sequence_diagram.mmd")
       zipf.write("output/swot_matrix.dot", "source/swot_matrix.dot")
       
       # PDF 보고서 추가
       zipf.write("output/project_analysis_report.pdf", "project_analysis_report.pdf")
   ```

9. 실행 결과 출력:
    - 생성된 각 다이어그램 파일 경로 출력
    - PDF 보고서 파일 경로 출력
    - ZIP 파일 경로 출력
    
    예시:
    ```python
    print("[SUCCESS] 클래스 다이어그램 생성: output/class_diagram.png")
    print("[SUCCESS] 프로세스 흐름도 생성: output/process_flow.png")
    print("[SUCCESS] 시퀀스 다이어그램 생성: output/sequence_diagram.png")
    print("[SUCCESS] SWOT 매트릭스 생성: output/swot_matrix.png")
    print("[SUCCESS] PDF 보고서 생성: output/project_analysis_report.pdf")
    print("[SUCCESS] ZIP 파일 생성: output/project_analysis.zip")
    ```

10. 완성된 ZIP 파일을 chaeya@gmail.com으로 발송합니다
    - utils.send_email 함수를 사용하여 이메일 발송
    - 예시:
    ```python
    send_email(
        to_email="chaeya@gmail.com",
        subject="프로젝트 분석 결과",
        body="프로젝트 분석 결과물을 첨부합니다.",
        attachments=["output/project_analysis.zip"]
    )
    ```

참고사항:
1. DOT 다이어그램은 Graphviz 패키지를 사용하며, utils.create_dot_diagram() 함수가 자동으로 필요한 패키지를 설치합니다.
2. Mermaid 다이어그램은 외부 도구인 mermaid-cli를 사용하며, 설치되어 있지 않을 경우 utils.create_mermaid_diagram() 함수가 적절한 메시지를 출력합니다.
3. 다이어그램 타입별 특성을 고려하여 이미지 생성 시 적절한 옵션을 사용하세요:
   - 시퀀스 다이어그램 (sequence): 기본 크기로 생성
   - 플로우차트 (flowchart): 넓은 너비(1200px)로 생성
   - 간트 차트 (gantt): 넓은 너비(1200px)와 높은 높이(800px)로 생성
4. 모든 파일 경로는 normalize_path() 함수를 사용하여 정규화하고, 디렉토리는 필요한 경우 미리 생성해야 합니다. 