VOC_Monitor/docs/architecture_impact_voc_sta...

297 lines
7.4 KiB
Markdown

# 🔍 아키텍처 영향도 분석: 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