Next.jsPythonFastAPIPostgreSQLChart.js
DataHub — B2B 물류 데이터 대시보드
- 기여도
- 80%
- 기간
- 2개월
프로젝트 개요
하루 평균 3,000건 이상의 배송을 처리하는 물류 스타트업의 내부 운영 대시보드입니다. 실시간 배송 현황, 지역별 처리량, CS 팀 KPI, 드라이버 효율 지표를 시각화합니다. Next.js 프론트엔드와 Python FastAPI 백엔드의 분리 구조를 채택했으며, 정해진 임계값을 초과하는 이상치는 Slack Bot으로 즉시 알림 발송합니다.
상세 기술 스택
- Next.js 14 (App Router)
- TypeScript
- Python 3.11 (FastAPI)
- PostgreSQL 15
- Chart.js / react-chartjs-2
- Celery + Redis (비동기 작업)
- Docker Compose
기술적 문제 해결 과정
Problem 1
배송 데이터 집계 쿼리가 1일치 데이터 기준 평균 8.3초 소요. 대시보드 새로고침마다 사용자가 로딩을 기다려야 했습니다.
Solution
Celery로 1분 주기 사전 집계 Task를 구성하고, 결과를 Redis에 캐싱. 대시보드는 캐시에서 조회하고, 실시간성이 필요한 지표만 WebSocket으로 업데이트하도록 분리했습니다.
Result
대시보드 초기 로드 8.3초 → 0.4초 (95% 개선), DB 부하 90% 감소.
Problem 2
월 단위 집계 API가 요청마다 전체 테이블 풀스캔을 발생시켜 PostgreSQL CPU 사용률이 스파이크. 다른 서비스 성능에도 영향을 미쳤습니다.
Solution
PostgreSQL 파티셔닝(월별 Range Partition)과 집계용 Materialized View를 도입. 인덱스를 카버링 인덱스로 재설계하여 풀스캔을 인덱스 온리 스캔으로 전환했습니다.
Result
월간 집계 쿼리 실행 시간 12.1초 → 0.2초, CPU 스파이크 완전 해소.