Skip to content

gudrms/order_front

Repository files navigation

Table Order Monorepo

ν…Œμ΄λΈ” μ˜€λ” μ‹œμŠ€ν…œ λͺ¨λ…Έλ ˆν¬ (pnpm + Turborepo)

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

apps/
  β”œβ”€β”€ table-order/          # πŸ“± ν…Œμ΄λΈ” μ£Όλ¬Έ (νƒœλΈ”λ¦Ώ μ›Ήμ•±)
  β”‚   β”œβ”€β”€ src/app           # Next.js App Router
  β”‚   └── src/features      # κΈ°λŠ₯별 λͺ¨λ“ˆ (Cart, Menu)
  β”‚
  β”œβ”€β”€ delivery-customer/    # πŸ›΅ 배달 μ£Όλ¬Έ (PWA + Capacitor)
  β”‚   β”œβ”€β”€ src/app           # Next.js App Router
  β”‚   β”œβ”€β”€ android/          # Android Native Project
  β”‚   └── ios/              # iOS Native Project
  β”‚
  β”œβ”€β”€ brand-website/        # 🎨 λΈŒλžœλ“œ ν™ˆνŽ˜μ΄μ§€ (λ§ˆμΌ€νŒ…)
  β”‚   └── src/app           # Next.js SSG
  β”‚
  β”œβ”€β”€ admin/                # πŸ‘¨β€πŸ³ κ΄€λ¦¬μž μ•± (μ£Όλ°© ν™”λ©΄, λŒ€μ‹œλ³΄λ“œ)
  β”‚   └── src/app           # Next.js Dashboard
  β”‚
  β”œβ”€β”€ backend/              # βš™οΈ 톡합 λ°±μ—”λ“œ (NestJS)
  β”‚   β”œβ”€β”€ src/modules       # 도메인 λͺ¨λ“ˆ (Orders, Menus, POS Sync)
  β”‚   └── prisma/           # DB μŠ€ν‚€λ§ˆ
  β”‚
  └── toss-pos-plugin/      # πŸ”Œ Toss POS 연동 ν”ŒλŸ¬κ·ΈμΈ
      β”œβ”€β”€ src/              # Plugin Entry Point
      └── dist/             # Build Output (plugin.zip)
 
packages/
  β”œβ”€β”€ shared/               # πŸ“¦ 곡톡 둜직 (Type-safe)
  β”‚   β”œβ”€β”€ src/types         # 곡톡 νƒ€μž… (DTO)
  β”‚   └── src/api           # API ν΄λΌμ΄μ–ΈνŠΈ
  β”‚
  β”œβ”€β”€ ui/                   # 🎨 곡톡 UI (Design System)
  β”‚   └── src/components    # Shadcn UI + Tailwind
  β”‚
  β”œβ”€β”€ order-core/           # 🧠 μ£Όλ¬Έ 핡심 둜직
  β”‚   └── src/hooks         # μž₯λ°”κ΅¬λ‹ˆ, μ£Όλ¬Έ μƒνƒœ 관리
# Table Order Monorepo

ν…Œμ΄λΈ” μ˜€λ” μ‹œμŠ€ν…œ λͺ¨λ…Έλ ˆν¬ (pnpm + Turborepo)

## πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

apps/ β”œβ”€β”€ table-order/ # πŸ“± ν…Œμ΄λΈ” μ£Όλ¬Έ (νƒœλΈ”λ¦Ώ μ›Ήμ•±) β”‚ β”œβ”€β”€ src/app # Next.js App Router β”‚ └── src/features # κΈ°λŠ₯별 λͺ¨λ“ˆ (Cart, Menu) β”‚ β”œβ”€β”€ delivery-customer/ # πŸ›΅ 배달 μ£Όλ¬Έ (PWA + Capacitor) β”‚ β”œβ”€β”€ src/app # Next.js App Router β”‚ β”œβ”€β”€ android/ # Android Native Project β”‚ └── ios/ # iOS Native Project β”‚ β”œβ”€β”€ brand-website/ # 🎨 λΈŒλžœλ“œ ν™ˆνŽ˜μ΄μ§€ (λ§ˆμΌ€νŒ…) β”‚ └── src/app # Next.js SSG β”‚ β”œβ”€β”€ admin/ # πŸ‘¨β€πŸ³ κ΄€λ¦¬μž μ•± (μ£Όλ°© ν™”λ©΄, λŒ€μ‹œλ³΄λ“œ) β”‚ └── src/app # Next.js Dashboard β”‚ β”œβ”€β”€ backend/ # βš™οΈ 톡합 λ°±μ—”λ“œ (NestJS) β”‚ β”œβ”€β”€ src/modules # 도메인 λͺ¨λ“ˆ (Orders, Menus, POS Sync) β”‚ └── prisma/ # DB μŠ€ν‚€λ§ˆ β”‚ └── toss-pos-plugin/ # πŸ”Œ Toss POS 연동 ν”ŒλŸ¬κ·ΈμΈ β”œβ”€β”€ src/ # Plugin Entry Point └── dist/ # Build Output (plugin.zip)

