ID: key_26_22_05_25_P3_3_3 Created date: 5월 25 2026 월요일
연관 문서
개발 일정 > Phase 3 서버 개발 | 3-4_리포팅-UI
개요
번다운 차트, Velocity, CFD 등 대시보드에서 사용할 집계 데이터 API를 구현한다.
- 예상 소요: 3~4일
- 선행 조건: Phase 2 완료 (스프린트 데이터 존재)
- 완료 기준: 스프린트 번다운 데이터 API 응답 정상 확인
Claude Code 작업 수행서
작업 지시
CIRA 서버에 대시보드 및 리포팅 데이터 API를 구현해줘.
[수행 작업]
1. 번다운 차트 API
GET /api/v1/sprints/{sprintId}/burndown
Response:
{
"sprintName": "Sprint 1",
"startDate": "2026-06-01",
"endDate": "2026-06-14",
"totalPoints": 50,
"idealBurndown": [
{ "date": "2026-06-01", "remainingPoints": 50 },
{ "date": "2026-06-02", "remainingPoints": 46.4 },
...
],
"actualBurndown": [
{ "date": "2026-06-01", "remainingPoints": 50 },
{ "date": "2026-06-02", "remainingPoints": 48 },
...
]
}
구현:
- 스프린트 시작~오늘(또는 종료일)까지 날짜별 집계
- issue_logs 테이블에서 Done 상태 전환 시점 조회
- 이상적 번다운: (총 포인트 / 스프린트 일수) * 경과일
2. Velocity 리포트 API
GET /api/v1/projects/{projectId}/velocity
파라미터: lastN=6 (최근 N 스프린트)
Response:
[
{
"sprintName": "Sprint 1",
"committed": 50,
"completed": 42,
"velocity": 42
}
]
구현: sprint_metrics 테이블에서 조회 (없으면 재계산)
3. CFD (누적 흐름 다이어그램) API
GET /api/v1/projects/{projectId}/cfd
파라미터: startDate, endDate
Response: 날짜별 × 상태별 이슈 수
{
"dates": ["2026-06-01", "2026-06-02", ...],
"statuses": ["To Do", "In Progress", "In Review", "Done"],
"data": {
"To Do": [10, 8, 7, ...],
"In Progress": [5, 6, 8, ...],
...
}
}
4. 개인 대시보드 API
GET /api/v1/users/me/dashboard
Response:
- assignedIssues: 나에게 할당된 미완료 이슈 목록
- recentActivity: 최근 7일 내 내가 변경한 이슈 이력
- upcomingDeadlines: 마감일이 7일 이내인 이슈 목록
- sprintProgress: 현재 스프린트 완료율
5. 프로젝트 통계 API
GET /api/v1/projects/{projectId}/stats
Response:
- totalIssues, openIssues, inProgressIssues, closedIssues
- issuesByType: 타입별 분포
- issuesByPriority: 우선순위별 분포
- issuesByAssignee: 담당자별 분포
6. 캐싱 전략
- 번다운/Velocity는 1시간 캐시 (Redis)
- 대시보드 개인 데이터는 5분 캐시
- 캐시 키: dashboard:{projectId}:{type}:{params_hash}
완료 기준
| 항목 | 기준 |
|---|---|
| 번다운 API | 날짜별 이상/실제 데이터 정상 |
| Velocity API | 최근 6 스프린트 데이터 |
| CFD API | 날짜×상태 매트릭스 반환 |
| 개인 대시보드 | 4종 데이터 정상 반환 |
| 응답 속도 | 캐시 히트 시 100ms 이내 |