7.4 KiB
7.4 KiB
🔍 아키텍처 영향도 분석: 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 데이터 모델
필요한 변경:
- ✅ 신규 모델 추가:
StatisticsReportclass 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 기반 차트 생성
- 워드 클라우드 생성
- ✅ 기존 유틸리티 영향 없음
영향도: 🟢 낮음 (신규 유틸리티 추가만)
🔗 의존성 분석
신규 라이브러리 필요
# 데이터 분석
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주)
StatisticsService기본 구조 생성VOCDatabase집계 쿼리 추가StatisticsReport모델 정의
Phase 2: 데이터 분석 (3일)
- 기간별/부서별/상태별 통계 로직
- 키워드 빈도 분석
- 테스트 데이터로 검증
Phase 3: 시각화 (3일)
chart_generator.py구현- matplotlib 기반 차트 생성
- 워드 클라우드 생성
Phase 4: UI 통합 (3일)
StatisticsDialog구현- Controller 메서드 추가
- HistoryDialog 버튼 추가
Phase 5: 보고서 생성 (2일)
- Excel 보고서 생성
- PDF 보고서 생성
- 이메일 발송 (선택)
✅ 결론
영향도 요약
| 레이어 | 영향도 | 변경 유형 | 리스크 |
|---|---|---|---|
| Database | 🟢 낮음 | 메서드 추가 | 낮음 |
| Service | 🟡 중간 | 신규 서비스 | 낮음 |
| Controller | 🟢 낮음 | 메서드 추가 | 낮음 |
| View | 🟡 중간 | 신규 UI | 중간 |
| Model | 🟢 낮음 | 신규 모델 | 낮음 |
| Utils | 🟢 낮음 | 신규 유틸리티 | 낮음 |
전체 평가
- 전체 영향도: 🟡 중간
- 기존 기능 영향: ✅ 없음 (독립적 기능)
- 구현 난이도: 🟡 중간
- 예상 개발 기간: 2주
- 권장 시기: v2.5 (2026-03-31)
승인 권장 사항
✅ 승인 권장
- 기존 아키텍처와 충돌 없음
- 독립적인 모듈로 구현 가능
- 사용자 가치 높음 (통계 분석 자동화)
- 단계적 구현 가능 (Phase별 분리)
작성자: KH.Choi
작성일: 2026-02-17
버전: 1.0