VOC_Monitor/docs/issue.md

11 KiB

🛠 Issue & Task Log

🔴 우선순위: 높음 (Current Sprint)

[완료] Controller 리팩토링 및 에러 처리 강화

  • 목표: Controller 730줄 → 350줄로 감소, Manager 패턴 적용, 에러 처리 체계 구축
  • 관련 파일:
    • app/controllers/controller.py (730줄 → 487줄)
    • app/controllers/scheduler_manager.py
    • app/controllers/notification_manager.py
    • app/controllers/report_manager.py (신규)
    • app/controllers/file_manager.py (신규)
    • app/controllers/ui_manager.py (신규)
    • app/core/exceptions.py
  • 완료 내역:
    • 에러 처리 체계 구축 (core/exceptions.py)
    • SchedulerManager 분리 (크롤링, DB 체크 로직)
    • NotificationManager 분리 (알림 로직)
    • ReportManager 신규 생성 (보고서 생성/인쇄/PDF)
    • FileManager 신규 생성 (첨부파일 처리)
    • UIManager 신규 생성 (UI 창 관리)
    • Controller에서 Manager 위임 패턴 적용
  • 완료일: 2026-02-18

[완료] 알람 시스템 개선

  • 목표: 미확인 글 알림, 중복 방지, 설정 영속화
  • 관련 파일:
    • app/controllers/scheduler_manager.py
    • app/utils/database.py
  • 완료 내역:
    • 키워드 기반 알림 필터링 제거 (모든 관심글 알림)
    • 미확인 글 주기적 알림 기능 추가 (30분마다 체크)
    • last_check_time 영속화 (scheduler_state.json 저장)
    • 중복 알림 방지 메커니즘 추가 (notified_post_ids 세트)
  • 완료일: 2026-02-18

[완료] 알림 주기 설정화 및 미확인 조건 토글

  • 목표: 신규/미확인 알림 주기를 설정에서 제어하고, 미확인 30분 경과 조건을 ON/OFF로 제어
  • 관련 파일:
    • app/view/dialogs/settings_dialog.py
    • app/controllers/scheduler_manager.py
    • app/controllers/controller.py
    • app/data/settings.json
  • 완료 내역:
    • 신규 알림 주기 설정 추가 (noti.db_check_interval_minutes, 기본 3분)
    • 미확인 알림 주기 설정 추가 (noti.unchecked_check_interval_minutes, 기본 10분)
    • 미확인 30분 경과 조건 토글 추가 (noti.unchecked_delay_enabled)
    • 관심 조건 알림 토글 추가 (noti.use_related_filter)
    • 설정 토글 설명용 ? 툴팁 추가 (관심 조건 토글, 30분 지연 토글)
    • 설정 역할 분리 정리: 알림 탭의 중복 키워드 UI 제거, 키워드/부서는 수집 설정으로 일원화
    • 설정 UI 입력 위젯 충돌 버그 수정 (entry_kw 분리)
    • 알림 팝업에 전체내역 보기 버튼 추가 (신규/미확인 공통), 다건 알림에서도 목록 즉시 열기 지원
    • 다건 미확인 알림 목록 표시 로직 동작 확인
    • 수집 키워드 기본값을 1호선 + 1호선 전체 역사로 반영, 관심 부서 기본값 차량 유지
  • 완료일: 2026-02-18

[진행중] 업데이터 모듈 단독 검증/안정화 🔄

  • 목표: 통합 전 updater 모듈 단독 실행 검증, 에러처리 강화, 테스트 코드 확보
  • 관련 파일:
    • app/updater/update_manager.py
    • app/updater/updater_gui.py
    • docs/updater_validation.md
  • 진행 내역:
    • Supabase 설정 누락 사전 검증
    • config.json 원자적 저장 적용
    • updater.exe 누락 시 명시적 실패 처리
    • 압축 해제/교체 경로 안정화 및 롤백 보강
    • updater 단위 테스트 작성 및 실행
      • 버전 비교
      • Supabase 설정 누락 예외
      • updater.exe 누락/권한 오류
      • 손상 zip 처리
      • 설치 실패 시 롤백 검증
    • 샘플 zip 수동 리허설 절차 문서화 (docs/updater_validation.md)
    • 연결정보 외부화: app/updater/config.json + settings.json(update) 기반 로드
    • m1tcloud 테스트 환경 실조회 검증 (program_id=voc_monitor, program_versions)
  • 상태: 완료

