# 🔍 아키텍처 영향도 분석: VOC 통계/통합 분석보고서

## 📋 기능 개요

**기능명**: VOC 통계/통합 분석보고서  
**제안일**: 2026-02-17  
**제안자**: KH.Choi  
**목표**: 수집된 VOC 데이터를 기반으로 통계 분석 및 통합 보고서 자동 생성

---

## 🏗️ 현재 아키텍처 분석

### 기존 구조
```
AppController
├── SchedulerManager (크롤링, DB 체크)
├── NotificationManager (알림)
├── ReportService (HWP/PDF 보고서 생성)
├── VOCDatabase (SQLite)
└── SystemTray (트레이 아이콘)
```

### 데이터 흐름
```
웹사이트 → VOCScraper → VOCPost (Pydantic) → VOCDatabase (SQLite)
                                                      ↓
                                            HistoryDialog (조회)
                                                      ↓
                                            ReportService (HWP 생성)
```

---

## 📊 영향도 분석

### 1. 데이터베이스 레이어 (Low Impact)

**현재 상태**:
- SQLite 기반
- `voc_posts` 테이블 (id, title, writer, department, date, status, content 등)
- 기본 CRUD 작업만 지원

**필요한 변경**:
- ✅ **추가 테이블 불필요** (기존 데이터로 충분)
- ✅ **인덱스 추가 필요** (성능 최적화)
  - `CREATE INDEX idx_date ON voc_posts(date);`
  - `CREATE INDEX idx_department ON voc_posts(department);`
  - `CREATE INDEX idx_status ON voc_posts(status);`
- ✅ **집계 쿼리 메서드 추가** (`VOCDatabase` 클래스)
  - `get_stats_by_period(start_date, end_date)`
  - `get_stats_by_department()`
  - `get_keyword_frequency()`

**영향도**: 🟢 낮음 (기존 구조 유지, 메서드 추가만)

---

### 2. 서비스 레이어 (Medium Impact)

**현재 상태**:
- `ReportService`: HWP/PDF 보고서 생성
- `ScraperService`: 웹 크롤링
- `TimetableService`: 시각표 조회

**필요한 변경**:
- ⚠️ **신규 서비스 추가**: `StatisticsService`
  - 통계 데이터 집계
  - 차트 생성 (matplotlib/plotly)
  - Excel/PDF 보고서 생성
- ⚠️ **ReportService와의 관계**
  - `ReportService`: 개별 VOC 보고서 (HWP)
  - `StatisticsService`: 통합 분석 보고서 (Excel/PDF)
  - 역할 분리 명확 → 충돌 없음

**영향도**: 🟡 중간 (신규 서비스 추가, 기존 서비스 영향 없음)

---

### 3. 컨트롤러 레이어 (Low Impact)

**현재 상태**:
- `AppController`: UI 이벤트 처리
- `SchedulerManager`: 백그라운드 작업
- `NotificationManager`: 알림

**필요한 변경**:
- ✅ **AppController에 메서드 추가**
  - `request_generate_statistics(period, options)`
  - `open_statistics_view()`
- ✅ **기존 로직 영향 없음**

**영향도**: 🟢 낮음 (메서드 추가만)

---

### 4. 뷰 레이어 (Medium Impact)

**현재 상태**:
- `HistoryDialog`: VOC 목록 조회
- `SettingsDialog`: 설정 관리
- `ReportOptionDialog`: 보고서 옵션

**필요한 변경**:
- ⚠️ **신규 다이얼로그 추가**: `StatisticsDialog`
  - 기간 선택 (시작일, 종료일)
  - 분석 옵션 (부서별, 키워드별, 역별)
  - 차트 미리보기
  - 보고서 생성 버튼
- ⚠️ **HistoryDialog 확장** (선택)
  - "통계 보기" 버튼 추가

**영향도**: 🟡 중간 (신규 UI 추가, 기존 UI 영향 없음)

---

### 5. 모델 레이어 (Low Impact)

**현재 상태**:
- `VOCPost`: 개별 VOC 데이터 모델

**필요한 변경**:
- ✅ **신규 모델 추가**: `StatisticsReport`
  ```python
  class StatisticsReport(BaseModel):
      period_start: str
      period_end: str
      total_count: int
      by_department: dict
      by_status: dict
      top_keywords: list
      charts: dict  # 차트 이미지 경로
  ```
- ✅ **기존 모델 영향 없음**

**영향도**: 🟢 낮음 (신규 모델 추가만)

---

### 6. 유틸리티 레이어 (Low Impact)

