๋น๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ตญํ No-Code ์๊ฐํ ์น์๋น์ค
MAC์ ๋ฐ์ดํฐ ํ์ผ(CSVยทXLSX)์ ์ฌ๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋๊ตฌ๋ ๋น ๋ฅด๊ฒ ์ฐจํธ๋ฅผ ๋ง๋ค๊ณ ๋ค๋ฌ์ด์ ์ด๋ฏธ์ง๋ก ๋ด๋ ค๋ฐ์ ์ ์๋ ์๊ฐํ ํธ์ง ๋๊ตฌ์ ๋๋ค.
๊ธฐ์กด ๋ณต์กํ ๋ถ์ ํด๊ณผ ๋ฌ๋ฆฌ, ๋จ๊ณํ ์ฌ์ฉ์ ํ๋ฆ์ ํตํด ๋น์ ๊ณต์๋ ์ฝ๊ฒ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ด ์ ์ฅ์๋ ๊ทธ์ค ๋ฌด๋ฃ ๋ฒ์ ์ธ MAC Studio์ ๋๋ค.
| ์ ํ | ๋์ | ์ํ |
|---|---|---|
| MAC Studio | ๋ฌด๋ฃ ยท ๊ฐ๋ณ๊ฒ ์ฐจํธ๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋ชจ๋ ์ฌ์ฉ์ | ์ด ์ ์ฅ์์์ ๊ฐ๋ฐ ์ค |
| MAC Expert | ์ ๋ฃ ยท ๋ ๋ง์ ์ฐจํธ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ์ฌ์ฉ์ | ๊ธฐํ ๋จ๊ณ, ๋ณ๋ ๊ฐ๋ฐ ๋ฒ์ |
MAC์ ์ ๋ฌธ๊ฐ์ฉ ๋ถ์ ํด์ด ์๋๋ค.
MAC์ ๐ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์๊ฐํํ๊ณ ๐ ์ํ๋ ์คํ์ผ๋ก ์ฝ๊ฒ ์์ ํ ์ ์๋๋ก ๋๋
ํ๊ตญํ No-Code ์๊ฐํ ํธ์ง๊ธฐ๋ฅผ ๋ชฉํ๋ก ํฉ๋๋ค.
- ์ฐจํธ ์์ฑ โ ํธ์ง โ ์ ์ฅ โ ๋ค์ด๋ก๋๊น์ง ์ด์ด์ง๋ Studio ์์ฑ
- ์ดํ MAC Expert(์ ๋ฃ)๋ก ์ฐจํธ ์ข ๋ฅ์ ๊ธฐ๋ฅ ํ์ฅ
- ๋ฒ ํ ์ถ์ ์ผ์ ์ ํ์ ๋๋ ๋๋ก ์ด ๋ฌธ์์ ๊ธฐ๋กํฉ๋๋ค.
๊ธฐ์กด ์๊ฐํ ๋๊ตฌ๋ค์
- ์์ด ์ค์ฌ UI
- ๋ณต์กํ ์ค์ ๊ตฌ์กฐ
- ๊ณผ๋ํ ์ ํ์ง ์ ๊ณต
๐ ๋น์ ๊ณต์๊ฐ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์
MAC Studio๋ ์๋์ ๊ฐ์ ํ๋ฆ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค:
๋ฐ์ดํฐ์
์
๋ก๋ โ ๋ฐ์ดํฐ ํ์ธ โ ์ฐจํธ ์ ํ โ ํธ์ง โ ์ถ์ถ(์ด๋ฏธ์งยทCSV) / ์ ์ฅ
- ์ฌ๋ฆฐ ํ๊ฐ ์ฐจํธ๋ก ๋ง๋ค ์ ์๋ ๋ชจ์์ธ์ง ์ ๋ก๋ ์งํ ์ ๊ฒํ๊ณ , ๊ณ ์น ์ ์๋ ๋ฌธ์ ๋ ์๋ ์์ ์ ์ ์ํฉ๋๋ค.
- ์ฐจํธ๋ ํ ๋ฒ์ ํ๋์ฉ ๋ง๋ค๊ณ , ์ ์ฅํ๋ฉด ๋ฐ์ดํฐ์ ํด๋ ์๋์ ์์ ๋๋ค.
- ๋ชจ๋ ์ฒ๋ฆฌ๋ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์์์ ์ด๋ฃจ์ด์ ธ ์๋ฒ ๋น์ฉ ์์ด ๋์ํฉ๋๋ค.
๐ ์ฌ์ฉ์๋ ๋๊ตฌ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์๋๋ผ ๐ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋๋ ๊ฒฝํ์ ํ๊ฒ ๋ฉ๋๋ค.
๋ฐํยท๊ณผ์ ยท์ํผ์ฉ์ผ๋ก ๋น ๋ฅด๊ฒ ์๊ฐํ๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋น์ ๊ณต์
- ๐ ๋ฐํ ์๋ฃ๊ฐ ํ์ํ ๋ํ์
- ๐ ์์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์๊ฐํ๊ฐ ํ์ํ ์ฌ์ฉ์
- ๐ ๋ฐ์ดํฐ๋ ์์ง๋ง ๋์์ธ์ด ์ด๋ ค์ด ์ฌ์ฉ์
- ๐ฅ ์ ํ๋ธ/์์ธ ์ฉ Bar Chart Race ์ ์์ (Expert ์ดํ ์ง์ ์์ )
| ๋ฒํธ | ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|---|
| 1 | ํ๊ธ ์ค์ฌ No-Code | ํ๊ธ UI, ์์ค์ฝ์ด ๋๋ฆผ ๊ธ๊ผด, ๋ผ์ดํธ/๋คํฌ ๋ชจ๋(๋ธ๋ผ์ฐ์ ์ค์ ๋ฐ๋ฆ) |
| 2 | ํ์ผ ์ ๋ก๋ยท์ ๊ฒ | CSV(CP949 ํฌํจ)ยทXLSX ์
๋ก๋, ๋ฌธ์ ์ ๊ฒ๊ณผ ์๋ ๊ณ ์น๊ธฐ, /guide์ ํ์ ์๋ดยท์ํยทAI ํ๋กฌํํธ |
| 3 | ๋จ๊ณํ ์ฐจํธ ์์ฑ | ์ ๋ก๋ โ ํ์ธ โ ์ฐจํธ ์ ํ โ ํธ์ง ํ๋ฉด |
| 4 | ์ฐจํธ ํธ์ง | ์ ๋ชฉยท๋ถ์ ๋ชฉยท์ถ์ฒ, ์์, ๋ฐฐ๊ฒฝ, ๋ฒ๋ก, ๊ธ๊ผด, ์ฌ๋ฐฑ, X์ถ ๊ธ์ ๋ฐฉํฅ, ํ ์ ํ(๋ฒ์/์ง์ ), ์ ๋ ฌยท์์ N, ์ํ ์ฐจํธ ํญ๋ชฉ๋ณ ์ยท์์ ๊ณ์ด |
| 5 | ์ถ์ถ | ๊ฒฐ๊ณผ๋ฌผ JPGยทPNGยทTIFF(DPI ์ง์ ), ๋ฐ์ดํฐ์ CSV |
| 6 | ํ์ ๊ธฐ๋ฅ | ์ด๋ฉ์ผ ์ธ์ฆ ๊ฐ์ , ๋ฐ์ดํฐ์ ํด๋ ์ ์ฅ, ๋ง์ดํ์ด์ง, 1๋ถ ์๋ ์ ์ฅ, ์ดํ ๋ฐฉ์ง ์๋ด |
| 7 | ๋ฐ์ํ | ํธ์ง ํ๋ฉด์ ๋ฐ์คํฌํฑ์์ ํ ํ๋ฉด ๊ณ ์ (์ต์ ํจ๋๋ง ์คํฌ๋กค), ๋ชจ๋ฐ์ผ์ โก ๋ฉ๋ด |
| ๋นํ์ | ํ์ | |
|---|---|---|
| ์ ๋ก๋ ์ฉ๋ | 5 MB | 10 MB |
| ์ฐจํธ ๋ง๋ค๊ธฐยท๋ด๋ณด๋ด๊ธฐ | ๊ฐ๋ฅ | ๊ฐ๋ฅ |
| ๋ด๋ณด๋ด๊ธฐ ํด์๋ | 300 DPI | 300 ยท 600 DPI |
| ์ ์ฅ ยท ๋ง์ดํ์ด์ง | ์์ | 30 MB |
์ฉ๋ ์์น๋ ํ์ ์ ์ด๋ฉฐ
lib/limits.tsํ ๊ณณ์์ ๊ด๋ฆฌํฉ๋๋ค.
Studio๊ฐ ์ ๊ณตํ ์ฐจํธ ๋ชฉ๋ก์ 28์ข
(lib/chart-catalog.ts)์ด๋ฉฐ, ํ์ฌ ๊ตฌํ๋ ์ฐจํธ๋ ์๋ 3์ข
์
๋๋ค.
| ์ฐจํธ | ๋ฐ์ดํฐ ๊ตฌ์กฐ | ์ฃผ์ ์ต์ |
|---|---|---|
| ๋ง๋ ์ฐจํธ | ํญ๋ชฉ, ๊ฐ | ์์ ยท ๋ง๋ ๋๊ป ยท ๋ช ์ ยท ์ ๋ ฌ ยท ์์ N |
| ์ ์ฐจํธ | ํญ๋ชฉ(์์), ๊ฐ | ์์ ยท ์ถ ๊ธ์ ยท X์ถ ๋ฐฉํฅ |
| ์ํ ์ฐจํธ | ํญ๋ชฉ, ๊ฐ | ํญ๋ชฉ๋ณ ์ ยท ์์ ๊ณ์ด ยท ๋ฒ๋ก ยท ์ ๋ ฌ ยท ์์ N ยท "๊ธฐํ" ๋ฌถ๊ธฐ |
๋๋จธ์ง ์ฐจํธ๋ ํ์ ์ฐจํธ ๋ชฉ๋ก์ "์ค๋น ์ค"์ผ๋ก ํ์๋ฉ๋๋ค.
Expert๋ ๋ณ๋ ๊ฐ๋ฐ ๋ฒ์์ด๋ฉฐ, Studio์ ๊ตฌ๋ถ๋๋ ๋ธ๋๋ฉ(๊ฒ์ + ์ฃผํฉ)์ผ๋ก ๊ฐ๋๋ค. ํ์ฌ Studio ํ๋ฉด์์๋ ์๋ด ๋ฌธ๊ตฌ์ ์ฃผํฉ ํฌ์ธํธ๋ก๋ง ๋๋ฌ๋ฉ๋๋ค.
| ๊ตฌ๋ถ | Studio | Expert |
|---|---|---|
| ๊ฐ๊ฒฉ | ๋ฌด๋ฃ | ์ ๋ฃ |
| ์ฐจํธ ์ข ๋ฅ | 28์ข ๋ชฉ๋ก ์ค ๋จ๊ณ์ ๊ตฌํ (ํ์ฌ 3์ข ) | Studio ์ฐจํธ๋ฅผ ํฌํจํด ์ด 100์ข ์์ |
| ๋ด๋ณด๋ด๊ธฐ | JPG ยท PNG ยท TIFF ยท CSV, 300 / 600 DPI(ํ์) | 1200 DPI ๋ฑ ๊ณ ๊ธ ์ต์ ์์ |
| ๋ํ ์์ | ํฐ์ + ํ๋ #2F66F5 |
๊ฒ์ + ์ฃผํฉ |
Expert์ ์์ธ ๊ธฐ๋ฅยท์๊ธ์ ํ์ ๋๋ ๋๋ก ๊ฐฑ์ ํฉ๋๋ค.
์ฐจํธ๋ โ์ ์(Definition) ํ๋ = ์ฐจํธ ํ๋โ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ ์ฐจํธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํ์ผ ํ๋๋ฅผ ๋ง๋ค๊ณ ๋ ์ง์คํธ๋ฆฌ์ ๋ฑ๋กํ๋ฉด ๋ฉ๋๋ค.
components/charts/
types.ts ChartDefinition (์ด๋ฆ, ์์ด์ฝ, ์ง์ ์ต์
, ์ปดํฌ๋ํธ)
registry.ts ์ ๊ณตํ๋ ์ฐจํธ ๋ชฉ๋ก โ ์ฌ๊ธฐ์ ์ถ๊ฐํ๋ฉด ๋
bar-chart.tsx ์ฐจํธ๋ณ ํ์ผ (line-chart, pie-chart โฆ)
frame.tsx ์ ๋ชฉยท๋ฒ๋กยท์ฌ๋ฐฑยท๊ธ๊ผด ๋ฑ ๋ชจ๋ ์ฐจํธ ๊ณตํต ํ
cartesian.tsx ์ถ์ด ์๋ ์ฐจํธ์ ๊ณตํต ๋๊ธยท์ถ ๊ธ์
lib/
chart-spec.ts ์ฐจํธ ํ๋์ ๋ชจ๋ ์ต์
(ChartSpec)๊ณผ ๊ธฐ๋ณธ๊ฐ
chart-data.ts ํ ์ ํ โ ์ ๋ ฌ โ ์์ N ์ฒ๋ฆฌ
chart-palette.ts / chart-colors.ts / chart-fonts.ts ์ยท๊ธ๊ผด (ํ ๊ณณ์์ ๊ต์ฒด)
- ์ฐจํธ ํ์ฅ ์ฉ์ด (Studio โ Expert ์ฐจํธ ์ถ๊ฐ ๋์ผ ๋ฐฉ์)
- ์ ์ง๋ณด์ ํจ์จ์ฑ (์ต์
์
supports๋ก ์ฐจํธ๋ง๋ค ์ผ๊ณ ๋) - FE/BE ํ์
๊ตฌ์กฐ ํต์ผ (์ ์ฅ๋๋ ๊ฒ์
ChartSpecJSON ํ๋)
| ๊ตฌ์ฑ | ๊ธฐ์ |
|---|---|
| Frontend | Next.js 16 (App Router) ยท React 19 ยท TypeScript ยท Tailwind CSS v4 |
| Chart Engine | ์ง์ ๊ตฌํํ SVG ์ฐจํธ (์ธ๋ถ ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์) |
| ํ์ผ ์ฒ๋ฆฌ | CSV ์ง์ ํ์ฑ(๊ตฌ๋ถ์ยทCP949 ๊ฐ์ง), read-excel-file(XLSX) |
| UI | lucide-react ยท sonner(ํ ์คํธ) ยท ์์ค์ฝ์ด ๋๋ฆผ(์ฌ์ดํธ ๊ธ๊ผด) |
| ๋ด๋ณด๋ด๊ธฐ | SVG โ Canvas ๋ณํ์ผ๋ก JPGยทPNGยทTIFF ์์ฑ(DPI ์ ๋ณด ํฌํจ) |
| ์ ์ฅ | ํ์ฌ๋ ๋ธ๋ผ์ฐ์ (localStorage / sessionStorage) ๋ฐ๋ชจ ๊ตฌํ |
| Backend / DB | ๋ฏธ์ฐ๋ โ ์ฐ๋ ์ ์ธ์ฆยท์ ์ฅ ๋ชจ๋ ๊ต์ฒด (๊ธฐ์กด ๊ฒํ : Next.js API / FastAPI / Supabase) |
| ๋ฐฐํฌ | Vercel (์ ์ ํ๋ฆฌ๋ ๋) |
๋ก๊ทธ์ธยท์ด๋ฉ์ผ ์ธ์ฆยท์ ์ฅ์ ์๋ฒ๊ฐ ์๋ ๋ฐ๋ชจ ๊ตฌํ์ ๋๋ค.
lib/auth.ts,lib/email-verification.ts,lib/saved.ts๋ฅผ ์๋ฒ ํธ์ถ๋ก ๋ฐ๊พธ๋ฉด ํ๋ฉด ์ฝ๋๋ ๊ทธ๋๋ก ์ธ ์ ์๋๋ก ๋ถ๋ฆฌํด ๋์์ต๋๋ค.
npm install
npm run dev # http://localhost:3000
npm run build # ํ๋ก๋์
๋น๋
npm run lint- ๐ฏ ๊ธฐ๋ฅ๋ณด๋ค ์ฌ์ฉ์ ํ๋ฆ ์ฐ์
- ๐งฉ ๊ตฌ์กฐ๋ ๋จ์ํ๊ฒ
- ๐ ์์ ๋จ์๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ
- ๐ธ ์๋ฒ ์์ด ๋ธ๋ผ์ฐ์ ์์ ์ฒ๋ฆฌํด ๋น์ฉ ์ ๊ฐ
| ๋ถ์ | ์ญํ | ์ด๋ฆ |
|---|---|---|
| PO | ๐ฏ PO | ์กํ์ฐ |
| BE | ๐งโ๐ผ ํ์ฅ | ๊น์ฉ์ค |
| BE | ๐งโ๐ป ํ์ | ๊ณ ์ฑ๋ฏผ |
| FE | ๐งโ๐ผ ํ์ฅ | ๊นํ์ |
| FE | ๐งโ๐ป ํ์ | ์ ์ ์ด |
app/ ํ์ด์ง (/, /studio, /studio/editor, /mypage, /guide, /login, /signup, /terms, /privacy)
components/ ํ๋ฉด ์กฐ๊ฐ (์ฐจํธ, ์ต์
ํจ๋, ์
๋ก๋ยท์ ๊ฒ, ํค๋ยทํธํฐ ๋ฑ)
lib/ ์ฐจํธ ์ต์
ยท๋ฐ์ดํฐ ์ฒ๋ฆฌ, ํ์ผ ํ์ฑ, ๋ด๋ณด๋ด๊ธฐ, ์ธ์ฆยท์ ์ฅ
public/ ๋ก๊ณ ยท์์ด์ฝ
Issue ์์ฑ โ ๋ธ๋์น ์์ฑ โ ๊ฐ๋ฐ โ PR(develop) โ Merge โ develop โ main PR โ ๋ฐฐํฌ
- ์์
๋ธ๋์น๋
develop์์ ๋ง๋ค๊ณ , ์์ ์ด ๋๋๋ฉดdevelop์ผ๋ก PR์ ์ฌ๋ฆฝ๋๋ค. main์ ๋ฐฐํฌ์ฉ์ ๋๋ค. (Vercel์ดmain์ ๋ฐฐํฌ)
feat: ๊ธฐ๋ฅ ์ถ๊ฐ
fix: ๋ฒ๊ทธ ์์
refactor: ๊ตฌ์กฐ ๊ฐ์
style: UI ๋ณ๊ฒฝ
docs: ๋ฌธ์ ์์
MAC์ ๋จ์ํ ์ฐจํธ ์์ฑ๊ธฐ๋ฅผ ๋์ด
๐ ๋ฐ์ดํฐ ์๊ฐํ์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๋ ํ๋ซํผ์ผ๋ก ์ฑ์ฅํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.