[진행중] 업데이터 메인 앱 통합 🔄

  • 목표: 단독 검증 완료된 updater를 컨트롤러/트레이와 연결
  • 관련 파일:
    • app/controllers/controller.py
    • app/view/tray_icon.py
  • 진행 내역:
    • 앱 시작 시 updater 백그라운드 체크 시작
    • 트레이 메뉴 업데이트 확인 추가
    • 업데이트 발견 시 사용자 승인 다이얼로그 연결
    • 승인 시 prepare_update/launch_updater 실행 후 앱 종료
    • 종료 시 updater 백그라운드/임시파일 정리
    • m1tcloud 실연결 확인 (voc_monitor, program_versions, 최신 버전 3.5.5 조회)
    • 오류 처리 강화 (설정 오류/네트워크 오류/updater.exe 누락 시 사용자 메시지+로그)
    • 테스트 모드 즉시 확인 옵션 추가 (--test --test-update-now)
    • 업데이트 안내 중복 팝업 방지 (표시중 락 + 동일 버전 60초 쿨다운)
    • 업데이터 단독 빌드 스크립트 추가 (app/update_build_setup.py)
    • 메인 패키징에 updater.exe/app/updater/config.json 포함 로직 반영
    • 실제 빌드 실행 및 산출물 검증
      • app/updater_build/dist/updater.exe
      • app/build/exe.win-amd64-3.11/updater.exe
  • 상태: 완료

🟡 우선순위: 보통 (In Progress / Pending)

[완료] CTkComboBox 열차번호 표시 문제 해결

  • 문제: 열차번호 조회 실패 시 드롭박스에 "CTkComboBox" 텍스트 표시
  • 해결:
    • ComboBox 기본값을 빈 문자열 ""로 설정
    • startswith("CTk") 체크로 위젯 이름 필터링
    • 열차번호 없을 시 파일명/조치사항에서 자동 제거
  • 관련 파일:
    • app/view/dialogs/report_option_dialog.py
    • app/services/report_service.py
  • 완료일: 2026-02-18

[완료] 설정 다이얼로그 Z-order 문제 해결

  • 문제: HistoryDialog에서 설정 버튼 클릭 시 SettingsDialog가 뒤로 표시
  • 해결:
    • SettingsDialog에 parent 파라미터 추가
    • transient(parent) 설정으로 Z-order 고정
    • lift() + focus_force()로 포커스 보장
  • 관련 파일:
    • app/controllers/ui_manager.py
    • app/view/dialogs/settings_dialog.py
  • 완료일: 2026-02-18

[완료] 통계분석 다이얼로그 자식 창 Z-order 문제 해결

  • 문제: StatisticsDialog에서 미리보기/보고서생성 버튼 클릭 시 자식 다이얼로그가 뒤로 표시
  • 해결:
    • 미리보기 창에 transient(self), lift(), focus_force() 추가
    • 프로그레스 다이얼로그에 lift(), focus_force() 추가
  • 관련 파일:
    • app/view/dialogs/statistics_dialog.py
  • 완료일: 2026-02-18

[대기] HWP 비고란 개선

  • 문제: 운행 정보 미조회 시 "운행정보 미조회" 텍스트 삽입
  • 해결 방안:
    • 부분 실패 시 비고란 비워두기
    • 또는 "정보 없음" 등 중립적 표현 사용
  • 관련 파일: app/services/report_service.py

[대기] 로그 뷰어 개선

  • 현재 상태: 설정 창에서 로그 확인 가능
  • 개선 사항:
    • 로그 레벨별 필터링 (INFO/WARNING/ERROR)
    • 검색 기능
    • 자동 스크롤

🟢 완료됨 (Resolved)

[2026-02-17] Controller 리팩토링 및 에러 처리 강화

  • 내용: Controller 601줄 → 3개 파일로 분리, 에러 처리 체계 구축
  • 분리 모듈:
    • controllers/controller.py: 핵심 흐름 제어 (~700줄, 주석 포함)
    • controllers/scheduler_manager.py: 스케줄링 로직 (~400줄)
    • controllers/notification_manager.py: 알림 로직 (~150줄)
  • 개선 효과:
    • 단일 책임 원칙 준수
    • 의존성 주입 방식 적용
    • 에러 처리 강화 (try-except, 사용자 친화적 메시지)
    • 코드 가독성 향상

