๊ณ ๊ฐ์ฉ ์๋น์ค์ ์ ์ฃผ์ฉ ์๋น์ค๋ฅผ ํ๋์ ๋ชจ๋ ธ๋ ํฌ์์ ๊ด๋ฆฌํ๋ฉฐ, ๊ณตํต 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