# 사업-프로젝트 계층 구조 작업계획서 > 작성일: 2026-01-10 > 예상 기간: 3~5일 > 우선순위: 2 --- ## 1. 기능 개요 ### 1.1 핵심 컨셉 - 프로젝트 상위에 **사업(Business)** 개념 추가 - 사업 단위로 주간보고 취합 - 개발자 주간보고는 기존과 동일, 취합 시 사업 단위로 묶음 ### 1.2 계층 구조 ``` 사업 (Business) └─ 프로젝트 A └─ 프로젝트 B └─ 프로젝트 C (사업 미지정) └─ 프로젝트 D └─ 프로젝트 E ``` ### 1.3 결정 사항 | # | 항목 | 결정 | |:-:|------|:----:| | 1 | 프로젝트-사업 관계 | **선택 (NULL 허용)** | | 2 | 기존 프로젝트 처리 | **그대로 유지, 필요 시 배정** | | 3 | 취합보고 단위 | **사업별 1개 보고서 (프로젝트별 정리)** | | 4 | 주간보고 작성 시 | **프로젝트 선택 → 사업 자동 표시** | | 5 | 사업 관리 권한 | **매니저 이상** | --- ## 2. 데이터 모델 ### 2.1 사업 테이블 (wr_business) ```sql CREATE TABLE wr_business ( business_id SERIAL PRIMARY KEY, -- 기본 정보 business_code VARCHAR(20) NOT NULL UNIQUE, -- 사업 코드 (예: BIZ-2026-001) business_name VARCHAR(200) NOT NULL, -- 사업명 business_description TEXT, -- 사업 설명 -- 기간 start_date DATE, -- 사업 시작일 end_date DATE, -- 사업 종료일 (예정) -- 상태 business_status VARCHAR(20) DEFAULT 'IN_PROGRESS', -- PLANNING: 계획중, IN_PROGRESS: 진행중, COMPLETED: 완료, ON_HOLD: 보류 -- 담당 manager_id INTEGER REFERENCES wr_employee_info(employee_id), -- 사업 담당자 -- 메타 is_active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW(), created_ip VARCHAR(50), created_email VARCHAR(100), updated_ip VARCHAR(50), updated_email VARCHAR(100) ); -- 인덱스 CREATE INDEX idx_business_status ON wr_business(business_status); CREATE INDEX idx_business_manager ON wr_business(manager_id); CREATE INDEX idx_business_active ON wr_business(is_active); ``` ### 2.2 프로젝트 테이블 수정 (wr_project_info) ```sql -- 기존 테이블에 컬럼 추가 ALTER TABLE wr_project_info ADD COLUMN business_id INTEGER REFERENCES wr_business(business_id); -- 인덱스 추가 CREATE INDEX idx_project_business ON wr_project_info(business_id); ``` ### 2.3 사업 주간보고 테이블 (wr_business_weekly_report) ```sql CREATE TABLE wr_business_weekly_report ( report_id SERIAL PRIMARY KEY, -- 사업/주차 정보 business_id INTEGER NOT NULL REFERENCES wr_business(business_id), report_year INTEGER NOT NULL, report_week INTEGER NOT NULL, week_start_date DATE NOT NULL, week_end_date DATE NOT NULL, -- AI 취합 결과 ai_summary TEXT, -- AI 취합 요약 (JSON) ai_generated_at TIMESTAMP, -- AI 생성 일시 -- 상태 report_status VARCHAR(20) DEFAULT 'DRAFT', -- DRAFT: 임시, CONFIRMED: 확정 confirmed_at TIMESTAMP, confirmed_by INTEGER REFERENCES wr_employee_info(employee_id), -- 메타 created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW(), created_ip VARCHAR(50), created_email VARCHAR(100), -- 유니크 제약 UNIQUE(business_id, report_year, report_week) ); -- 인덱스 CREATE INDEX idx_biz_report_business ON wr_business_weekly_report(business_id); CREATE INDEX idx_biz_report_week ON wr_business_weekly_report(report_year, report_week); ``` --- ## 3. API 설계 ### 3.1 사업 관리 API (매니저 이상) | Method | Endpoint | 설명 | |--------|----------|------| | GET | /api/business/list | 사업 목록 조회 | | GET | /api/business/[id]/detail | 사업 상세 조회 | | POST | /api/business/create | 사업 생성 | | PUT | /api/business/[id]/update | 사업 수정 | | DELETE | /api/business/[id]/delete | 사업 삭제 (비활성화) | ### 3.2 프로젝트-사업 연결 API | Method | Endpoint | 설명 | |--------|----------|------| | PUT | /api/project/[id]/assign-business | 프로젝트에 사업 배정 | | GET | /api/business/[id]/projects | 사업 소속 프로젝트 목록 | ### 3.3 사업 주간보고 API | Method | Endpoint | 설명 | |--------|----------|------| | GET | /api/business/report/list | 사업 주간보고 목록 | | GET | /api/business/report/[id]/detail | 사업 주간보고 상세 | | POST | /api/business/[id]/report/generate | 사업 주간보고 AI 취합 생성 | | POST | /api/business/report/[id]/regenerate | AI 재생성 | | PUT | /api/business/report/[id]/confirm | 사업 주간보고 확정 | --- ## 4. 화면 설계 ### 4.1 사업 목록 (/business) ``` ┌─────────────────────────────────────────────────────────────────┐ │ 사업 관리 [+ 사업 등록] │ ├─────────────────────────────────────────────────────────────────┤ │ 상태: [전체 ▼] 검색: [_______________] [검색] │ ├─────────────────────────────────────────────────────────────────┤ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ BIZ-2026-001 │ │ │ │ PIMS 고도화 사업 🟢 진행중 │ │ │ │ 담당: 조효성 | 프로젝트 3개 | 2026.01~2026.12 │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ BIZ-2025-003 │ │ │ │ NCCP 유지보수 🟢 진행중 │ │ │ │ 담당: 서혜원 | 프로젝트 2개 | 2025.01~2025.12 │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ### 4.2 사업 상세/수정 (/business/[id]) ``` ┌─────────────────────────────────────────────────────────────────┐ │ 사업 상세 [수정] [삭제] │ ├─────────────────────────────────────────────────────────────────┤ │ 사업코드: BIZ-2026-001 │ │ 사업명: PIMS 고도화 사업 │ │ 상태: 🟢 진행중 │ │ 기간: 2026-01-01 ~ 2026-12-31 │ │ 담당자: 조효성 │ │ 설명: 질병관리청 PIMS 시스템 Vue3 전환 및 기능 고도화 │ ├─────────────────────────────────────────────────────────────────┤ │ 📁 소속 프로젝트 (3) [+ 프로젝트 배정] │ │ ─────────────────────────────────────────────────────────────── │ │ • 2026-001 PIMS 프론트엔드 개발 진행중 │ │ • 2026-002 PIMS 백엔드 API 개발 진행중 │ │ • 2026-003 PIMS DB 마이그레이션 계획중 │ ├─────────────────────────────────────────────────────────────────┤ │ 📊 주간보고 현황 [취합보고 보기] │ │ ─────────────────────────────────────────────────────────────── │ │ 2026년 2주차: 3명 제출 / 3명 중 │ │ 2026년 1주차: 3명 제출 / 3명 중 ✅ 취합완료 │ └─────────────────────────────────────────────────────────────────┘ ``` ### 4.3 사업 주간보고 (취합) (/business/[id]/report/[year]/[week]) ``` ┌─────────────────────────────────────────────────────────────────┐ │ 📋 PIMS 고도화 사업 - 2026년 2주차 주간보고 │ │ [AI 재생성] [확정하기] │ ├─────────────────────────────────────────────────────────────────┤ │ 기간: 2026-01-06 ~ 2026-01-12 │ │ 상태: ⚠️ 임시 (확정 전) │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ## 📊 전체 요약 │ │ 이번 주 PIMS 고도화 사업은 프론트엔드 대시보드 개발 완료, │ │ API 연동 80% 진행, DB 설계 검토 중입니다. │ │ │ │ ─────────────────────────────────────────────────────────────── │ │ │ │ ## 🔷 프로젝트별 상세 │ │ │ │ ### 1. PIMS 프론트엔드 개발 │ │ **금주 실적** │ │ - 대시보드 화면 개발 완료 (조효성, 16h) │ │ - 주간보고 목록 UI 개선 (서혜원, 8h) │ │ │ │ **차주 계획** │ │ - 취합보고 화면 개발 │ │ - 사용자 관리 화면 개발 │ │ │ │ ### 2. PIMS 백엔드 API 개발 │ │ **금주 실적** │ │ - 인증 API 세션 방식 전환 (조효성, 8h) │ │ - 주간보고 CRUD API 완료 (조효성, 12h) │ │ │ │ **이슈** │ │ - DB 연결 타임아웃 간헐적 발생 → 커넥션 풀 설정 조정 필요 │ │ │ │ ─────────────────────────────────────────────────────────────── │ │ │ │ ## ⚠️ 주요 이슈 │ │ 1. DB 연결 타임아웃 - 커넥션 풀 설정 조정 예정 │ │ 2. 고객사 요구사항 추가 - 다음 주 협의 예정 │ │ │ │ ## 📅 차주 주요 일정 │ │ - 1/15(수): 고객사 중간보고 │ │ - 1/17(금): DB 마이그레이션 범위 확정 회의 │ │ │ └─────────────────────────────────────────────────────────────────┘ * 개발자들이 작성한 주간보고를 AI가 사업/프로젝트 단위로 자동 취합 * 별도 작성 없음, 취합만 실행 ``` ### 4.4 프로젝트 수정 시 사업 선택 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 프로젝트 수정 │ ├─────────────────────────────────────────────────────────────────┤ │ 프로젝트코드: 2026-001 │ │ 프로젝트명: [PIMS 프론트엔드 개발_______] │ │ 소속 사업: [PIMS 고도화 사업 ▼] ← 신규 추가 │ │ - 선택안함 │ │ - PIMS 고도화 사업 │ │ - NCCP 유지보수 │ │ ... │ └─────────────────────────────────────────────────────────────────┘ ``` ### 4.5 주간보고 작성 시 사업 표시 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 주간보고 작성 │ ├─────────────────────────────────────────────────────────────────┤ │ 프로젝트 선택: │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ ☑ PIMS 프론트엔드 개발 │ │ │ │ └ 📁 PIMS 고도화 사업 ← 자동 표시 │ │ │ │ ☐ NCCP 기능개선 │ │ │ │ └ 📁 NCCP 유지보수 │ │ │ │ ☐ 사내 시스템 개발 │ │ │ │ └ 📁 (사업 미지정) │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## 5. AI 프롬프트 설계 ### 5.1 사업 주간보고 취합 프롬프트 ``` 당신은 IT 프로젝트 주간보고 취합 전문가입니다. 아래 개발자들의 주간보고를 사업 단위로 취합하여 정리해주세요. ## 사업 정보 - 사업명: {business_name} - 사업코드: {business_code} - 보고 기간: {week_start_date} ~ {week_end_date} ## 소속 프로젝트 {projects_list} ## 개발자 주간보고 원본 {weekly_reports_raw} ## 출력 형식 (JSON) { "overall_summary": "전체 요약 (3-5문장)", "projects": [ { "project_id": 1, "project_name": "프로젝트명", "work_summary": "금주 실적 요약", "work_details": [ {"task": "작업내용", "assignee": "담당자", "hours": 8} ], "plan_summary": "차주 계획 요약", "plan_details": ["계획1", "계획2"], "issues": ["이슈1", "이슈2"] } ], "overall_issues": [ {"issue": "이슈 내용", "action": "대응 방안"} ], "next_week_schedule": [ {"date": "1/15(수)", "event": "고객사 중간보고"} ], "statistics": { "total_members": 3, "submitted_members": 3, "total_work_hours": 120, "completion_rate": 85 } } ## 규칙 1. 프로젝트별로 실적/계획/이슈를 구분하여 정리 2. 동일 작업은 통합하고 담당자/시간 합산 3. 이슈는 중요도 순으로 정렬 4. 숫자(시간, 진척률 등)는 정확히 유지 5. JSON 외 다른 텍스트 출력 금지 ``` --- ## 6. 작업 일정 ### Phase 1: 사업 CRUD (1.5일) ✅ 완료 - [x] 시작: 2026-01-11 00:28 KST - [x] 완료: 2026-01-11 00:31 KST - [x] 소요시간: 3분 **작업 내용:** - [x] DB 테이블 생성 (wr_business) ✅ 기존 존재 - [x] 사업 CRUD API (매니저 이상 권한) ✅ - [x] 사업 목록/상세/등록/수정 화면 ✅ - [ ] 메뉴 권한 설정 ⏳ 추후 **생성된 파일:** - backend/api/business/list.get.ts - backend/api/business/create.post.ts - backend/api/business/[id]/detail.get.ts - backend/api/business/[id]/update.put.ts - backend/api/business/[id]/delete.delete.ts - frontend/business/index.vue - frontend/business/[id].vue --- ### Phase 2: 프로젝트-사업 연결 (1일) - [ ] 시작: - [ ] 완료: - [ ] 소요시간: **작업 내용:** - [ ] 프로젝트 테이블에 business_id 컬럼 추가 - [ ] 프로젝트 수정 화면에 사업 선택 추가 - [ ] 프로젝트 배정 API - [ ] 주간보고 작성 시 사업명 표시 --- ### Phase 3: 사업 주간보고 취합 (1.5일) - [ ] 시작: - [ ] 완료: - [ ] 소요시간: **작업 내용:** - [ ] 사업 주간보고 테이블 생성 (wr_business_weekly_report) - [ ] 사업 주간보고 취합 API (AI 활용) - [ ] 사업 주간보고 상세 화면 - [ ] 확정 기능 --- ### Phase 4: 테스트 및 정리 (0.5일) - [ ] 시작: - [ ] 완료: - [ ] 소요시간: **작업 내용:** - [ ] 전체 플로우 테스트 - [ ] 기존 취합보고와 연계 확인 - [ ] 버그 수정 --- ## 작업 완료 결과 ### Phase별 작업 시간 | Phase | 작업 내용 | 시작 | 완료 | 소요시간 | |:-----:|----------|:----:|:----:|:--------:| | 1 | 사업 CRUD | 01-11 00:28 | 01-11 00:31 | 3분 ✅ | | 2 | 프로젝트-사업 연결 | - | - | - | | 3 | 사업 주간보고 취합 | - | - | - | | 4 | 테스트 및 정리 | - | - | - | | | | | **총 소요시간** | **-** | --- ### 생성/수정된 파일 | 구분 | 파일 | 작업 | |------|------|:----:| | **DB** | wr_business | 신규 테이블 | | **DB** | wr_business_weekly_report | 신규 테이블 | | **DB** | wr_project_info | 수정 (business_id 추가) | | **API** | backend/api/business/*.ts | 신규 | | **API** | backend/api/business/report/*.ts | 신규 | | **API** | backend/api/project/[id]/assign-business.put.ts | 신규 | | **Frontend** | frontend/pages/business/*.vue | 신규 | | **Frontend** | frontend/pages/project/[id].vue | 수정 | | **Frontend** | frontend/pages/report/weekly/write.vue | 수정 | | **Utils** | backend/utils/openai.ts | 수정 (프롬프트 추가) | --- ## 7. 기술 스택 - **Backend**: Nitro (H3) + PostgreSQL - **Frontend**: Nuxt3 + Vue3 + Bootstrap 5 - **AI**: OpenAI GPT-4o-mini (취합 요약) - **인증**: 기존 세션 기반 (requireAuth, requireManager) --- ## 8. 기존 기능과의 관계 | 기존 기능 | 변경 사항 | |----------|----------| | 주간보고 작성 | 프로젝트 옆에 사업명 표시 (읽기전용) | | 프로젝트 관리 | 사업 선택 필드 추가 | | 전체 취합보고 | 유지 (사업 주간보고와 별개) | --- ## 9. 향후 확장 고려 1. **사업별 대시보드**: 진척률, 투입시간 통계 2. **사업 일정 관리**: 마일스톤, 일정표 3. **사업별 산출물 관리**: 문서, 결과물 링크 4. **고객사 공유**: 사업 주간보고 외부 공유 링크