- 순찰/점검 기능 개선 (zone-detail 페이지 추가)
- 출근/근태 시스템 개선 (연차 조회, 근무현황)
- 작업분석 대분류 그룹화 및 마이그레이션 스크립트
- 모바일 네비게이션 UI 추가
- NAS 배포 도구 및 문서 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## 백엔드 보안 수정
- 하드코딩된 비밀번호 및 JWT 시크릿 폴백 제거
- SQL Injection 방지를 위한 화이트리스트 검증 추가
- 인증 미적용 API 라우트에 requireAuth 미들웨어 적용
- CSRF 보호 미들웨어 구현 (csrf.js)
- 파일 업로드 보안 유틸리티 추가 (fileUploadSecurity.js)
- 비밀번호 정책 검증 유틸리티 추가 (passwordValidator.js)
## 프론트엔드 XSS 방지
- api-base.js에 전역 escapeHtml() 함수 추가
- 17개 주요 JS 파일에 escapeHtml 적용:
- tbm.js, daily-patrol.js, daily-work-report.js
- task-management.js, workplace-status.js
- equipment-detail.js, equipment-management.js
- issue-detail.js, issue-report.js
- vacation-common.js, worker-management.js
- safety-report-list.js, nonconformity-list.js
- project-management.js, workplace-management.js
## 정리
- 백업 폴더 및 빈 파일 삭제
- SECURITY_GUIDE.md 문서 추가
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- workers API 기본 limit 10 → 100 변경 (작업자 누락 문제 해결)
- 작업자 필터 조건 수정 (status='active' + employment_status 체크)
- 근태 기록 저장 시 컬럼명 불일치 수정 (attendance_type_id)
- 근무현황 페이지에 저장 상태 표시 추가 (✓저장됨)
- 디버그 로그 제거
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 설비 마커 클릭 시 슬라이드 패널로 상세 정보 표시
- 설비 사진 업로드/삭제 기능
- 설비 임시 이동 기능 (3단계 지도 기반 선택)
- Step 1: 공장 선택
- Step 2: 레이아웃 지도에서 작업장 선택
- Step 3: 상세 지도에서 위치 선택
- 설비 외부 반출/반입 기능
- 설비 수리 신청 기능 (기존 신고 시스템 연동)
- DB 마이그레이션 추가 (사진, 임시이동, 외부반출 테이블)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 일일순회점검 시스템 신규 구현
- DB 테이블: patrol_checklist_items, daily_patrol_sessions, patrol_check_records, workplace_items, item_types
- API: /api/patrol/* 엔드포인트
- 프론트엔드: 지도 기반 작업장 점검 UI
- 설비 관리 기능 개선
- 구매 관련 필드 추가 (구매일, 가격, 공급업체 등)
- 설비 코드 자동 생성 (TKP-XXX 형식)
- 작업장 관리 개선
- 레이아웃 이미지 업로드 기능
- 마커 위치 저장 기능
- 부서 관리 기능 추가
- 사이드바 네비게이션 카테고리 재구성
- 이미지 401 오류 수정 (정적 파일 경로 처리)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 부적합 API 호출 형식 수정 (카테고리/아이템 추가 시)
- 부적합 저장 시 내부 플래그 제거 후 백엔드 전송
- 기본 부적합 객체 구조 수정 (category_id, item_id 추가)
- 날씨 API 시간대 수정 (UTC → KST 변환)
- 신고 카테고리 관리 페이지 추가 (/pages/admin/issue-categories.html)
- 부적합 입력 UI 개선 (대분류→소분류 캐스케이딩 선택)
- 저장된 부적합 분리 표시 및 수정/삭제 기능
- 디버깅 로그 추가
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 페이지 폴더 재구성: safety/, attendance/ 폴더 신규 생성
- work/ → safety/: 이슈 신고, 출입 신청 관련 페이지 이동
- common/ → attendance/: 근태/휴가 관련 페이지 이동
- admin/ 정리: safety-* 파일들을 safety/로 이동
- 사이드바 네비게이션 메뉴 구현
- 카테고리별 메뉴: 작업관리, 안전관리, 근태관리, 시스템관리
- 접기/펼치기 기능 및 상태 저장
- 관리자 전용 메뉴 자동 표시/숨김
- 날씨 API 연동 (기상청 단기예보)
- TBM 및 navbar에 현재 날씨 표시
- weatherService.js 추가
- 안전 체크리스트 확장
- 기본/날씨별/작업별 체크 유형 추가
- checklist-manage.html 페이지 추가
- 이슈 신고 시스템 구현
- workIssueController, workIssueModel, workIssueRoutes 추가
- DB 마이그레이션 파일 추가 (실행 대기)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 실시간 작업장 현황을 지도로 시각화
- 작업장 관리 페이지에서 정의한 구역 정보 활용
- TBM 작업자 및 방문자 현황 표시
주요 변경사항:
- dashboard.html: 작업장 현황 섹션 추가 (기존 작업 현황 테이블 제거)
- workplace-status.js: 지도 렌더링 및 데이터 통합 로직 구현
- modern-dashboard.js: 삭제된 DOM 요소 조건부 체크 추가
시각화 방식:
- 인원 없음: 회색 테두리 + 작업장 이름
- 내부 작업자: 파란색 영역 + 인원 수
- 외부 방문자: 보라색 영역 + 인원 수
- 둘 다: 초록색 영역 + 총 인원 수
기술 구현:
- Canvas API 기반 사각형 영역 렌더링
- map-regions API를 통한 데이터 일관성 보장
- 클릭 이벤트로 상세 정보 모달 표시
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- fix: 로그인 API에서 user.role_name 필드 올바르게 사용 (auth.service.js)
- refactor: navbar 컴포넌트를 최신 dashboard-header 스타일로 전환
- refactor: 구버전 work-report-header 제거 (6개 페이지)
- refactor: load-navbar.js를 최신 헤더 구조에 맞게 업데이트
- style: 파란색 그라데이션 헤더, 실시간 시계, 향상된 프로필 메뉴
- docs: 2026-01-20 개발 로그 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Backend: Auto-sync work reports with attendance records
- Backend: Lazy initialization of daily active worker records
- Frontend: Real-time attendance status on Group Leader Dashboard
- Replaced SELECT* queries in 8 models with explicit columns.
- Began modularizing work-report-calendar.js by creating CalendarAPI.js, CalendarState.js, and CalendarView.js.
- Refactored manage-project.js to use global API helpers.
- Fixed API container crash by adding missing volume mounts to docker-compose.yml.
- Added new migration for missing columns in the projects table.
- Documented current DB schema and deployment notes.
주요 변경사항:
1. services/analysisService.js 개선 (48 → 82 lines, 71% 증가)
* console.error → logger 교체:
- logger.info: 요청/성공 로깅
- logger.error: 실패 로깅
* Error → 커스텀 에러 클래스 적용:
- ValidationError: 필수 필드 검증
- DatabaseError: DB 오류
* 상세한 로깅 추가:
- 총 근무시간, 프로젝트 수, 작업자 수, 상세 건수 추적
* JSDoc 문서화 개선
2. controllers/analysisController.js 개선 (22 → 30 lines)
* try-catch 제거 → asyncHandler 사용
* console.error 제거
* 표준화된 JSON 응답 형식
3. services/workReportService.js 신규 생성 (308 lines)
* 7개 서비스 함수 구현:
- createWorkReportService: 단일/다중 보고서 생성
- getWorkReportsByDateService: 날짜별 조회
- getWorkReportsInRangeService: 기간별 조회
- getWorkReportByIdService: 단일 조회
- updateWorkReportService: 수정
- removeWorkReportService: 삭제
- getSummaryService: 월간 요약
* 커스텀 에러 클래스 적용
* 구조화된 로깅 통합
* 필수 필드 검증
* 배열/단일 데이터 모두 지원
4. controllers/workReportController.js 완전 재작성 (134 → 109 lines, 19% 감소)
* try-catch 제거 → asyncHandler 사용
* 모든 비즈니스 로직 서비스 레이어로 이동
* 표준화된 JSON 응답 형식
* 에러 처리 자동화
* 7개 엔드포인트 모두 개선
기술적 개선사항:
- 일관된 에러 처리: ValidationError, NotFoundError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 가능
- 코드 중복 제거: try-catch 패턴 완전 제거
- 테스트 용이성: 서비스 함수 독립적 테스트 가능
- 유지보수성: 비즈니스 로직과 HTTP 레이어 완전 분리
서비스 레이어 진행 상황:
- ✅ dailyWorkReportService.js (Phase 3.1)
- ✅ attendanceService.js (Phase 3.2)
- ✅ issueTypeService.js (Phase 3.4)
- ✅ toolsService.js (Phase 3.4)
- ✅ dailyIssueReportService.js (Phase 3.5 - 개선)
- ✅ uploadService.js (Phase 3.5)
- ✅ analysisService.js (Phase 3.6 - 개선)
- ✅ workReportService.js (Phase 3.6)
- ✅ auth.service.js (기존)
총 9개 서비스 레이어 구축 완료
컨트롤러 개선 현황:
- ✅ 14/16 개 컨트롤러 개선 완료 (87.5%)
남은 컨트롤러:
- workReportAnalysisController
- workAnalysisController
- monthlyStatusController
- systemController
- authController
- userController (일부)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
1. services/dailyIssueReportService.js 개선 (93 → 170 lines, 83% 증가)
* console.error → logger 교체:
- logger.info: 작업 시작/성공 로깅
- logger.error: 실패 로깅
- logger.warn: 경고 로깅
* Error → 커스텀 에러 클래스 적용:
- ValidationError: 필수 필드 검증 실패
- NotFoundError: 리소스 없음
- DatabaseError: DB 오류
* 상세한 JSDoc 문서화:
- 모든 파라미터 타입 및 설명 추가
- 함수 목적 및 동작 명시
* 구조화된 로깅:
- 모든 요청에 컨텍스트 정보 포함
- 성공/실패 추적 가능
2. controllers/dailyIssueReportController.js 개선 (58 → 65 lines)
* try-catch 제거 → asyncHandler 사용
* console.error 제거
* 에러 처리 자동화
* 표준화된 JSON 응답 형식
3. services/uploadService.js 신규 생성 (96 lines)
* 2개 서비스 함수 구현:
- createUploadService: 문서 업로드 생성
- getAllUploadsService: 전체 문서 조회
* 커스텀 에러 클래스 적용
* 구조화된 로깅 통합
* 필수 필드 검증 (original_name, stored_name, file_path)
* 파일 메타데이터 로깅
4. controllers/uploadController.js 완전 재작성 (26 → 39 lines)
* try-catch 제거 → asyncHandler 사용
* 모든 비즈니스 로직 서비스 레이어로 이동
* 표준화된 JSON 응답 형식
* 에러 처리 자동화
기술적 개선사항:
- 일관된 에러 처리: ValidationError, NotFoundError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 및 디버깅 용이
- 코드 중복 제거: try-catch 패턴 제거
- 테스트 용이성: 서비스 함수 독립적 테스트 가능
- 유지보수성: 비즈니스 로직과 HTTP 레이어 분리
서비스 레이어 진행 상황:
- ✅ dailyWorkReportService.js (Phase 3.1)
- ✅ attendanceService.js (Phase 3.2)
- ✅ issueTypeService.js (Phase 3.4)
- ✅ toolsService.js (Phase 3.4)
- ✅ dailyIssueReportService.js (Phase 3.5 - 개선)
- ✅ uploadService.js (Phase 3.5 - 신규)
전체 진행률:
- 컨트롤러: 16개 중 12개 개선 완료 (75%)
- 서비스 레이어: 6개 생성/개선 완료
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
1. services/issueTypeService.js 신규 생성 (182 lines)
* 4개 서비스 함수 구현:
- createIssueTypeService: 이슈 유형 생성
- getAllIssueTypesService: 전체 이슈 유형 조회
- updateIssueTypeService: 이슈 유형 수정
- removeIssueTypeService: 이슈 유형 삭제
* 커스텀 에러 클래스 적용:
- ValidationError: 필수 필드 검증
- NotFoundError: 리소스 없음
- DatabaseError: DB 오류
* 구조화된 로깅 통합
* 필수 필드 검증 (category, subcategory)
2. controllers/issueTypeController.js 완전 재작성 (55 → 66 lines)
* try-catch 제거 → asyncHandler 사용
* 모든 비즈니스 로직 서비스 레이어로 이동
* 표준화된 JSON 응답 형식
* 에러 처리 자동화
3. services/toolsService.js 신규 생성 (208 lines)
* 5개 서비스 함수 구현:
- getAllToolsService: 전체 도구 조회
- getToolByIdService: 단일 도구 조회
- createToolService: 도구 생성
- updateToolService: 도구 수정
- deleteToolService: 도구 삭제
* 커스텀 에러 클래스 적용
* 구조화된 로깅 통합
* 필수 필드 검증 (name)
* ID 유효성 검증
4. controllers/toolsController.js 완전 재작성 (76 → 76 lines)
* try-catch 제거 → asyncHandler 사용
* 모든 비즈니스 로직 서비스 레이어로 이동
* 표준화된 JSON 응답 형식
* 에러 처리 자동화
기술적 개선사항:
- 서비스 레이어 패턴 적용: 비즈니스 로직 분리
- 일관된 에러 처리: ValidationError, NotFoundError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 가능
- 코드 중복 제거: try-catch 패턴 제거
- 테스트 용이성: 서비스 함수 독립적 테스트 가능
- JSDoc 문서화: 모든 함수에 상세 설명 추가
컨트롤러 코드 감소:
- issueTypeController: 55 → 66 lines (문서화 포함, 로직은 단순화)
- toolsController: 76 → 76 lines (코드 품질 향상)
서비스 레이어 진행 상황:
- ✅ dailyWorkReportService.js (Phase 3.1)
- ✅ attendanceService.js (Phase 3.2)
- ✅ issueTypeService.js (Phase 3.4)
- ✅ toolsService.js (Phase 3.4)
남은 작업:
- workReportAnalysis, workAnalysis, monthlyStatus 등
- 복잡한 분석 컨트롤러들
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
주요 변경사항:
- services/attendanceService.js 신규 생성 (269 lines)
* 9개 서비스 함수로 비즈니스 로직 분리
* 커스텀 에러 클래스 적용 (ValidationError, DatabaseError)
* 구조화된 로깅 시스템 통합
- controllers/attendanceController.js 완전 재작성 (306 → 168 lines, 45% 감소)
* 클래스 기반에서 함수 기반 export로 변경
* 모든 비즈니스 로직을 서비스 레이어로 이동
* asyncHandler 미들웨어로 에러 처리 자동화
- controllers/workerController.js 개선
* 커스텀 에러 클래스 적용
* console.log → logger 교체
* 캐시 무효화 로직 유지
- controllers/projectController.js 완전 재작성 (117 → 163 lines)
* 모든 함수에 새로운 에러 클래스 적용
* 구조화된 로깅 추가
* 표준화된 JSON 응답 형식
기술 스택:
- Custom Error Classes: ValidationError, NotFoundError, DatabaseError
- Structured Logging: logger.info/error/warn/debug with context
- asyncHandler: Automatic async error handling
- Service Layer Pattern: Business logic separation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
작업 보고서 서비스와 컨트롤러를 새로운 에러 핸들링 및
로깅 시스템으로 업그레이드하여 코드 품질 및 유지보수성 향상
주요 변경사항:
services/dailyWorkReportService.js:
- 새로운 커스텀 에러 클래스 적용
* ValidationError: 유효성 검증 실패
* NotFoundError: 리소스를 찾을 수 없음
* DatabaseError: 데이터베이스 오류
- console.log → logger 유틸리티로 전환
* 구조화된 로깅 (context 포함)
* 로그 레벨 분리 (info, warn, error)
* 파일 로깅 지원
- 상세한 에러 컨텍스트 제공
* 필수 필드, 받은 값, 유효 범위 등
* 디버깅 및 문제 해결 용이성 향상
controllers/dailyWorkReportController.js:
- 새로운 에러 클래스 import
- asyncHandler 미들웨어 통일
- createDailyWorkReport 함수 간소화
* try-catch 제거 (asyncHandler가 처리)
* 표준 JSON 응답 포맷 사용
개선 효과:
- 에러 메시지 명확성 향상
- 로그 분석 및 모니터링 용이
- 일관된 에러 처리 패턴
- 테스트 가능성 향상
- 프로덕션 환경 파일 로깅 지원
파일 통계:
- 2개 파일 수정
- +115 -65 (net +50 lines)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
✨ 새로운 기능:
- 작업 분석 페이지 구현 (기간별, 프로젝트별, 작업자별, 오류별)
- 개별 분석 실행 버튼으로 API 부하 최적화
- 연차/휴무 집계 방식 개선 (주말 제외, 작업내용 통합)
- 프로젝트 관리 시스템 (활성화/비활성화)
- 작업자 관리 시스템 (CRUD 기능)
- 코드 관리 시스템 (작업유형, 작업상태, 오류유형)
🎨 UI/UX 개선:
- 기간별 작업 현황을 테이블 형태로 변경
- 작업자별 rowspan 그룹화로 가독성 향상
- 연차/휴무 프로젝트 하단 배치 및 시각적 구분
- 기간 확정 시스템으로 사용자 경험 개선
- 반응형 디자인 적용
🔧 기술적 개선:
- Rate Limiting 제거 (내부 시스템 최적화)
- 주말 연차/휴무 자동 제외 로직
- 작업공수 계산 정확도 향상
- 데이터베이스 마이그레이션 추가
- API 엔드포인트 확장 및 최적화
🐛 버그 수정:
- projectSelect 요소 참조 오류 해결
- 차트 높이 무한 증가 문제 해결
- 날짜 표시 형식 단순화
- 작업보고서 저장 validation 오류 수정
- 월별 캘린더 UI로 작업 현황을 한눈에 확인 가능
- 미입력(빨강), 부분입력(주황), 확인필요(보라), 이상없음(초록) 상태 표시
- 범례 아이콘(●)을 사용한 직관적인 상태 표시
- 날짜 클릭 시 해당일 작업자별 상세 현황 모달
- 작업자 클릭 시 개별 작업 입력/수정 모달
- 휴가 처리 기능 (연차, 반차, 반반차, 조퇴)
- 월별 집계 데이터 최적화로 API 호출 최소화
백엔드:
- monthly_worker_status, monthly_summary 테이블 추가
- 자동 집계 stored procedure 및 trigger 구현
- 확인필요(12시간 초과) 상태 감지 로직
- 출석 관리 시스템 확장
프론트엔드:
- 캘린더 그리드 UI 구현
- 상태별 색상 및 아이콘 표시
- 모달 기반 상세 정보 표시
- 반응형 디자인 적용
- 시스템 관리자 전용 웹페이지 구현 (system.html)
- 깔끔한 흰색 배경의 올드스쿨 스타일 적용
- 반응형 그리드 레이아웃으로 카드 배치 개선
- ES6 모듈 방식으로 JavaScript 구조 개선
- 이벤트 리스너 방식으로 버튼 클릭 처리 변경
- 시스템 상태, 사용자 통계, 계정 관리 기능 구현
- 시스템 로그 조회 기능 추가
- 나머지 관리 기능들 스켈레톤 구현 (개발 중 상태)
- 인코딩 문제 해결을 위한 영어 로그 메시지 적용
- hyungi 계정을 system 권한으로 설정
- JWT 토큰에 role 필드 추가
- 시스템 전용 API 엔드포인트 구현
주요 변경사항:
- web-ui/pages/dashboard/system.html: 시스템 관리자 전용 페이지
- web-ui/css/system-dashboard.css: 시스템 대시보드 전용 스타일
- web-ui/js/system-dashboard.js: 시스템 대시보드 로직
- api.hyungi.net/controllers/systemController.js: 시스템 API 컨트롤러
- api.hyungi.net/routes/systemRoutes.js: 시스템 API 라우트
- api.hyungi.net/controllers/authController.js: 시스템 권한 로그인 처리
- api.hyungi.net/services/auth.service.js: JWT 토큰에 role 필드 추가
- dailyWorkReportController의 생성 로직을 Service와 Model로 분리
- Service: 데이터 유효성 검사 등 비즈니스 로직 담당
- Model: 트랜잭션을 사용한 DB 쿼리 담당
- Controller: HTTP 요청/응답 처리만 담당하도록 단순화