- 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 요청/응답 처리만 담당하도록 단순화