
BizPocket
영업 · 재고 · 수익 · AI 분석
BizPocket은 소상공인과 1인 사장님을 위한 올인원 매장 운영 도구입니다. 매출 기록, 재고 관리, 일일 정산, 지출 추적을 한 앱에서 처리하고, 영수증 촬영 OCR과 AI 경영 리포트로 장부 작업과 데이터 해석을 자동화합니다. 모든 데이터는 SwiftData로 기기에 저장되고 CloudKit private DB로 기기 간 동기화되며, AI 분석은 앱에 키를 두지 않고 자체 FastAPI 서버 프록시를 거쳐 Azure OpenAI를 호출합니다.
소규모 사장님은 매출·재고·정산을 엑셀이나 수기 장부로 따로 관리하느라 시간을 뺏기고, 쌓인 숫자가 무엇을 의미하는지 해석하기 어렵습니다. BizPocket은 입력을 한 곳으로 모으고, AI가 매출 추이·피크 시간대·수익 구조를 자동 분석해 다음 행동을 제안합니다.
앱 미리보기
무엇을 할 수 있나요
매출 기록 · 상품 카탈로그
SalesRecord @Model에 상품별 매출을 수량·단가·할인·세금·결제수단(카드/현금/이체/기타)까지 기록합니다. 등록된 Product 카탈로그로 반복 입력을 빠르게 처리하고, 무료 플랜은 일일 30건·상품 15개로 제한됩니다.
재고 관리 · 재고 알림
InventoryItem과 InventoryTransaction @Model로 입출고를 트랜잭션 단위로 추적하고, NotificationManager가 안전 재고 미만·품절 품목을 UserNotifications 로컬 푸시로 통지합니다. 재고 부족을 사전에 파악해 발주 시점을 놓치지 않습니다.
일일 정산 · 시재 관리
DailySettlement @Model로 하루 매출·지출을 결제수단별로 집계해 정산하고 개점/폐점 시재를 관리합니다. 매일 저녁(기본 21시) 정산 리마인더 알림으로 마감을 빠뜨리지 않게 돕습니다.
영수증 촬영 OCR
Apple Vision의 VNRecognizeTextRequest(.accurate, ko-KR+en-US)로 영수증 사진을 온디바이스 인식해 상호·총액·날짜를 자동 추출하고 지출로 프리필합니다. 네트워크·호출 비용 없이 기기에서만 처리해 손으로 옮겨 적는 수고를 없앱니다.
AI 경영 리포트 (서버 프록시)
기기에서 매출 통계를 먼저 집계한 뒤, 자체 FastAPI 서버 프록시(/insights)를 거쳐 Azure OpenAI(GPT)를 호출해 요약·인사이트·개선 제안·리스크 경고를 담은 경영 리포트를 생성합니다. LLM 키는 앱이 아닌 서버 환경변수에만 보관되고, 앱은 통계 텍스트만 전송합니다.
차트 대시보드
Swift Charts로 매출 추이·카테고리 비중·피크 시간대를 시각화하고, DashboardViewModel이 기간별(일/주/월) 집계와 핵심 지표를 계산해 보여줍니다. 주간/월간 차트와 카테고리 분석은 프리미엄 경계로 관리됩니다.
CSV 내보내기
DataExportManager로 매출·지출·재고 내역을 각각 CSV로 내보내 세무·회계 자료로 활용할 수 있습니다. 날짜·결제수단·세금·공제여부 등 정산에 필요한 컬럼을 포함합니다.
로그인 · 데이터 동기화
Sign in with Apple과 Google Sign-In을 지원하고, Apple은 최초 1회만 제공하는 이름·이메일을 Keychain에 보관해 재로그인 시 복원합니다. 데이터는 CloudKit private DB로 사용자 본인 iCloud 계정 안에서만 기기 간 동기화됩니다.
어떻게 만들었나요
Language
Data
AI / ML
Backend (Proxy)
Commerce
Auth
Platform
MVVM 기반 SwiftUI 앱으로, 기능별(Features) 디렉터리에 View와 ViewModel을 분리하고 Core 레이어에 Design/Auth/Subscription/Receipt/Sync/Services 등 횡단 관심사를 모듈화했습니다. 로컬 우선(local-first) 설계로 SwiftData에 저장하고 CloudKit으로 동기화하며, AI 분석만 자체 FastAPI 서버 프록시를 경유해 LLM 키를 앱 밖으로 분리했습니다.
- 1
SwiftData 7개 @Model(SalesRecord·Product·InventoryItem·InventoryTransaction·Expense·DailySettlement·BusinessProfile)로 도메인을 모델링하고, BizPocketApp에서 단일 Schema·ModelContainer를 구성해 .modelContainer로 주입.
- 2
Local-first + CloudKit private DB(iCloud.com.junsoft.bizpocket) 동기화. CloudKit ModelContainer 초기화 실패 시 로컬 전용 ModelContainer로 자동 폴백해 오프라인·iCloud 비활성 환경에서도 동작.
- 3
AI 리포트는 기기에서 통계를 선집계한 뒤 LLMService가 자체 FastAPI 프록시(/insights)로 전달하고, 프록시가 Azure OpenAI를 호출하는 2단계 파이프라인. 프록시 base URL은 빌드 시 Info.plist(ProxyBaseURL)로 주입되며 LLM 제공자 키는 앱에 전혀 들어가지 않음(키는 서버 env). 기기 선집계로 토큰 비용을 줄이고 수치 정확도를 보장.
- 4
서버 프록시가 보안·남용 방지 경계를 담당. slowapi(get_remote_address)로 IP 기반 rate limit을 걸고, httpx.AsyncClient로 30초 타임아웃과 401/429/타임아웃 등 업스트림 오류를 안정적인 {detail} 응답으로 변환하며, Docker로 컨테이너화해 배포.
- 5
StoreKit 2 기반 구독 게이팅. SubscriptionManager가 월간/연간 상품과 구독 건강 상태(billing retry·grace period·trial 잔여일)를 추적하고, PremiumFeature 9-case 열거형으로 AI 리포트·영수증 OCR·CSV·주간 차트·재고 알림·무제한 등록 등 기능별 프리미엄 경계를 선언적으로 관리.
- 6
인증·자격증명은 Core/Auth에 격리. AuthManager가 Sign in with Apple과 Google Sign-In을 처리하고, Apple이 최초 1회만 주는 이름·이메일을 KeychainHelper로 보관해 세션을 복원. RootView가 온보딩→로그인→메인탭 게이트를 분기.
- 7
전용 디자인 시스템(BPColors/BPTypography/BPSpacing/BPComponents)으로 색상·타이포·간격을 코드 토큰화하고, BPScreenHeader·BPInsightCard·BPCurrencyText 같은 공용 컴포넌트로 5개 탭 전반의 일관성을 유지.
48 Swift Testing + 15 pytest
테스트
5 tabs, 77 views
화면 수
7 SwiftData @Model
데이터 모델
iOS 17
최소 iOS



