🔐 토큰 만료 시 자동 로그아웃 기능:
1. JWT 토큰 만료 시간 대폭 연장:
- 액세스 토큰: 24시간 → 7일
- 리프레시 토큰: 7일 → 30일
- 사용자 편의성 크게 향상
2. 토큰 만료 감지 및 처리:
- isTokenExpired() 함수 추가
- JWT 페이로드 파싱하여 exp 확인
- 현재 시간과 비교하여 만료 여부 판단
3. 자동 로그아웃 처리:
- API 호출 시 401 오류 감지
- 주기적 토큰 만료 확인 (5분마다)
- 만료 시 자동 인증 데이터 정리
- 사용자 알림 후 로그인 페이지 리다이렉트
4. 개선된 인증 데이터 관리:
- clearAuthData() 함수로 통합 관리
- token, user, userInfo, currentUser 모두 정리
- 메모리 누수 방지
🐛 데이터베이스 테이블명 수정:
1. projectModel.js:
- Projects → projects (대문자 → 소문자)
- 실제 DB 테이블명과 일치
2. taskModel.js:
- Tasks → tasks (대문자 → 소문자)
- 실제 DB 테이블명과 일치
3. API 오류 해결:
- '테이블이 존재하지 않습니다' 오류 수정
- projects, tasks API 정상 작동
✅ 사용자 경험 개선:
- 토큰 만료로 인한 예상치 못한 오류 방지
- 명확한 만료 알림 메시지
- 자동 로그아웃으로 보안 강화
- 더 긴 세션 유지로 편의성 향상
🔧 기술적 개선:
- JWT 페이로드 안전한 파싱
- 에러 핸들링 강화
- 주기적 백그라운드 확인
- 전역 함수로 재사용성 향상
🎯 결과:
- 안정적인 인증 시스템
- 사용자 친화적인 세션 관리
- 보안성과 편의성의 균형
- API 호출 오류 해결
테스트:
- 토큰 만료 후 자동 로그아웃 확인
- projects, tasks API 정상 작동 확인
- 통합 에러 처리 시스템 구축:
* utils/errorHandler.js: ApiError 클래스 및 에러 미들웨어
* 데이터베이스, 유효성 검사, 권한 에러 표준화
* 비동기 함수 래퍼 (asyncHandler) 추가
- 응답 포맷터 시스템 구축:
* utils/responseFormatter.js: 일관된 API 응답 형식
* 성공, 페이지네이션, 인증, 파일업로드 등 전용 포맷터
* Express 응답 확장 미들웨어
- 유효성 검사 시스템 구축:
* utils/validator.js: 스키마 기반 유효성 검사
* 필수 필드, 타입, 길이, 형식 검사 함수들
* 일반적인 스키마 정의 (사용자, 프로젝트, 작업보고서 등)
- 코드 정리 및 표준화:
* 삭제된 테이블 참조 제거 (work_report_audit_log 등)
* 대문자 테이블명을 소문자로 통일 (Users -> users)
* authController.js에 새로운 유틸리티 적용 예시
- 미들웨어 통합:
* index.js에 에러 핸들러 및 응답 포맷터 적용
* 헬스체크 엔드포인트 개선
- 삭제된 DB 테이블들과 관련 코드 정리:
* 12개 사용하지 않는 테이블 삭제 (activity_logs, CuttingPlan, DailyIssueReports 등)
* 관련 모델, 컨트롤러, 라우트 파일들 삭제
* index.js에서 삭제된 라우트들 제거
- 웹 UI 페이지 정리:
* 21개 사용하지 않는 페이지 삭제
* issue-reports 폴더 전체 삭제
* 모든 사용자 권한을 그룹장 대시보드로 통일
- 데이터베이스 스키마 정리:
* v1 스키마로 통일 (daily_work_reports 테이블)
* JSON 데이터 임포트 스크립트 구현
* 외래키 관계 정리 및 데이터 일관성 확보
- 통합 Docker Compose 설정:
* 모든 서비스를 단일 docker-compose.yml로 통합
* 20000번대 포트 유지
* JWT 시크릿 및 환경변수 설정
- 문서화:
* DATABASE_SCHEMA.md: 현재 DB 스키마 문서화
* DELETED_TABLES.md: 삭제된 테이블 목록
* DELETED_PAGES.md: 삭제된 페이지 목록
- dailyWorkReportController의 생성 로직을 Service와 Model로 분리
- Service: 데이터 유효성 검사 등 비즈니스 로직 담당
- Model: 트랜잭션을 사용한 DB 쿼리 담당
- Controller: HTTP 요청/응답 처리만 담당하도록 단순화