|
1 | | -# mango-boss-fe |
| 1 | +# 🥭 MangoBoss (망고보스) |
| 2 | + |
| 3 | +> **"복잡한 매장 관리, 이제 망고보스 하나로 끝."** |
| 4 | +> 소상공인 사장님들을 위한 **올인원 매장 관리 솔루션(SaaS)** 프론트엔드 저장소입니다. |
| 5 | +
|
| 6 | +<img width="1720" height="1144" alt="image (10)" src="https://github.com/user-attachments/assets/56359780-bdb8-4f1b-8508-ed3af7fa37ce" /> |
| 7 | + |
| 8 | +<br/> |
| 9 | + |
| 10 | +## 🔗 배포 및 문서 (Links) |
| 11 | +* **Service URL**: [https://www.mangoboss.com](https://www.mangoboss.com) |
| 12 | +* **Team Notion**: [MangoBoss Team Docs](https://www.notion.so/1af52a9c0c5380e6b73beb5fc5e64aea) |
| 13 | +* **Personal Docs**: [Dev Progress](https://www.notion.so/MangoBoss-1aea0b0c7d4c805c8204eba5bb540b55) |
| 14 | + |
| 15 | +<br/> |
| 16 | + |
| 17 | +## 📖 프로젝트 배경 (Background) |
| 18 | + |
| 19 | +**"사장님은 장사에만 집중하세요, 관리는 망고보스가 할게요."** |
| 20 | + |
| 21 | +많은 자영업자분들이 재고 관리, 직원 스케줄링, 매출 정산을 위해 엑셀을 켜거나 여러 개의 앱을 번갈아 사용하며 시간을 낭비하고 있습니다. |
| 22 | +**MangoBoss**는 흩어져 있는 매장 관리 기능을 하나의 웹 대시보드로 통합하여, IT에 익숙하지 않은 사장님들도 직관적으로 사용할 수 있도록 UX를 설계했습니다. |
| 23 | + |
| 24 | +<br/> |
| 25 | + |
| 26 | +## ✨ 핵심 기능 (Key Features) |
| 27 | + |
| 28 | +* **📊 실시간 매출 대시보드**: 차트 라이브러리를 활용하여 일간/주간/월간 매출 추이를 시각화 |
| 29 | +* **📦 스마트 재고 관리**: 재고 부족 시 알림 제공 및 원클릭 발주 시스템 |
| 30 | +* **📅 직원 스케줄링**: 드래그 앤 드롭(DnD)으로 간편하게 알바생 근무표 작성 |
| 31 | +* **📱 반응형 웹 (Mobile First)**: PC 포스기는 물론, 이동 중인 사장님의 스마트폰에서도 완벽 호환 |
| 32 | +* **🔔 실시간 주문 알림**: 웹 소켓(Web Socket)을 연동하여 주문 접수 시 즉각적인 알림 제공 |
| 33 | + |
| 34 | +<br/> |
| 35 | + |
| 36 | +## 🛠️ 기술 스택 (Tech Stack) |
| 37 | + |
| 38 | +| 분류 | 기술 | |
| 39 | +| :-- | :-- | |
| 40 | +| **Framework** |   | |
| 41 | +| **State Mgt** | `Zustand` (전역 상태) | |
| 42 | +| **Styling** |  | |
| 43 | +| **Visualization** | `Recharts` (매출 데이터 시각화) | |
| 44 | +| **Build Tool** |  | |
| 45 | + |
| 46 | +<br/> |
| 47 | + |
| 48 | +## 📂 폴더 구조 (Directory Structure) |
| 49 | + |
| 50 | +유지보수성과 확장성을 고려하여 **기능(Feature)** 단위와 **공통(Shared)** 단위를 분리하여 설계했습니다. |
| 51 | + |
| 52 | +```bash |
| 53 | +dev-fe/ |
| 54 | +├── src/ |
| 55 | +│ ├── api/ # Axios 인스턴스 및 API 요청 함수 모음 |
| 56 | +│ ├── assets/ # 이미지, 폰트, 아이콘 리소스 |
| 57 | +│ ├── components/ # 재사용 가능한 공통 UI (Button, Input 등) |
| 58 | +│ ├── constants/ # 상수 데이터 (메뉴 리스트, 에러 메시지 등) |
| 59 | +│ ├── hooks/ # 커스텀 훅 (useAuth, useSalesData 등) |
| 60 | +│ ├── layout/ # 페이지 레이아웃 (Header, Sidebar) |
| 61 | +│ ├── pages/ # 라우팅 페이지 (Dashboard, Inventory, Schedule) |
| 62 | +│ ├── store/ # Zustand 전역 상태 관리 |
| 63 | +│ ├── types/ # TypeScript 타입 정의 |
| 64 | +│ ├── utils/ # 날짜 변환, 화폐 단위 포맷팅 등 유틸 함수 |
| 65 | +│ ├── App.tsx |
| 66 | +│ └── main.tsx |
| 67 | +├── .env |
| 68 | +├── package.json |
| 69 | +└── README.md |
| 70 | +``` |
| 71 | + |
| 72 | +<br/> |
| 73 | + |
| 74 | +## 🚀 설치 및 실행 (Getting Started) |
| 75 | + |
| 76 | +```bash |
| 77 | +# 1. 저장소 클론 |
| 78 | +git clone [https://github.com/Mango-Butter/dev-fe.git](https://github.com/Mango-Butter/dev-fe.git) |
| 79 | + |
| 80 | +# 2. 패키지 설치 |
| 81 | +yarn install |
| 82 | + |
| 83 | +# 3. 개발 서버 실행 |
| 84 | +yarn dev |
| 85 | +``` |
| 86 | + |
| 87 | +<br/> |
| 88 | + |
| 89 | +## 🚀 성능 최적화 (Performance Optimization) |
| 90 | + |
| 91 | +초기 로딩 속도 개선과 렌더링 최적화를 위해 Vite의 빌드 전략을 수정하고 코드 분할을 적극적으로 도입했습니다. |
| 92 | + |
| 93 | +* **번들 사이즈 96.8% 감소**: `React.lazy`, `Suspense` 및 `manualChunks` 전략을 적용하여 모놀리식 번들을 분리. |
| 94 | + * **Before**: 5MB (초기 단일 번들) |
| 95 | + * **After**: 161KB (Core Chunk) |
| 96 | + * **Result**: 전체 Chunk 구조를 1개 → 60개 이상으로 분산하여 TTI(Time to Interactive) 대폭 개선. |
| 97 | +* **Lazy Loading 적용**: 랜딩 페이지 및 주요 섹션에 `Intersection Observer`를 도입하여 뷰포트에 진입할 때만 리소스를 로드하도록 개선. |
| 98 | +* **비동기 UX 강화**: 데이터 페칭 대기 시간에 **Skeleton UI**와 **Lottie JSON 애니메이션**을 노출하여 체감 로딩 시간을 단축하고 끊김 없는 사용자 경험 제공. |
| 99 | + |
| 100 | +<br/> |
| 101 | + |
| 102 | +## 🏗️ 아키텍처 및 기술적 특징 (Architecture & Tech) |
| 103 | + |
| 104 | +### 1. PWA & FCM 알림 시스템 |
| 105 | +* **PWA (Progressive Web App)**: `vite-plugin-pwa`를 활용하여 모바일 홈 화면 설치 지원 및 서비스 워커(Service Worker) 기반의 오프라인 캐시 전략 적용. 네트워크가 불안정한 환경에서도 핵심 기능 사용 가능. |
| 106 | +* **Push Notification**: FCM(Firebase Cloud Messaging)을 연동하여 브라우저의 Foreground/Background 상태에 관계없이 실시간 주문/스케줄 알림 전송. |
| 107 | + |
| 108 | +### 2. 상태 관리 및 라우팅 (State & Routing) |
| 109 | +* **Zustand 기반 상태 분리**: 사장님(Admin)과 알바생(Staff)의 데이터 접근 범위가 다름을 고려하여, 전역 상태 스토어를 역할별로 분리 및 경량화. |
| 110 | +* **Role-Based Access Control (RBAC)**: |
| 111 | + * `PublicRoute`: 비로그인 사용자 접근 |
| 112 | + * `ProtectedRoute`: 로그인 사용자 전용 |
| 113 | + * `RoleRoute`: 특정 권한(사장님/알바생)에 따른 페이지 접근 제어 및 리디렉션 처리 |
| 114 | + |
| 115 | +### 3. 디자인 시스템 (Design System) |
| 116 | +* **Component-Driven Development**: **Tailwind CSS**와 **JSX in SVG**를 기반으로 유연한 디자인 시스템 구축. |
| 117 | +* **Storybook 도입**: 공통 UI 컴포넌트(Button, Input, Modal 등)를 문서화하여 디자이너-개발자 간 협업 효율 증대 및 UI 일관성 유지. |
| 118 | + |
| 119 | +### 4. SEO & 마케팅 (SEO & Meta) |
| 120 | +* 상용 서비스 수준의 **SEO 메타태그**, **OpenGraph**, **PWA Manifest**를 완벽하게 구성하여 SNS 공유 시 미리보기 최적화 및 검색 엔진 노출 대응. |
| 121 | + |
| 122 | +<br/> |
| 123 | + |
| 124 | +## 🔒 보안 및 배포 파이프라인 (Security & DevOps) |
| 125 | + |
| 126 | +### 🔐 클라이언트 보안 (Client Security) |
| 127 | +* **AES 기반 데이터 암호화**: 전자근로계약서 등 민감 데이터 전송 시, 클라이언트에서 생성한 **Random Session Key**와 **Encryption Key**를 조합하여 AES 암호화 적용. |
| 128 | +* **일회성 키 전략**: 전송 후 키를 파기하는 방식으로 데이터 탈취 및 중간자 공격(MITM) 방어. |
| 129 | + |
| 130 | +### ☁️ CI/CD & Infrastructure |
| 131 | +* **Automated Deployment**: GitHub Actions를 활용하여 `dev` (개발) → `test` (테스트) → `main` (운영) 브랜치별 자동 배포 파이프라인 구축. |
| 132 | +* **AWS Serverless**: **Amazon S3**(정적 호스팅)와 **CloudFront**(CDN)를 연동하여 전 세계 어디서든 빠른 속도로 콘텐츠를 전송하고 SSL(HTTPS) 보안 적용. |
| 133 | + |
| 134 | +<br/> |
| 135 | + |
| 136 | +## 📬 Team Mango-Butter |
| 137 | + |
| 138 | +| 이름 | 역할 | |
| 139 | +| :-- | :-- | |
| 140 | +| **[윤석찬](https://github.com/PaleBlueNote)** | Frontend Lead |
| 141 | +| **정현지** | Backend Lead |
| 142 | +| **심재엽** | Backend |
| 143 | +| **이명건** | Designer |
| 144 | + |
| 145 | +--- |
| 146 | +© 2026 Mango-Butter. All rights reserved. |
0 commit comments