**현재 상태**:
- `voc_parser.py`: VOC 텍스트 파싱
- `train_analyzer.py`: 열차 정보 분석
- `date_utils.py`: 날짜 처리

**필요한 변경**:
- ✅ **신규 유틸리티 추가**: `chart_generator.py`
  - matplotlib/plotly 기반 차트 생성
  - 워드 클라우드 생성
- ✅ **기존 유틸리티 영향 없음**

**영향도**: 🟢 낮음 (신규 유틸리티 추가만)

---

## 🔗 의존성 분석

### 신규 라이브러리 필요
```python
# 데이터 분석
pandas>=1.5.0

# 시각화
matplotlib>=3.5.0
plotly>=5.0.0

# Excel 생성
openpyxl>=3.0.0

# 워드 클라우드
wordcloud>=1.8.0

# 한글 폰트 (선택)
matplotlib-fontpkg-nanum
```

### 기존 라이브러리와의 충돌 가능성
- ❌ **충돌 없음**: 모두 독립적인 라이브러리
- ✅ **호환성 확인 필요**: Python 3.8+ 지원 확인

---

## 📁 파일 구조 변경

### 신규 파일
```
app/
├── services/
│   └── statistics_service.py  (신규)
├── models/
│   └── statistics.py          (신규)
├── utils/
│   └── chart_generator.py     (신규)
├── view/
│   └── dialogs/
│       └── statistics_dialog.py  (신규)
```

### 수정 파일
```
app/
├── controllers/
│   └── controller.py          (메서드 추가)
├── utils/
│   └── database.py            (집계 쿼리 추가)
├── view/
│   └── dialogs/
│       └── history_dialog.py  (통계 버튼 추가, 선택)
```

---

## ⚠️ 잠재적 리스크

### 1. 성능 이슈
**문제**: 대량 데이터 집계 시 SQLite 성능 저하  
**해결**: 
- 인덱스 추가
- 기간 제한 (최대 1년)
- 백그라운드 스레드 처리

### 2. 메모리 사용량
**문제**: 차트 생성 시 메모리 증가  
**해결**:
- 차트 생성 후 즉시 파일 저장
- 메모리 해제 (plt.close())

### 3. UI 응답성
**문제**: 보고서 생성 중 UI 멈춤  
**해결**:
- 프로그레스 바 표시
- 백그라운드 스레드 사용

---

## 🎯 권장 구현 순서

### Phase 1: 기반 구축 (1주)
1. `StatisticsService` 기본 구조 생성
2. `VOCDatabase` 집계 쿼리 추가
3. `StatisticsReport` 모델 정의

### Phase 2: 데이터 분석 (3일)
4. 기간별/부서별/상태별 통계 로직
5. 키워드 빈도 분석
6. 테스트 데이터로 검증

### Phase 3: 시각화 (3일)
7. `chart_generator.py` 구현
8. matplotlib 기반 차트 생성
9. 워드 클라우드 생성

### Phase 4: UI 통합 (3일)
10. `StatisticsDialog` 구현
11. Controller 메서드 추가
12. HistoryDialog 버튼 추가

### Phase 5: 보고서 생성 (2일)
13. Excel 보고서 생성
14. PDF 보고서 생성
15. 이메일 발송 (선택)

---

## ✅ 결론

### 영향도 요약
| 레이어 | 영향도 | 변경 유형 | 리스크 |
|--------|--------|-----------|--------|
| Database | 🟢 낮음 | 메서드 추가 | 낮음 |
| Service | 🟡 중간 | 신규 서비스 | 낮음 |
| Controller | 🟢 낮음 | 메서드 추가 | 낮음 |
| View | 🟡 중간 | 신규 UI | 중간 |
| Model | 🟢 낮음 | 신규 모델 | 낮음 |
| Utils | 🟢 낮음 | 신규 유틸리티 | 낮음 |

### 전체 평가
- **전체 영향도**: 🟡 중간
- **기존 기능 영향**: ✅ 없음 (독립적 기능)
- **구현 난이도**: 🟡 중간
- **예상 개발 기간**: 2주
- **권장 시기**: v2.5 (2026-03-31)

### 승인 권장 사항
✅ **승인 권장**  
- 기존 아키텍처와 충돌 없음
- 독립적인 모듈로 구현 가능
- 사용자 가치 높음 (통계 분석 자동화)
- 단계적 구현 가능 (Phase별 분리)

---

작성자: KH.Choi  
작성일: 2026-02-17  
버전: 1.0
