Search

ย  monorepo ๊ธฐ๋ฐ˜ ๊ณตํ†ต UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€

๊ฐœ์š”

MonoRepo์˜ PoC ๋ฅผ ๋ชฉ์ ์œผ๋กœํ•œ ๊ฐœ์ธ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
TailwindCSS ๊ธฐ๋ฐ˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ๊ฐ€๋ณ๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชฉ์ ์œผ๋กœ shadcn/ui ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด ๋ชจ๋…ธ๋ ˆํฌ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

Tech Spec

Build Tool
Vite(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“œ)
Monorepo
pnpm workspaces+Turbo
TypeScript
5.0+
Bundling
Rollup(Vite ๋‚ด์žฅ)
Unit Testing
Vitest,React Testing Library
Visual Regression Testing
Chromatic(์‹œ๊ฐ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ)
Document
Storybook(๋””์ž์ธ์‹œ์Šคํ…œ ๋ฌธ์„œ)
Code Quality
ESLint + Prettier
CI/CD
Github Actions,Github

์—ญํ• 

โ€ข
๋ชจ๋…ธ๋ ˆํฌ scratch
โ€ข
CI/ CD ๊ตฌ์ถ• (changesets, github actions)
โ€ข
GitHub Actions์„ ํ†ตํ•ด NPM ๋ฐฐํฌ ์ž๋™ํ™”, ReactTestingLibrary + Vite + Chromatic ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ณ  CI์— ํ†ตํ•ฉ
โ€ข
Storybook ์ปดํฌ๋„ŒํŠธ ๋ฌธ์„œํ™”
โ€ข
๋ฒˆ๋“ค์‚ฌ์ด์ฆˆ ์ตœ์ ํ™”

๊ธฐ์ˆ ์  ๊ณผ์ œ ๋ฐ ์„ฑ๊ณผ

๋‹จ์ˆœํ•œ ํŒจํ‚ค์ง€ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ฆ๊ฐ€์— ๋Œ€ํ•œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋ฐ ์ตœ์ ํ™”
โ€ข
shadcn์˜ typography ์ปดํฌ๋„ŒํŠธ๋“ค์„ polymorphic ํ•œ ์ถ”์ƒํ™”ํ•œ @hensley-ui/react-heading ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹จ์ˆœํŒจํ‚ค์ง€์ž„์—๋„ ๋ฒˆ๋“คํฌ๊ธฐ๊ฐ€ 92.4KB ์œผ๋กœ 2000์ค„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์—ˆ์œผ๋ฉฐ, ์›์ธ์œผ๋กœ๋Š” ๋™์ผ ์˜์กด์„ฑ ์ค‘๋ณต์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜(ISSUE#28 ๋ฌธ์ œ์ )๊ฐ€ ์žˆ์—ˆ์Œ
โ€ข
rollup-plugin-visualizer๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ ์š”์†Œ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์ค‘๋ณต ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฒˆ๋“ค๋ง ์ตœ์ ํ™”
โ€ข
์ฝ”๋“œ๋ผ์ธ : 2015โ†’ ์ด 147 lines (-93%)
โ€ข
๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™” unpacked 92.4kb โ†’ 13.5kb(-85%) (PR #29-ํŒจํ‚ค์ง€ ๋ฒˆ๋“ค๋ง ์ตœ์ ํ™”)
๋ฒˆ๋“ค ํฌ๊ธฐ ์›์ธ๋ถ„์„ ๋ฐ ๋Œ€์‘ (์ž์„ธํ•œ ๋‚ด์šฉ PR ์ด๋ฏธ์ง€์ฒจ๋ถ€)
monolithic ๋‹จ์ผ ํŒจํ‚ค์ง€์—์„œ โ†’ ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ monorepo๊ตฌ์กฐ ์ „ํ™˜
โ€ข
๊ธฐ์กด ๋‹จ์ผํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์†Œํ•œ ์ˆ˜์ •์—๋„ ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๋ฐ˜๋ณต์ ์ธ ์ˆ˜๋™ ์ž‘์—…
โ€ข
pnpm workspace์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ์™€ ์•ˆ์ •์ ์ธ ๋กœ์ปฌ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ†ตํ•ด npm link์˜ ๋‹จ์ ๋“ค์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด pnpm๊ณผ ๊ฐ™์€ ์ตœ์‹  ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ์ดํ•ด์™€ ์˜์กด์„ฑ๊ด€๋ฆฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ตœ์ ํ™”ํ•˜๋Š” ์—ญ๋Ÿ‰์„ ํ‚ค์šธ ์ˆ˜ ์žˆ์—ˆ์Œ
CI/CD ๊ฐœ์„ 
โ€ข
UI Kit๋‚ด ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐฐํฌ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ๋ฆด๋ฆฌ์ฆˆ ์ž‘์—…์— ๋†’์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ , ์žฆ์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์–ด ๋น„ํšจ์œจ์ ์ธ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค
โ€ข
Changeset๊ณผ Turborepo๋ฅผ ๋„์ž…ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋œ ํŒจํ‚ค์ง€๋งŒ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ƒ์„ฑํ•ด ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ๋ฆด๋ฆฌ์ฆˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์‹œ๊ฐ„ 75% ๋‹จ์ถ• (์˜ˆ: 4๋ถ„ โ†’ 1๋ถ„๋Œ€)