11 KiB
11 KiB
🛠 Issue & Task Log
🔴 우선순위: 높음 (Current Sprint)
[완료] Controller 리팩토링 및 에러 처리 강화 ✅
- 목표: Controller 730줄 → 350줄로 감소, Manager 패턴 적용, 에러 처리 체계 구축
- 관련 파일:
app/controllers/controller.py(730줄 → 487줄)app/controllers/scheduler_manager.pyapp/controllers/notification_manager.pyapp/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.pyapp/utils/database.py
- 완료 내역:
- 키워드 기반 알림 필터링 제거 (모든 관심글 알림)
- 미확인 글 주기적 알림 기능 추가 (30분마다 체크)
- last_check_time 영속화 (scheduler_state.json 저장)
- 중복 알림 방지 메커니즘 추가 (notified_post_ids 세트)
- 완료일: 2026-02-18
[완료] 알림 주기 설정화 및 미확인 조건 토글 ✅
- 목표: 신규/미확인 알림 주기를 설정에서 제어하고, 미확인 30분 경과 조건을 ON/OFF로 제어
- 관련 파일:
app/view/dialogs/settings_dialog.pyapp/controllers/scheduler_manager.pyapp/controllers/controller.pyapp/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.pyapp/updater/updater_gui.pydocs/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.pyapp/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.exeapp/build/exe.win-amd64-3.11/updater.exe
- 상태: 완료
🟡 우선순위: 보통 (In Progress / Pending)
[완료] CTkComboBox 열차번호 표시 문제 해결 ✅
- 문제: 열차번호 조회 실패 시 드롭박스에 "CTkComboBox" 텍스트 표시
- 해결:
- ComboBox 기본값을 빈 문자열
""로 설정 startswith("CTk")체크로 위젯 이름 필터링- 열차번호 없을 시 파일명/조치사항에서 자동 제거
- ComboBox 기본값을 빈 문자열
- 관련 파일:
app/view/dialogs/report_option_dialog.pyapp/services/report_service.py
- 완료일: 2026-02-18
[완료] 설정 다이얼로그 Z-order 문제 해결 ✅
- 문제: HistoryDialog에서 설정 버튼 클릭 시 SettingsDialog가 뒤로 표시
- 해결:
- SettingsDialog에 parent 파라미터 추가
transient(parent)설정으로 Z-order 고정lift()+focus_force()로 포커스 보장
- 관련 파일:
app/controllers/ui_manager.pyapp/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.pyapp/controllers/controller.py
[2026-02-17] 히스토리 다이얼로그 설정 버튼 추가
- 내용: "⚙️ 설정" 버튼 추가로 빠른 접근 가능
- 관련 파일:
app/view/dialogs/history_dialog.py
[2026-02-14] 시각표 기반 열차 정보 유추
- 내용: 역명, 시간 기반 열차번호 자동 추출
- 관련 파일:
app/services/timetable_service.pyapp/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.py의target_depts = ['차량', '검수']하드코딩 제거 - 설정 연동: 모든 필터링 설정을
settings.json에서 동적 로드 - 필터링 고도화:
- AND/OR 모드 지원 (
filter_mode설정) _check_filter_match()메서드로 필터링 로직 중앙화- 키워드 및 부서 매칭 로직 개선
- AND/OR 모드 지원 (
- 예외처리 강화:
max_retries,retry_delay설정 추가 - 관련 파일:
app/services/scraper_service.pyapp/controllers/controller.pyapp/data/settings.json
BUG-002: 세션 만료 시 무한 재시도
- 현상: 로그인 세션 만료 시 재로그인 무한 반복
- 원인: 재로그인 실패 시 예외 처리 부재
- 영향도: 낮 (수동 재시작으로 해결)
- 수정 계획: 재시도 횟수 제한 추가
📝 기술 부채 (Technical Debt)
DEBT-001: Pydantic 미적용 영역
- 현재: Controller에서 dict 직접 전달
- 목표: 모든 데이터 교환을 Pydantic 모델로 변환
- 우선순위: 낮 (동작에는 문제 없음)
DEBT-002: 테스트 코드 부재
- 현재: 수동 테스트만 진행
- 목표: 주요 모듈 단위 테스트 작성
- 우선순위: 중
작성자: KH.Choi 최종 수정: 2026-02-18