ν μ΄λΈ μ€λ μμ€ν λͺ¨λ Έλ ν¬ (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
| μ± | ν¬νΈ | μ€λͺ | λ°°ν¬ |
|---|---|---|---|
| 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) |
| ν¨ν€μ§ | μ€λͺ | μ¬μ©μ² |
|---|---|---|
| @order/shared | κ³΅ν΅ νμ , μ νΈ, μμ | λͺ¨λ μ± |
| @order/ui | κ³΅ν΅ UI μ»΄ν¬λνΈ | table-order, delivery, admin, brand |
| @order/order-core | μ£Όλ¬Έ λΉμ¦λμ€ λ‘μ§ (νλ‘ νΈ) | table-order, delivery |
| @order/config | κ³΅ν΅ μ€μ νμΌ | λͺ¨λ μ± |
apps/backend/src/modules/
βββ table-order/ # ν
μ΄λΈ μ£Όλ¬Έ μ μ©
βββ delivery/ # λ°°λ¬ μ£Όλ¬Έ μ μ©
βββ pos-sync/ # POS μ°λ (Toss POS)
βββ shared/ # κ³΅ν΅ (λ©λ΄, μ£Όλ¬Έ)
βββ brand-site/ # λΈλλ ννμ΄μ§ API
μ λ¨μΌ λ°±μλ?
- λ°μ΄ν° μΌκ΄μ± (λ©λ΄, μ¬κ³ 곡μ )
- μ½λ μ¬μ¬μ© (OrdersModule, MenusModule)
- Vercel Serverlessμμ μλ 격리
λͺ¨λ μ£Όλ¬Έ μ±λ(table-order, delivery-customer)μ μ£Όλ¬Έμ΄ Toss POSλ‘ μλ μ λ¬λ©λλ€.
βββββββββββββββββββ
β table-order β νλΈλ¦Ώ μ£Όλ¬Έ
ββββββββββ¬βββββββββ
β
ββββββ ββββββββββββββββ βββββββββββββββ
β β Backend β ββββ β toss-pos β ββββ βββββββββββββββ
βββββββββββββββββββ€ (NestJS) β β -plugin β β Toss POS β
β delivery β POS Sync β β (μ€κ°μ) β β (λ§€μ₯ κΈ°κΈ°) β
β -customer β Module β ββββββββββββββββ βββββββββββββββ
βββββββββββββββββββ β
β
βββββββββββββββ΄ββββββββββββββ
β μ£Όλ°© νλ¦°ν° + λμ€νλ μ΄ β
βββββββββββββββββββββββββββββ
μ£Όλ¬Έ νλ¦:
- κ³ κ° μ£Όλ¬Έ β Backend API
- Backend β Toss POS Plugin (HTTP)
- Plugin β Toss POS κΈ°κΈ°
- 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 |
- β 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
- 리ν©ν λ§ κ°μ΄λ
- κΈ°μ μ€ν
- μν€ν μ² κ²°μ
- QR μ½λ μ£Όλ¬Έ κ°μ΄λ
- λ°°λ¬μ± κΈ°λ₯ λͺ©λ‘
- Sentry μλ¬ λͺ¨λν°λ§
κ° μ±μλ Sentry μ°λ ν μ€νΈλ₯Ό μν νμ΄μ§κ° μ€λΉλμ΄ μμ΅λλ€.
- λ°°λ¬μ±:
/sentry/error - λΈλλ:
/sentry/error - κ΄λ¦¬μ:
/sentry/error - λ°±μλ:
/sentry/error(API νΈμΆ μ 500 μλ¬)
- π± νλΈλ¦Ώ μ£Όλ¬Έ
- π² QR μ½λ μ£Όλ¬Έ (μ€λ§νΈν°)
- π μ₯λ°κ΅¬λ (Zustand)
- π¦ μ£Όλ¬Έ κ΄λ¦¬
- π μ§μ νΈμΆ
- πͺ λ€μ€ λ§€μ₯ μ§μ
- π μ€μκ° λ°°λ¬ μΆμ
- π GPS μμΉ (νμ¬ μμΉ μλ μ λ ₯)
- π³ λ€μν κ²°μ μλ¨
- π νΈμ μλ¦Ό (μ£Όλ¬Έ μν)
- πΈ μΉ΄λ©λΌ (리뷰 μ¬μ§)
- π³ μ§λ νΌλλ°±
- π³ μ£Όλ°© νλ©΄
- π λμ보λ
- π ν΅κ³
- βοΈ μ€μ
- π Toss POS μ°λ (μλ°©ν₯ λκΈ°ν)
- π‘ μ£Όλ¬Έ β POS μ μ‘
- π Realtime (Supabase)
- π 보μ (Rate Limiting, Helmet)
- π Swagger API λ¬Έμ
μ΄ νλ‘μ νΈλ pnpm μν¬μ€νμ΄μ€λ₯Ό μ¬μ©ν©λλ€. μμΈν λ΄μ©μ μ€ν κ°μ΄λλ₯Ό νμΈνμΈμ.
git push origin main
# β Vercelμ΄ μλμΌλ‘ λ°°ν¬cd apps/delivery-customer
pnpm cap:sync
pnpm cap:open:android
# Android Studio β Build β Generate Signed Bundle
# β Google Play Console μ
λ‘λcd apps/delivery-customer
pnpm cap:sync
pnpm cap:open:ios
# Xcode β Product β Archive
# β App Store Connect μ
λ‘λcd apps/toss-pos-plugin
pnpm build
# β dist/plugin.zip μμ±
# β Toss Place κ°λ°μμΌν°μμ μλ μ
λ‘λ
# β https://place.toss.im/developer- λΈλμΉ μμ±:
git checkout -b feature/new-feature - 컀λ°:
git commit -m "Add new feature" - νΈμ:
git push origin feature/new-feature - PR μμ±
Private
μ€ν κ°μ΄λλ₯Ό μ°Έκ³ νμΈμ.
λ λ§μ μ 보: REFACTORING.md