packages/ β”œβ”€β”€ shared/ # πŸ“¦ 곡톡 둜직 (Type-safe) β”‚ β”œβ”€β”€ src/types # 곡톡 νƒ€μž… (DTO) β”‚ └── src/api # API ν΄λΌμ΄μ–ΈνŠΈ β”‚ β”œβ”€β”€ ui/ # 🎨 곡톡 UI (Design System) β”‚ └── src/components # Shadcn UI + Tailwind β”‚ β”œβ”€β”€ order-core/ # 🧠 μ£Όλ¬Έ 핡심 둜직 β”‚ └── src/hooks # μž₯λ°”κ΅¬λ‹ˆ, μ£Όλ¬Έ μƒνƒœ 관리 β”‚ └── config/ # πŸ”§ 곡톡 μ„€μ • └── eslint, tsconfig # 개발 ν™˜κ²½ μ„€μ •


## πŸš€ μ‹œμž‘ν•˜κΈ°

μžμ„Έν•œ μ‹€ν–‰ 및 λΉŒλ“œ 방법은 **[μ‹€ν–‰ κ°€μ΄λ“œ (run.md)](./run.md)**λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

### 퀡 μŠ€νƒ€νŠΈ

```bash
# 1. μ˜μ‘΄μ„± μ„€μΉ˜ (pnpm ν•„μˆ˜)
pnpm install

# 2. 개발 μ„œλ²„ μ‹€ν–‰
pnpm dev

πŸ“¦ νŒ¨ν‚€μ§€ μ„€λͺ…

Apps

μ•± 포트 μ„€λͺ… 배포
table-order 3000 λ§€μž₯ λ‚΄ ν…Œμ΄λΈ” μ£Όλ¬Έ (νƒœλΈ”λ¦Ώ) Vercel
delivery-customer 3001 배달 μ£Όλ¬Έ (μ›Ή + ν–₯ν›„ μ•±) Vercel + App Store
brand-website 3002 λΈŒλžœλ“œ λ§ˆμΌ€νŒ… ν™ˆνŽ˜μ΄μ§€ Vercel (SSG)
admin 3003 μ£Όλ°© ν™”λ©΄ + κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ Vercel
backend 4000 NestJS API μ„œλ²„ Vercel Serverless
toss-pos-plugin - Toss POS 연동 ν”ŒλŸ¬κ·ΈμΈ Toss Place (ZIP)

Packages

νŒ¨ν‚€μ§€ μ„€λͺ… μ‚¬μš©μ²˜
@order/shared 곡톡 νƒ€μž…, μœ ν‹Έ, μƒμˆ˜ λͺ¨λ“  μ•±
@order/ui 곡톡 UI μ»΄ν¬λ„ŒνŠΈ table-order, delivery, admin, brand
@order/order-core μ£Όλ¬Έ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (ν”„λ‘ νŠΈ) table-order, delivery
@order/config 곡톡 μ„€μ • 파일 λͺ¨λ“  μ•±

πŸ—οΈ μ•„ν‚€ν…μ²˜

λ°±μ—”λ“œ: Modular Monolith

apps/backend/src/modules/
  β”œβ”€β”€ table-order/      # ν…Œμ΄λΈ” μ£Όλ¬Έ μ „μš©
  β”œβ”€β”€ delivery/         # 배달 μ£Όλ¬Έ μ „μš©
  β”œβ”€β”€ pos-sync/         # POS 연동 (Toss POS)
  β”œβ”€β”€ shared/           # 곡톡 (메뉴, μ£Όλ¬Έ)
  └── brand-site/       # λΈŒλžœλ“œ ν™ˆνŽ˜μ΄μ§€ API

μ™œ 단일 λ°±μ—”λ“œ?

  • 데이터 일관성 (메뉴, 재고 곡유)
  • μ½”λ“œ μž¬μ‚¬μš© (OrdersModule, MenusModule)
  • Vercel Serverlessμ—μ„œ μžλ™ 격리

POS 연동: Toss POS Plugin

λͺ¨λ“  μ£Όλ¬Έ 채널(table-order, delivery-customer)의 주문이 Toss POS둜 μžλ™ μ „λ‹¬λ©λ‹ˆλ‹€.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ table-order     β”‚ νƒœλΈ”λ¦Ώ μ£Όλ¬Έ
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β”œβ”€β”€β”€β”€β†’  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚       β”‚   Backend    β”‚ ←──→ β”‚ toss-pos    β”‚ ←──→ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   (NestJS)   β”‚      β”‚  -plugin    β”‚      β”‚ Toss POS    β”‚
β”‚ delivery        β”‚   POS Sync   β”‚      β”‚  (μ€‘κ°œμž)   β”‚      β”‚ (λ§€μž₯ κΈ°κΈ°) β”‚
β”‚ -customer       β”‚   Module     β”‚      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
                                 β”‚
                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                   β”‚ μ£Όλ°© ν”„λ¦°ν„° + λ””μŠ€ν”Œλ ˆμ΄  β”‚
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ£Όλ¬Έ 흐름:

  1. 고객 μ£Όλ¬Έ β†’ Backend API
  2. Backend β†’ Toss POS Plugin (HTTP)
  3. Plugin β†’ Toss POS κΈ°κΈ°
  4. POS β†’ μ£Όλ°© ν”„λ¦°ν„°/λ””μŠ€ν”Œλ ˆμ΄ 좜λ ₯

배포 방식:

  • Backend, ν”„λ‘ νŠΈ μ•±λ“€: Vercel μžλ™ 배포
  • Toss POS Plugin: ZIP으둜 λΉŒλ“œ β†’ Toss Place κ°œλ°œμžμ„Όν„° μˆ˜λ™ μ—…λ‘œλ“œ

ν”„λ‘ νŠΈμ—”λ“œ: 도메인별 뢄리

  • table-order: νƒœλΈ”λ¦Ώ μ „μš© UI, ν„°μΉ˜ μ΅œμ ν™”
  • delivery-customer: λͺ¨λ°”일 μ΅œμ ν™”, GPS, ν‘Έμ‹œ μ•Œλ¦Ό
  • brand-website: SEO μ΅œμ ν™”, 정적 생성
  • admin: Realtime Dashboard

πŸ› οΈ 기술 μŠ€νƒ

Layer Technology
Frontend Next.js 16, React 19, TailwindCSS 4
State Zustand, TanStack Query
Backend NestJS 10, Prisma 5
Database Supabase (PostgreSQL 14)
Realtime Supabase Realtime
Error Monitoring Sentry (λͺ¨λ“  μ•± 톡합)
Deployment Vercel (Serverless)
Monorepo pnpm, Turborepo

πŸ“± 배달앱 (delivery-customer)

νŠΉμ§•

  • βœ… PWA: λΈŒλΌμš°μ €μ—μ„œ 접속, "ν™ˆ 화면에 μΆ”κ°€" 지원
  • βœ… Capacitor: iOS/Android λ„€μ΄ν‹°λΈŒ μ•± λΉŒλ“œ κ°€λŠ₯
  • βœ… 12개 Native ν”ŒλŸ¬κ·ΈμΈ: 카메라, GPS, ν‘Έμ‹œ μ•Œλ¦Ό, 진동 λ“±
  • βœ… 배달 좔적: μ‹€μ‹œκ°„ 배달 μƒνƒœ, 라이더 μ „ν™”
  • βœ… λ§ˆμ΄νŽ˜μ΄μ§€: μ£Όμ†Œ 관리(Daum 우편번호), μ°œν•œ 메뉴, μ£Όλ¬Έ λ‚΄μ—­
  • βœ… 결제: 7개 결제 μˆ˜λ‹¨ (μΉ΄λ“œ, 카카였페이, λ„€μ΄λ²„νŽ˜μ΄ λ“±)

개발 & 배포

# μ›Ή 개발 (ν‰μ†Œμ²˜λŸΌ)
pnpm --filter delivery-customer dev

# Android μ•± λΉŒλ“œ (Windows κ°€λŠ₯!)
cd apps/delivery-customer
pnpm cap:add:android
pnpm android

# iOS μ•± λΉŒλ“œ (Mac ν•„μš”)
pnpm cap:add:ios
pnpm ios

μžμ„Έν•œ λ‚΄μš©: delivery-customer README

πŸ“š λ¬Έμ„œ

🚨 μ—λŸ¬ λͺ¨λ‹ˆν„°λ§ (Sentry)

각 μ•±μ—λŠ” Sentry 연동 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ νŽ˜μ΄μ§€κ°€ μ€€λΉ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  • 배달앱: /sentry/error
  • λΈŒλžœλ“œ: /sentry/error
  • κ΄€λ¦¬μž: /sentry/error
  • λ°±μ—”λ“œ: /sentry/error (API 호좜 μ‹œ 500 μ—λŸ¬)

🎯 μ£Όμš” κΈ°λŠ₯

table-order (ν…Œμ΄λΈ” μ£Όλ¬Έ)

  • πŸ“± νƒœλΈ”λ¦Ώ μ£Όλ¬Έ
  • πŸ“² QR μ½”λ“œ μ£Όλ¬Έ (슀마트폰)
  • πŸ›’ μž₯λ°”κ΅¬λ‹ˆ (Zustand)
  • πŸ“¦ μ£Όλ¬Έ 관리
  • πŸ”” 직원 호좜
  • πŸͺ 닀쀑 λ§€μž₯ 지원

delivery-customer (배달 μ£Όλ¬Έ)

  • 🚚 μ‹€μ‹œκ°„ 배달 좔적
  • πŸ“ GPS μœ„μΉ˜ (ν˜„μž¬ μœ„μΉ˜ μžλ™ μž…λ ₯)
  • πŸ’³ λ‹€μ–‘ν•œ 결제 μˆ˜λ‹¨
  • πŸ”” ν‘Έμ‹œ μ•Œλ¦Ό (μ£Όλ¬Έ μƒνƒœ)
  • πŸ“Έ 카메라 (리뷰 사진)
  • πŸ“³ 진동 ν”Όλ“œλ°±

admin (κ΄€λ¦¬μž)

  • 🍳 μ£Όλ°© ν™”λ©΄
  • πŸ“Š λŒ€μ‹œλ³΄λ“œ
  • πŸ“ˆ 톡계
  • βš™οΈ μ„€μ •

backend (λ°±μ—”λ“œ)

  • πŸ”— Toss POS 연동 (μ–‘λ°©ν–₯ 동기화)
  • πŸ“‘ μ£Όλ¬Έ β†’ POS 전솑
  • πŸ”„ Realtime (Supabase)
  • πŸ”’ λ³΄μ•ˆ (Rate Limiting, Helmet)
  • πŸ“ Swagger API λ¬Έμ„œ

⚠️ μ€‘μš”: pnpm ν•„μˆ˜!

이 ν”„λ‘œμ νŠΈλŠ” pnpm μ›Œν¬μŠ€νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ μ‹€ν–‰ κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”.

πŸš€ 배포 μ „λž΅

μ›Ή 배포 (Vercel)

git push origin main
# β†’ Vercel이 μžλ™μœΌλ‘œ 배포

Android μ•± 배포

cd apps/delivery-customer
pnpm cap:sync
pnpm cap:open:android
# Android Studio β†’ Build β†’ Generate Signed Bundle
# β†’ Google Play Console μ—…λ‘œλ“œ

iOS μ•± 배포 (Mac ν•„μš”)

cd apps/delivery-customer
pnpm cap:sync
pnpm cap:open:ios
# Xcode β†’ Product β†’ Archive
# β†’ App Store Connect μ—…λ‘œλ“œ

Toss POS Plugin 배포

cd apps/toss-pos-plugin
pnpm build
# β†’ dist/plugin.zip 생성
# β†’ Toss Place κ°œλ°œμžμ„Όν„°μ—μ„œ μˆ˜λ™ μ—…λ‘œλ“œ
# β†’ https://place.toss.im/developer

🀝 κΈ°μ—¬ν•˜κΈ°

  1. 브랜치 생성: git checkout -b feature/new-feature
  2. 컀밋: git commit -m "Add new feature"
  3. ν‘Έμ‹œ: git push origin feature/new-feature
  4. PR 생성

πŸ“„ λΌμ΄μ„ μŠ€

Private

πŸ†˜ 문제 ν•΄κ²°

μ‹€ν–‰ κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

더 λ§Žμ€ 정보: REFACTORING.md

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •