κ³ κ°μ© μλΉμ€μ μ μ£Όμ© μλΉμ€λ₯Ό νλμ λͺ¨λ Έλ ν¬μμ κ΄λ¦¬νλ©°, κ³΅ν΅ UIΒ·APIΒ·κ°λ° μ€μ μ ν¨ν€μ§νν Compasser νλ‘ νΈμλ μ μ₯μμ λλ€.
Compasserλ μ¬μ©μκ° μ£Όλ³ μΉ΄νλ₯Ό νμνκ³ λλ€λ°μ€λ₯Ό ꡬ맀ν λ€, λ§€μ₯μμ QRμ ν΅ν΄ μνμ νμΈνκ³ μ€ν¬νλ₯Ό μ 립ν μ μλ μλΉμ€μ λλ€.
νλ‘ νΈμλλ μλΉμ€ μ΄μ© 주체μ λ°λΌ κ³ κ°μ© μ±κ³Ό μ μ£Όμ© μ±μ λΆλ¦¬νκ³ , λ μ±μμ λ°λ³΅λλ UIΒ·APIΒ·μ€μ μ κ³΅ν΅ ν¨ν€μ§λ‘ κ΄λ¦¬νμ΅λλ€.
| κ΅¬λΆ | μ€λͺ |
|---|---|
Customer |
μΉ΄ν νμ, λλ€λ°μ€ ꡬ맀, κ²°μ , QR λ° μ€ν¬ν κ΄λ¦¬ |
Owner |
λ§€μ₯κ³Ό λλ€λ°μ€ μ΄μμ μν μ μ£Όμ© μλΉμ€ |
Design System |
κ³΅ν΅ UI μ»΄ν¬λνΈμ λμμΈ κ·μΉ κ΄λ¦¬ |
API Package |
κ³ κ°μ©Β·μ μ£Όμ© μ±μμ μ¬μ©νλ API λ‘μ§ κ³΅ν΅ν |
νλ‘ νΈμλ 1μΈ κ°λ°μ λ΄λΉνλ©° μ€κ³λΆν° κΈ°λ₯ ꡬν, API μ°λ, λ°°ν¬κΉμ§ μ κ³Όμ μ μννμ΅λλ€.
| μμ | ꡬν λ΄μ© | κ²°κ³Ό |
|---|---|---|
| μν€ν μ² | κ³ κ°μ©Β·μ μ£Όμ© μ±μ λΆλ¦¬ν λλ©μΈ κΈ°λ° λͺ¨λ Έλ ν¬ μ€κ³ | κ° μλΉμ€μ μν μ λΆλ¦¬νλ©΄μ κ³΅ν΅ μ½λλ₯Ό μ¬μ¬μ©ν μ μλ ꡬ쑰 ν보 |
| λμμΈ μμ€ν | κ³΅ν΅ UI μ»΄ν¬λνΈλ₯Ό λ³λ ν¨ν€μ§λ‘ ꡬμ±νκ³ Storybook μ μ© | μλΉμ€ κ° UI μΌκ΄μ± ν보 λ° μ»΄ν¬λνΈ λ¨μ κ°λ° νκ²½ κ΅¬μΆ |
| κ³΅ν΅ λͺ¨λ | API, Tailwind, TypeScript μ€μ μ λ΄λΆ ν¨ν€μ§λ‘ λΆλ¦¬ | μ±λ§λ€ λ°λ³΅λλ μ€μ κ³Ό API ꡬν λ²μ μΆμ |
| ν΅μ¬ κΈ°λ₯ | λλ€λ°μ€ νμ·ꡬ맀·결μ , QR νμΈ, μ€ν¬ν μ 립 κΈ°λ₯ ꡬν | νμλΆν° μ€νλΌμΈ μ¬μ©κΉμ§ μ΄μ΄μ§λ μ¬μ©μ νλ¦ μμ± |
| νμ | λ°±μλ κ°λ°μ 3λͺ , λμμ΄λ 1λͺ κ³Ό API λ° UI λͺ μΈ μ‘°μ¨ | νλ‘ νΈμλ μΈν°νμ΄μ€μ λ°μ΄ν° νλ¦μ μΌκ΄λ κ΅¬μ‘°λ‘ μ°κ²° |
- κ³ κ°μ© μ±κ³Ό μ μ£Όμ© μ±μ μν μ λΆλ¦¬νλ©΄μ κ³΅ν΅ ν¨ν€μ§λ₯Ό μ¬μ¬μ©νλλ‘ κ΅¬μ±
- UIΒ·APIΒ·μ€μ ν¨ν€μ§ ν΅ν©μ ν΅ν΄ μ±λ³ λ°λ³΅ ꡬν λ²μλ₯Ό μ½ 50% μΆμ
- μλ‘μ΄ μ±μ΄λ κΈ°λ₯μ΄ μΆκ°λμ΄λ κ³΅ν΅ ν¨ν€μ§λ₯Ό νμ₯ν μ μλ ꡬ쑰 λ§λ ¨
- κ³΅ν΅ μ»΄ν¬λνΈλ₯Ό Storybookμμ λ 립μ μΌλ‘ νμΈνκ³ κ΄λ¦¬ν μ μλλ‘ κ΅¬μ±
flowchart TB
ROOT["π§ Compasser FE Monorepo"]
ROOT --> APPS["Applications"]
ROOT --> PACKAGES["Shared Packages"]
APPS --> CUSTOMER["apps/customer<br/>κ³ κ°μ© μλΉμ€"]
APPS --> OWNER["apps/owner<br/>μ μ£Όμ© μλΉμ€"]
PACKAGES --> API["packages/api<br/>κ³΅ν΅ API"]
PACKAGES --> DS["packages/design-system<br/>κ³΅ν΅ UI"]
PACKAGES --> TW["packages/tailwind-config<br/>λμμΈ ν ν°"]
PACKAGES --> TS["packages/typescript-config<br/>κ³΅ν΅ TS μ€μ "]
CUSTOMER --> API
CUSTOMER --> DS
OWNER --> API
OWNER --> DS
FE
βββ apps
β βββ customer
β β βββ κ³ κ°μ© μΉ μ ν리μΌμ΄μ
β βββ owner
β βββ μ μ£Όμ© μΉ μ ν리μΌμ΄μ
β
βββ packages
β βββ api
β β βββ κ³΅ν΅ API μμ² λ° μλ΅ λ‘μ§
β βββ design-system
β β βββ κ³΅ν΅ UI μ»΄ν¬λνΈ λ° Storybook
β βββ tailwind-config
β β βββ κ³΅ν΅ μ€νμΌκ³Ό λμμΈ ν ν°
β βββ typescript-config
β βββ κ³΅ν΅ TypeScript μ€μ
β
βββ pnpm-workspace.yaml
βββ turbo.json
βββ package.json
appsμλ κ³ κ°μ©Β·μ μ£Όμ© μλΉμ€μ²λΌ κ°κ° λ
립μ μΌλ‘ μ€νλλ μ ν리μΌμ΄μ
μ λ°°μΉνμ΅λλ€.
packagesμλ λ μ ν리μΌμ΄μ
μμ ν¨κ» μ¬μ©νλ UI, API, μ€νμΌ, TypeScript μ€μ μ λ°°μΉνμ΅λλ€.
μ΄λ₯Ό ν΅ν΄ κ° μ±μ μμ μ λλ©μΈ κΈ°λ₯μ μ§μ€νκ³ , κ³΅ν΅ λ³κ²½ μ¬νμ ν¨ν€μ§ ν κ³³μμ κ΄λ¦¬ν μ μλλ‘ κ΅¬μ±νμ΅λλ€.
κ³΅ν΅ μ»΄ν¬λνΈλ₯Ό packages/design-systemμΌλ‘ λΆλ¦¬νκ³ Storybookμ μ μ©νμ΅λλ€.
- Button, Input, Modal λ± κ³΅ν΅ UI μ»΄ν¬λνΈ ν¨ν€μ§ν
- κ³ κ°μ©Β·μ μ£Όμ© μ±μμ λμΌν μ»΄ν¬λνΈ μ¬μ¬μ©
- μ»΄ν¬λνΈ μνμ μ¬μ© λ°©λ²μ Storybookμμ λ 립μ μΌλ‘ νμΈ
- κ³΅ν΅ λμμΈ ν ν°μ ν΅ν΄ μμΒ·νμ΄ν¬κ·ΈλνΌΒ·κ°κ²© μΌκ΄μ± μ μ§
- UI μμ μ¬νμ ν ν¨ν€μ§μμ κ΄λ¦¬νμ¬ μ±λ³ μ€λ³΅ μμ λ°©μ§
μ¬μ©μμ νμ¬ μμΉλ₯Ό κΈ°λ°μΌλ‘ μ£Όλ³ μΉ΄νμ μ΄μ© κ°λ₯ν λλ€λ°μ€λ₯Ό νμν μ μμ΅λλ€.
μΉ΄νμμ νλ§€νλ λλ€λ°μ€μ μ 보μ κ°κ²©μ νμΈνκ³ κ΅¬λ§€ν μ μμ΅λλ€.
μν μ νλΆν° μ£Όλ¬Έ νμΈκ³Ό κ²°μ κΉμ§ μ΄μ΄μ§λ μ¬μ©μ νλ¦μ ꡬννμ΅λλ€.
ꡬ맀ν λλ€λ°μ€λ₯Ό λ§€μ₯μμ μ¬μ©ν μ μλλ‘ QR κΈ°λ° νμΈ νλ¦μ μ 곡ν©λλ€.
μΉ΄ν μ΄μ© λ΄μμ λ°λΌ μ€ν¬νλ₯Ό μ 립νκ³ λ³΄μ νν©μ νμΈν μ μμ΅λλ€.
κ³ κ°κ³Ό μ μ£Όμ μ¬μ© λͺ©μ μ λ§κ² μ±μ λΆλ¦¬νλ©΄μλ κ³΅ν΅ μ½λμ λμμΈ μμ€ν μ ν¨κ» μ¬μ©ν©λλ€.
| λΆλ₯ | κΈ°μ |
|---|---|
| Framework | Next.js, React |
| Language | TypeScript |
| Styling | Tailwind CSS |
| Server State | TanStack React Query |
| Client State | Zustand |
| Monorepo | Turborepo, pnpm Workspace |
| UI Development | Storybook |
| Deployment | Vercel |
git clone https://github.com/CUK-Compasser/FE.git
cd FEpnpm installpnpm devpnpm buildpnpm type-check