297 lines
7.4 KiB
Markdown
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
|