VOC_Monitor/docs/architecture_impact_voc_sta...

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 데이터 모델

필요한 변경:

  • 신규 모델 추가: StatisticsReport
    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 기반 차트 생성
    • 워드 클라우드 생성
  • 기존 유틸리티 영향 없음

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


🔗 의존성 분석

신규 라이브러리 필요

# 데이터 분석
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일)

  1. 기간별/부서별/상태별 통계 로직
  2. 키워드 빈도 분석
  3. 테스트 데이터로 검증

Phase 3: 시각화 (3일)

  1. chart_generator.py 구현
  2. matplotlib 기반 차트 생성
  3. 워드 클라우드 생성

Phase 4: UI 통합 (3일)

  1. StatisticsDialog 구현
  2. Controller 메서드 추가
  3. HistoryDialog 버튼 추가

Phase 5: 보고서 생성 (2일)

  1. Excel 보고서 생성
  2. PDF 보고서 생성
  3. 이메일 발송 (선택)

결론

영향도 요약

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

전체 평가

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

승인 권장 사항

승인 권장

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

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