📋 Weekly Report System
SI 프로젝트 팀을 위한 주간업무보고 작성 및 취합 시스템입니다.
✨ 주요 기능
📝 주간보고 작성
- 프로젝트별 금주 실적 / 차주 계획 작성
- Task 단위로 작업 내용, 시간, 완료 여부 관리
- 이슈/리스크, 휴가일정, 기타사항 입력
- 작성 → 제출 → 취합 워크플로우
- 이전 주 계획 → 이번 주 실적 자동 불러오기
- 미래 주차 작성 차단 (URL 직접 접근 방지)
🤖 AI 기능
- AI 자동채우기: 텍스트/이미지 → 프로젝트별 실적/계획 자동 분류
- 드래그앤드롭, 파일선택, Ctrl+V 붙여넣기 지원
- OpenAI GPT-4o 기반 프로젝트 자동 매칭
- PMO AI 리뷰: 주간보고 품질 평가 (3단계 등급: 우수/적합/미흡)
- 관리자 일괄등록: 여러 직원의 주간보고 일괄 파싱 및 등록
📊 취합 보고서
- 주차별 전체 보고서 취합
- 프로젝트별 실적/계획 AI 요약 (OpenAI)
- 인원별 투입 시간 현황
- 원문 보기 기능
🔐 인증 시스템
- DB 기반 세션 관리 (Spring Session JDBC 방식)
- 세션 타임아웃: 10분 (Sliding Expiration)
- 로그인 이력 관리 (IP, 접속시간, 세션상태)
- 세션 상태: 접속중 / 활성 / 세션만료 / 로그아웃
👥 직원/프로젝트 관리
- 직원 등록 및 관리
- 프로젝트 생성 및 상태 관리
- 프로젝트별 투입 인력 현황
🛠 기술 스택
| 구분 |
기술 |
| Frontend |
Vue 3, Nuxt 3 |
| Backend |
Nitro (Nuxt Server) |
| Database |
PostgreSQL |
| AI |
OpenAI GPT-4o / GPT-4o-mini |
| UI |
Bootstrap 5, Bootstrap Icons |
| Session |
DB 기반 세션 (wr_session 테이블) |
📁 프로젝트 구조
🗄 데이터베이스 스키마
주요 테이블
| 테이블명 |
설명 |
wr_employee_info |
직원 정보 |
wr_project_info |
프로젝트 정보 |
wr_weekly_report |
주간보고 마스터 |
wr_weekly_report_task |
주간보고 Task (실적/계획) |
wr_aggregated_report_summary |
취합 보고서 |
wr_session |
DB 세션 (인증) |
wr_login_history |
로그인 이력 |
세션 테이블 (wr_session)
🔗 메뉴 구조
| 메뉴 |
경로 |
설명 |
권한 |
| 로그인 |
/login |
로그인 페이지 |
전체 |
| 대시보드 |
/ |
대시보드 |
로그인 |
| 주간보고 |
|
|
|
| ├ 목록 |
/report/weekly |
주간보고 목록 |
로그인 |
| ├ 작성 |
/report/weekly/write |
주간보고 작성 |
로그인 |
| └ 상세/수정 |
/report/weekly/[id] |
주간보고 상세보기/수정 |
로그인 |
| 취합보고서 |
/report/summary |
취합 보고서 |
로그인 |
| 관리자 |
|
|
관리자 |
| ├ 일괄등록 |
/admin/bulk-import |
AI 기반 일괄 등록 |
관리자 |
| ├ 직원관리 |
/employee |
직원 관리 |
관리자 |
| └ 프로젝트관리 |
/project |
프로젝트 관리 |
관리자 |
| 마이페이지 |
/mypage |
내 정보, 로그인 이력 |
로그인 |
| 피드백 |
/feedback |
개선의견 |
로그인 |
🚀 설치 및 실행
요구사항
- Node.js 18+
- PostgreSQL 14+
- OpenAI API Key
환경 변수 (.env)
설치
개발 서버 실행
프로덕션 빌드
Docker 빌드
📡 주요 API
인증
| Method |
Endpoint |
설명 |
| POST |
/api/auth/login |
이메일+이름 로그인 |
| POST |
/api/auth/select-user |
최근 사용자 선택 로그인 |
| POST |
/api/auth/logout |
로그아웃 |
| GET |
/api/auth/current-user |
현재 사용자 (세션 갱신) |
| GET |
/api/auth/me |
사용자 상세 정보 |
| GET |
/api/auth/login-history |
로그인 이력 |
AI
| Method |
Endpoint |
설명 |
| POST |
/api/ai/parse-my-report |
텍스트 → 주간보고 파싱 |
| POST |
/api/ai/parse-my-report-image |
이미지 → 주간보고 파싱 |
| POST |
/api/admin/parse-report |
관리자 일괄 텍스트 파싱 |
| POST |
/api/admin/parse-image |
관리자 일괄 이미지 파싱 |
| POST |
/api/admin/bulk-register |
일괄 등록 |
주간보고
| Method |
Endpoint |
설명 |
| GET |
/api/report/weekly/list |
주간보고 목록 |
| POST |
/api/report/weekly/create |
주간보고 생성 |
| PUT |
/api/report/weekly/[id]/update |
주간보고 수정 |
| POST |
/api/report/weekly/[id]/submit |
주간보고 제출 |
| DELETE |
/api/report/weekly/[id]/delete |
주간보고 삭제 |
| POST |
/api/report/review |
PMO AI 리뷰 요청 |
🤝 Claude 협업 가이드
이 프로젝트는 Claude AI와 협업하여 개발됩니다. 다음 사항을 숙지해주세요.
⚠️ 필수 준수사항
1. Git 커밋 규칙
2. 임시 파일 관리
3. 함수명 충돌 주의
Nuxt/h3 프레임워크에서 자동 import하는 함수명 주의:
getSession → getDbSession
getQuery → 그대로 사용 (h3 것 사용)
getCookie → 그대로 사용 (h3 것 사용)
4. 한글 커밋 메시지
📋 개발 컨벤션
API 응답 형식
인증 처리
날짜/주차 계산
🔧 자주 발생하는 이슈
| 이슈 |
원인 |
해결 |
npm ci 실패 |
package-lock.json 불일치 |
npm install 후 lock 파일 커밋 |
| 세션 만료 안됨 |
expires_at 비교 누락 |
expires_at > NOW() 조건 확인 |
| 미래 주차 접근 |
URL 직접 입력 |
onMounted에서 주차 검증 |
| 함수명 충돌 경고 |
h3 auto-import |
함수명 변경 (접두어 추가) |
📂 주요 파일 위치
| 기능 |
파일 |
| 세션 관리 |
backend/utils/session.ts |
| DB 연결 |
backend/utils/db.ts |
| 주차 계산 |
frontend/composables/useWeekCalc.ts |
| 인증 상태 |
frontend/composables/useAuth.ts |
| 헤더 컴포넌트 |
frontend/components/AppHeader.vue |
📄 라이선스
Private - 터보소프트 내부용
© 2026 TurboSoft