Hyungi Ahn 349ab60561 refactor: Phase 3.3 - 통합 인증/인가 미들웨어 시스템 구축
주요 변경사항:

1. middlewares/auth.js 신규 생성 (355 lines)
   * 4개 핵심 미들웨어 통합:
     - requireAuth: JWT 토큰 검증
     - requireRole(...roles): 특정 역할 체크
     - requireMinLevel(level): 계층적 권한 레벨 체크
     - requireOwnerOrAdmin(options): 소유자/관리자 체크

   * 커스텀 에러 클래스 적용:
     - AuthenticationError (401)
     - ForbiddenError (403)

   * 구조화된 로깅 시스템 통합
   * 레거시 호환성 별칭 제공:
     - verifyToken = requireAuth
     - requireAdmin = requireRole('admin', 'system')
     - requireSystem = requireRole('system')

   * ACCESS_LEVELS 상수 정의 및 export

2. 라우터 업데이트 (새로운 미들웨어 적용)
   * routes/workReportAnalysisRoutes.js
     - authMiddleware → auth로 변경
     - requireAdmin → requireRole('admin', 'system')

   * routes/systemRoutes.js
     - 커스텀 requireSystemAccess 제거
     - requireRole('system') 사용
     - 14줄 코드 감소 (298 → 284 lines)

   * routes/auth.js
     - utils/access의 requireAccess 제거
     - requireAuth + requireRole 조합 사용

3. 레거시 호환성 래퍼 (하위 호환성 유지)
   * middlewares/authMiddleware.js (89 → 37 lines, 58% 감소)
     - auth.js의 래퍼로 변경
     - @deprecated 태그 추가
     - 기존 22개 파일 호환성 유지

   * middlewares/accessMiddleware.js (33 → 30 lines)
     - requireMinLevel 래퍼로 변경
     - @deprecated 태그 및 마이그레이션 가이드 추가

   * utils/access.js
     - requireAccess 레거시 함수 추가 (하위 호환성)
     - 유틸리티 함수들은 그대로 유지

기술적 개선사항:
- 중복 코드 제거: 4개 파일에 분산된 인증 로직 통합
- 일관된 에러 처리: 커스텀 에러 클래스 사용
- 상세한 로깅: 인증/인가 실패 원인 추적 가능
- 보안 강화: TokenExpiredError, JsonWebTokenError 세분화 처리
- 확장성: 새로운 권한 체크 패턴 쉽게 추가 가능
- JSDoc 문서화: 모든 함수에 상세한 사용 예제 포함

통합 전후 비교:
- 미들웨어 파일: 4개 → 1개 (통합) + 3개 (래퍼)
- 중복 코드: ~150 lines → 0 lines
- 일관성: 4가지 다른 패턴 → 1가지 통합 패턴

레거시 호환성:
- 기존 22개 라우터 파일 중 19개는 수정 없이 동작
- 3개 라우터만 새로운 패턴으로 업데이트 (예시용)
- verifyToken, requireAdmin, requireSystem 별칭 제공

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:12:44 +09:00

TK-FB-Project - 통합 실행 가이드

⚙️ 사전 준비

환경 변수 설정 (필수)

처음 실행하기 전에 환경 변수 파일을 생성해야 합니다:

# 1. .env.example을 복사하여 .env 파일 생성
cp .env.example .env

# 2. .env 파일을 편집하여 실제 비밀번호로 변경
nano .env  # 또는 vi, code 등 사용

# 3. 강력한 비밀번호로 변경 (예시)
# MYSQL_ROOT_PASSWORD=your_secure_password_here
# MYSQL_PASSWORD=your_secure_password_here
# JWT_SECRET=your_random_jwt_secret_min_32_chars

중요: .env 파일은 절대 Git에 커밋하지 마세요!

🚀 한 번에 모든 서비스 실행

🎯 간편 실행 (권장)

cd /Users/hyungi/docker/TK-FB-Project
./start.sh

🛑 간편 중지

./stop.sh

📋 직접 실행

docker-compose up -d
docker-compose down

📊 서비스 목록

서비스 포트 접속 URL 설명
웹 UI 20000 http://localhost:20000 메인 웹 인터페이스
API 서버 20005 http://localhost:20005 Node.js API 서버
FastAPI 브릿지 20010 http://localhost:20010 Python FastAPI 서비스
phpMyAdmin 20080 http://localhost:20080 DB 관리도구
MariaDB 20306 - 데이터베이스 서버

🛠️ 관리 명령어

모든 서비스 중지

cd /Users/hyungi/docker/TK-FB-Project
docker-compose down

서비스 상태 확인

docker ps | grep fb_

로그 확인

docker-compose logs -f

💾 데이터베이스 정보

  • 호스트: localhost:20306
  • 데이터베이스: hyungi (.env 파일의 MYSQL_DATABASE)
  • 사용자: hyungi_user (.env 파일의 MYSQL_USER)
  • 비밀번호: .env 파일에서 설정한 MYSQL_PASSWORD
  • Root 비밀번호: .env 파일에서 설정한 MYSQL_ROOT_PASSWORD

참고: 실제 비밀번호는 .env 파일을 확인하세요.

주요 개선사항

  1. 통합 실행: 한 번의 명령으로 모든 서비스 실행
  2. 깔끔한 DB 초기화: 마이그레이션 오류 해결
  3. 일관된 네이밍: fb_ 접두사로 컨테이너 구분
  4. 안정적인 포트: 20000번대 포트 사용
Description
생산팀 포탈 페이지 제작 건
Readme 231 MiB
Languages
Python 81.2%
JavaScript 8.5%
HTML 7.1%
CSS 1.6%
Cython 0.8%
Other 0.7%