Dashboard API 연동 개발 계획
작성일: 2026-01-20
목적: CEO Dashboard 페이지의 목업 데이터 → 실제 API 연동
Serena ID: dashboard-api-state
📍 현재 상태 요약
| 구분 |
섹션 |
데이터 소스 |
상태 |
| Phase 1 |
일일 일보 (DailyReport) |
API |
✅ |
| Phase 1 |
미수금 현황 (Receivable) |
API |
✅ |
| Phase 1 |
채권추심 현황 (DebtCollection) |
API |
✅ |
| Phase 1 |
당월 예상 지출 (MonthlyExpense) |
API |
✅ |
| Phase 1 |
카드/가지급금 관리 (CardManagement) |
API |
✅ |
| Phase 2 |
오늘의 이슈 (TodayIssue) |
mockData |
⏳ |
| Phase 2 |
현황판 (StatusBoard) |
mockData |
⏳ |
| Phase 2 |
접대비 현황 (Entertainment) |
mockData |
⏳ |
| Phase 2 |
복리후생비 현황 (Welfare) |
mockData |
⏳ |
| Phase 2 |
부가세 현황 (Vat) |
mockData |
⏳ |
| Phase 2 |
캘린더 (Calendar) |
mockData |
⏳ |
Phase 1 완료 내역
생성된 파일
| 파일 |
설명 |
react/src/lib/api/dashboard/types.ts |
API 응답 타입 정의 (5개 엔드포인트) |
react/src/lib/api/dashboard/transformers.ts |
API → Frontend 변환 함수 + CheckPoint 생성 |
react/src/hooks/useCEODashboard.ts |
통합 Dashboard Hook (병렬 API 호출) |
react/src/lib/api/dashboard/index.ts |
모듈 export |
수정된 파일
| 파일 |
변경 내용 |
CEODashboard.tsx |
useCEODashboard Hook 연동, mockData fallback 패턴 |
연동된 API 엔드포인트
| 섹션 |
프론트 호출 경로 |
백엔드 실제 경로 |
| DailyReport |
/api/proxy/daily-report/summary |
DailyReportService::summary() |
| Receivable |
/api/proxy/receivables/summary |
ReceivablesService::summary() |
| DebtCollection |
/api/proxy/bad-debts/summary |
BadDebtService::summary() |
| MonthlyExpense |
/api/proxy/expected-expenses/summary |
ExpectedExpenseService::summary() |
| CardManagement |
/api/proxy/card-transactions/summary |
CardTransactionService::summary() |
API 불일치 사항 (fallback 처리)
| 섹션 |
이슈 |
처리 방식 |
| MonthlyExpense |
by_transaction_type 필드로 제공 |
purchase/card/bill 키로 분류 |
| CardManagement |
가지급금, 법인세 예상 가중 등 미제공 |
mockData fallback 사용 |
Phase 2 개발 계획 (신규 API 필요)
2.1 오늘의 이슈 (TodayIssue)
기능 설명
대시보드 상단에 표시되는 실시간 이벤트 목록. 각 이벤트는 뱃지, 내용, 시간, 관련 페이지 링크로 구성.
현재 mockData 구조
개발 방향 제안
방향 A: 통합 이벤트 테이블 신규 생성
| 장점 |
단점 |
| 단일 API로 모든 이슈 조회 가능 |
신규 테이블 설계 필요 |
| 이벤트 타입별 필터링 용이 |
각 도메인에서 이벤트 생성 로직 추가 필요 |
| 확장성 좋음 |
실시간성 유지를 위한 트리거/큐 필요 |
방향 B: 각 도메인 API 조합 (Aggregation)
| 장점 |
단점 |
| 기존 API 재활용 |
여러 API 호출 필요 (성능) |
| 신규 테이블 불필요 |
프론트에서 데이터 병합 로직 필요 |
| 도메인별 독립성 유지 |
일관된 포맷 변환 필요 |
방향 C: 이벤트 큐 기반 실시간 시스템
| 장점 |
단점 |
| 실시간 푸시 가능 |
인프라 복잡도 증가 |
| 확장성 최고 |
Redis/Queue 추가 필요 |
| 알림 시스템과 통합 가능 |
개발 공수 큼 |
데이터 소스 후보
| 뱃지 |
데이터 소스 |
조건 |
| 수주 성공 |
orders 테이블 |
status = 'confirmed', 최근 N일 |
| 주식 이슈 (미수금) |
receivables 테이블 |
overdue_days > 0 |
| 직정 제고 (재고) |
stock_items 테이블 |
quantity < safety_stock |
| 세금 신고 |
tax_schedules 테이블 |
deadline 임박 |
| 결재 요청 |
approvals 테이블 |
status = 'pending' |
| 지출예상내역서 |
expense_requests 테이블 |
status = 'pending' |
권장 사항
- MVP: 방향 B (기존 API 조합)로 시작
- 확장: 추후 방향 A로 마이그레이션 고려
2.2 현황판 (StatusBoard)
기능 설명
각 업무 영역별 미처리 건수를 카드 형태로 표시. 클릭 시 해당 페이지로 이동.
현재 mockData 구조
개발 방향 제안
방향 A: 단일 집계 API
| 장점 |
단점 |
| 단일 API 호출 |
백엔드에서 여러 테이블 집계 필요 |
| 프론트 로직 단순 |
새 항목 추가 시 백엔드 수정 필요 |
방향 B: 설정 기반 동적 집계
| 장점 |
단점 |
| 관리자가 항목 추가/수정 가능 |
구현 복잡도 증가 |
| 유연성 높음 |
쿼리 성능 관리 필요 |
집계 대상 테이블
| 항목 |
테이블 |
집계 조건 |
| 수주 |
orders |
status = 'pending' AND tenant_id |
| 채권 추심 |
bad_debts |
status IN ('collecting', 'legal_action') |
| 안전 재고 |
stock_items |
quantity < safety_stock |
| 세금 신고 |
tax_schedules |
D-day 계산 |
| 신규 업체 등록 |
vendors |
status = 'pending_approval' |
| 연차 |
vacation_requests |
status = 'pending' |
| 발주 |
purchase_orders |
status = 'pending' |
| 결재 요청 |
approvals |
status = 'pending' |
권장 사항
- 방향 A로 시작 (단일 집계 API)
- 항목은 하드코딩으로 시작, 추후 설정 테이블로 분리 가능
2.3 접대비 현황 (Entertainment)
기능 설명
세무 규정에 따른 접대비 한도 및 사용 현황. 분기별 한도 관리 필요.
현재 mockData 구조
세무 규정 (접대비 한도 계산)
개발 방향 제안
방향 A: 전용 서비스 클래스
방향 B: 기존 회계 시스템 확장
expenses 테이블에서 접대비 계정 필터링
- 한도 계산 로직만 별도 서비스로 분리
필요 데이터
| 데이터 |
소스 |
비고 |
| 연간 매출 |
orders 또는 sales_summary |
한도 계산용 |
| 접대비 사용액 |
expenses |
account_code = '접대비' |
| 거래처 정보 |
expense_details |
접대비 증빙용 |
CheckPoint 생성 규칙
| 상황 |
타입 |
메시지 예시 |
| 한도 85% 미만 |
info |
"여유 있게 운영 중입니다" |
| 한도 85~100% |
warning |
"잔여 한도 600만원입니다. 점검 필요" |
| 한도 초과 |
error |
"초과분은 손금불산입됩니다" |
| 거래처 정보 누락 |
error |
"3건의 거래처 정보가 누락되었습니다" |
2.4 복리후생비 현황 (Welfare)
기능 설명
복리후생비 한도 및 사용 현황. 직원 수 기반 한도 계산.
현재 mockData 구조
한도 계산 방식 옵션
방식 1: 고정 금액 기준
- 설정된 연간 한도를 분기별로 분배
- 예: 연간 3,000만원 → 분기당 750만원
방식 2: 직원 수 기준 (비율)
- 직원 1인당 월 N만원 기준
- 예: 50명 × 20만원 × 3개월 = 3,000만원/분기
개발 방향 제안
필요 데이터
| 데이터 |
소스 |
비고 |
| 직원 수 |
employees |
active 상태 |
| 복리후생비 사용액 |
expenses |
account_code = '복리후생비' |
| 한도 설정 |
company_settings |
연간 한도 또는 1인당 기준 |
CheckPoint 생성 규칙
| 상황 |
타입 |
메시지 예시 |
| 1인당 업계 평균 이내 |
success |
"업계 평균(15~25만원) 내 정상 운영 중" |
| 식대 비과세 한도 초과 |
error |
"식대가 월 25만원으로 비과세 한도(20만원) 초과" |
| 분기 한도 85% 이상 |
warning |
"한도 소진 임박" |
2.5 부가세 현황 (Vat)
기능 설명
부가세 신고 예상 금액 및 관련 이슈 표시.
현재 mockData 구조
개발 방향 제안
방향 A: 전용 부가세 서비스
방향 B: 기존 세금계산서 시스템 확장
- 발행/수취 세금계산서에서 세액 집계
- 미발행 건수 조회 추가
필요 데이터
| 데이터 |
소스 |
비고 |
| 매출세액 |
tax_invoices (발행) |
type = 'sales', 합계 × 10% |
| 매입세액 |
tax_invoices (수취) |
type = 'purchase', 합계 × 10% |
| 미발행 건 |
orders 또는 sales |
세금계산서 미연결 건 |
CheckPoint 생성 규칙
| 상황 |
타입 |
메시지 예시 |
| 환급 예상 |
success |
"예상 환급세액 520만원" |
| 납부 예상 (전기 대비 증가) |
info |
"전기 대비 12.9% 증가" |
| 미발행 세금계산서 존재 |
warning |
"3건 미발행, 발행 필요" |
| 신고 기한 임박 |
error |
"신고 기한 D-3" |
부가세 신고 기간
| 신고 유형 |
과세 기간 |
신고 기한 |
| 1기 예정 |
1/1 ~ 3/31 |
4/25 |
| 1기 확정 |
1/1 ~ 6/30 |
7/25 |
| 2기 예정 |
7/1 ~ 9/30 |
10/25 |
| 2기 확정 |
7/1 ~ 12/31 |
다음해 1/25 |
2.6 캘린더 (Calendar)
기능 설명
회사 일정 표시 및 관리. 부서별, 개인별 일정 지원.
현재 mockData 구조
개발 방향 제안
방향 A: 전용 일정 테이블
방향 B: 기존 데이터 연동 (읽기 전용)
각 도메인의 기존 데이터를 캘린더 형식으로 변환
| 타입 |
소스 테이블 |
변환 규칙 |
| 수주 납기 |
orders |
due_date → startDate |
| 공사 일정 |
constructions |
start_date, end_date |
| 세금 신고 |
tax_schedules |
deadline → startDate |
| 휴가 |
vacation_requests |
start_date, end_date |
방향 C: 하이브리드 (A + B)
- 직접 등록 일정: 전용 테이블
- 시스템 일정: 각 도메인에서 자동 생성
- 통합 API에서 병합하여 제공
API 설계
권장 사항
- MVP: 방향 A (전용 테이블)로 CRUD 구현
- 확장: 추후 방향 C로 시스템 일정 연동
개발 우선순위 제안
| 순위 |
섹션 |
이유 |
| 1 |
현황판 (StatusBoard) |
기존 데이터 집계만으로 구현 가능, 공수 적음 |
| 2 |
캘린더 (Calendar) |
독립적인 CRUD, 다른 섹션과 의존성 없음 |
| 3 |
오늘의 이슈 (TodayIssue) |
StatusBoard 로직 재활용 가능 |
| 4 |
부가세 현황 (Vat) |
세금계산서 데이터 기반, 로직 명확 |
| 5 |
접대비 현황 (Entertainment) |
세무 로직 포함, 한도 계산 복잡 |
| 6 |
복리후생비 현황 (Welfare) |
접대비와 유사한 패턴, 함께 개발 권장 |
공통 개발 패턴
API 응답 형식
CheckPoint 구조
색상 체계 (AI 리포트)
| 색상 |
의미 |
적용 기준 |
| 🔴 error |
경고 |
한도 초과, 즉각 조치 필요 |
| 🟠 warning |
주의 |
한도 85~100%, 기한 임박 |
| 🟢 success |
긍정 |
목표 달성, 입금/회수 발생 |
| 🔵 info |
양호 |
정상 범위, 안정적 |
참고 문서
| 문서 |
경로 |
| AI 리포트 색상 체계 |
docs/plans/AI_리포트_키워드_색상체계_가이드_v1.4.md |
| Hook 패턴 예제 |
react/src/hooks/useClientList.ts |
| Transform 예제 |
react/src/lib/api/dashboard/transformers.ts |
| Proxy 라우트 |
react/src/app/api/proxy/[...path]/route.ts |
변경 이력
| 날짜 |
내용 |
| 2026-01-20 |
초기 분석 문서 작성 |
| 2026-01-20 |
Phase 1 완료 (5개 섹션 API 연동) |
| 2026-01-20 |
Phase 2 개발 계획 상세화: 각 섹션별 개발 방향, 데이터 소스, 권장 사항 추가 |