[2026-02-17] 데이터 모델 강화 (Pydantic Validator)

  • 내용: VOCPost 모델에 데이터 유효성 검사 추가
  • 추가 Validator:
    • validate_id: ID 비어있지 않음 검증
    • validate_required_strings: 필수 문자열 필드 검증
    • validate_binary_int: 0 또는 1만 허용
    • validate_date_format: 날짜 형식 검증
    • validate_attachment: "없음" → None 정규화
  • 관련 파일: app/models/model.py

[2026-02-17] ReportService 리팩토링 (v2.0)

  • 내용: 1056줄 → 400줄 (62% 감소)
  • 분리 모듈:
    • utils/voc_parser.py: VOC 텍스트 파싱
    • utils/date_utils.py: 날짜 처리
    • utils/train_analyzer.py: 열차 정보 분석
  • 개선 효과:
    • 단일 책임 원칙 준수
    • 재사용성 향상
    • 테스트 용이성 증가

[2026-02-17] 기존 보고서 중복 체크 기능

  • 내용: 동일한 보고서 생성 시 사용자 선택 다이얼로그 표시
  • 옵션: 기존 파일 열기 / 새로 생성 / 취소
  • 관련 파일:
    • app/services/report_service.py
    • app/controllers/controller.py

[2026-02-17] 히스토리 다이얼로그 설정 버튼 추가

  • 내용: "⚙️ 설정" 버튼 추가로 빠른 접근 가능
  • 관련 파일: app/view/dialogs/history_dialog.py

[2026-02-14] 시각표 기반 열차 정보 유추

  • 내용: 역명, 시간 기반 열차번호 자동 추출
  • 관련 파일:
    • app/services/timetable_service.py
    • app/services/report_service.py

[2026-02-14] 주박지 입출고 로직 구현

  • 내용: 다대포 주박지 입출고 순서 매핑 및 익일 예측
  • 관련 파일: app/services/report_service.py

⚠️ 알려진 문제 (Known Bugs)

BUG-001: 열차번호 조회 실패 시 UI 오류 해결됨 (2026-02-18)

  • 현상: 드롭박스에 "CTK" 등 에러 객체 표시
  • 원인: 예외 처리 부재, 에러 객체가 UI로 전파
  • 해결: ComboBox 기본값 설정 및 CTk 문자열 필터링
  • 상태: 완료

BUG-002: 세션 만료 시 무한 재시도 해결됨 (2026-02-18)

  • 현상: 로그인 세션 만료 시 재로그인 무한 반복
  • 원인: 재로그인 실패 시 예외 처리 부재
  • 해결: max_retries, retry_delay 설정 추가 (settings.json)
  • 상태: 완료

🎉 최근 완료된 주요 개선사항 (2026-02-18)

크롤링 시스템 개선

  • 하드코딩 제거: scraper_service.pytarget_depts = ['차량', '검수'] 하드코딩 제거
  • 설정 연동: 모든 필터링 설정을 settings.json에서 동적 로드
  • 필터링 고도화:
    • AND/OR 모드 지원 (filter_mode 설정)
    • _check_filter_match() 메서드로 필터링 로직 중앙화
    • 키워드 및 부서 매칭 로직 개선
  • 예외처리 강화: max_retries, retry_delay 설정 추가
  • 관련 파일:
    • app/services/scraper_service.py
    • app/controllers/controller.py
    • app/data/settings.json

BUG-002: 세션 만료 시 무한 재시도

  • 현상: 로그인 세션 만료 시 재로그인 무한 반복
  • 원인: 재로그인 실패 시 예외 처리 부재
  • 영향도: 낮 (수동 재시작으로 해결)
  • 수정 계획: 재시도 횟수 제한 추가

📝 기술 부채 (Technical Debt)

DEBT-001: Pydantic 미적용 영역

  • 현재: Controller에서 dict 직접 전달
  • 목표: 모든 데이터 교환을 Pydantic 모델로 변환
  • 우선순위: 낮 (동작에는 문제 없음)

DEBT-002: 테스트 코드 부재

  • 현재: 수동 테스트만 진행
  • 목표: 주요 모듈 단위 테스트 작성
  • 우선순위: 중

작성자: KH.Choi 최종 수정: 2026-02-18