๋ชจ๋…ธ๋ ˆํฌ ๊ธฐ๋ฐ˜ ๋””์ž์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๊ตฌ์ถ•๊ธฐ

sumin
  • #monorepo
  • #designSystem
  • #storybook

์•ˆ๋…•ํ•˜์„ธ์š”. ๋…ธ๋จธ์Šค์—์„œ fromm ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๋Š” ์ง€์ˆ˜๋ฏผ์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ์—์„œ ๋””์ž์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฒŒ ๋œ ๊ณผ์ •๊ณผ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค์„ ๊ณต์œ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ๊ฒฝ

ํ˜„์žฌ ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์€ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ(๋ ˆํฌ์ง€ํ† ๋ฆฌ) ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๋™์‹œ์— ๊ฐœ๋ฐœํ•˜๋Š” ๋ชจ๋…ธ๋ ˆํฌ(monorepo) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋…ธ๋ ˆํฌ ์ ์šฉ ๊ณผ์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋ก ํŠธ์—”๋“œ ๋ชจ๋…ธ๋ ˆํฌ ์ ์šฉ๊ธฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœํ•˜๋Š” ์„œ๋น„์Šค๋กœ๋Š” ์•„ํ‹ฐ์ŠคํŠธ ๊ตฟ์ฆˆ๋ฅผ ํŒ๋งคํ•˜๋Š” ํ”„๋กฌ์Šคํ† ์–ด(fromm store)์™€, ์•„ํ‹ฐ์ŠคํŠธ์™€ ํŒฌ๋“ค์ด ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กฌ์ฑ„๋„(fromm channel)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ์„œ๋น„์Šค๋Š” ๋™์ผํ•œ ๋””์ž์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์—, ์ „๋ฐ˜์ ์ธ UI ๊ตฌ์„ฑ๊ณผ ์Šคํƒ€์ผ์ด ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ ์„œ๋น„์Šค์—์„œ๋Š” ๊ณตํ†ต๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Button, Input ๊ฐ™์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ UI ์š”์†Œ์กฐ์ฐจ ์ค‘๋ณต์œผ๋กœ ์ž‘์„ฑ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ๋†’์ด๊ณ , ๋””์ž์ธ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๊ฐ๊ฐ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ณตํ†ต UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๋””์ž์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€๋กœ ์ •๋ฆฌํ•˜๊ณ  ๊ฐ ์„œ๋น„์Šค์—์„œ ์ด๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ ํŒจํ‚ค์ง€์™€ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๋””์ž์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ

์šฐ๋ฆฌํŒ€์ด ์„ ํƒํ•œ ๋ฐฉ๋ฒ•์€, ๋ชจ๋…ธ๋ ˆํฌ ์•ˆ์— ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด ๋ชจ๋“  ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด ํŒจํ‚ค์ง€ ์•ˆ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

packages ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์— /@packages/fds(Fromm Design System) ํŒจํ‚ค์ง€๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— ๊ณตํ†ต ๋ฒ„ํŠผ, ๋‹ค์ด์–ผ๋กœ๊ทธ ๋“ฑ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ fds
โ”ฃ ๐Ÿ“‚ .storybook         
โ”ฃ ๐Ÿ“‚ src                 
โ”ƒ โ”ฃ ๐Ÿ“‚ components        
โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚ molecules       
โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚ Button        
โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚ organisms       
โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚ Dialog        
โ”ƒ โ”ฃ ๐Ÿ“‚ foundations       
โ”ƒ โ”— ๐Ÿ“‚ utils             
โ”ฃ ๐Ÿ“‚ tokens              
โ”— ๐Ÿ“„ package.json        

๊ฐ ์„œ๋น„์Šค(ํ”„๋กฌ์Šคํ† ์–ด, ํ”„๋กฌ์ฑ„๋„)๋Š” ์ด ๋””์ž์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋” ์ด์ƒ ์„œ๋น„์Šค๋งˆ๋‹ค ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ค์น˜ ๋ฐฉ์‹

๊ณตํ†ต ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŒจํ‚ค์ง€๋ฅผ NPM ๊ฐ™์€ ์™ธ๋ถ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋ฐฐํฌํ•œ ํ›„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ชจ๋…ธ๋ ˆํฌ ๋‚ด๋ถ€์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•ด ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ธ ๋ชจ๋…ธ๋ ˆํฌ ๋‚ด ๋กœ์ปฌ ํŒจํ‚ค์ง€ ๋ฐฉ์‹ ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹๋„ ๊ณ ๋ คํ–ˆ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ๋‚ด๋ถ€ ํŒจํ‚ค์ง€ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜„์žฌ๋Š” ์‚ฌ๋‚ด ํ”„๋กœ์ ํŠธ์— ํ•œ์ •ํ•ด ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋ฐฐํฌ๊นŒ์ง€๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๋ฅผ ๋” ์œ ์—ฐํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋…ธ๋ ˆํฌ ๊ด€๋ฆฌ ๋„๊ตฌ(Turborepo)๋ฅผ ํ™œ์šฉํ•ด ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ fromm-web
โ”ฃ ๐Ÿ“‚ apps
โ”ƒ โ”ฃ ๐Ÿ“‚ store        # ํ”„๋กฌ์Šคํ† ์–ด ์„œ๋น„์Šค
โ”ƒ โ”— ๐Ÿ“‚ channel      # ํ”„๋กฌ์ฑ„๋„ ์„œ๋น„์Šค
โ”ฃ ๐Ÿ“‚ packages
โ”ƒ โ”— ๐Ÿ“‚ fds          # ํ”„๋กฌ ๋””์ž์ธ ์‹œ์Šคํ…œ (Fromm Design System)
  • /apps ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋Š” ์‹ค์ œ ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋“ค์–ด ์žˆ๊ณ 
  • /packages ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋Š” ๊ณตํ†ต ํŒจํ‚ค์ง€๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค์—์„œ๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ์„ workspace๋กœ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

pnpm add @packages/fds

๋ชจ๋…ธ๋ ˆํฌ ๋‚ด๋ถ€ ์—ฐ๊ฒฐ(workspace)์„ ํ†ตํ•ด ๋ณ„๋„์˜ ์™ธ๋ถ€ ๋ฐฐํฌ ์—†์ด๋„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋ คํ•œ ์ 

๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์‹ ๊ฒฝ ์“ด ๋ถ€๋ถ„์€ ๊ธฐ์กด ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์™€์˜ ๋ถ„๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค.

๊ณผ๊ฑฐ์— ์ž‘์„ฑํ–ˆ๋˜ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋น„์Šค๋ณ„๋กœ ์ปค์Šคํ…€๋œ ๋กœ์ง์ด๋‚˜ ์Šคํƒ€์ผ์ด ์„ž์—ฌ ์žˆ์–ด์„œ, ์ƒˆ๋กœ์šด ๋””์ž์ธ ์‹œ์Šคํ…œ์€ ์ตœ๋Œ€ํ•œ ๋…๋ฆฝ์ ์ด๊ณ  ํ‘œ์ค€ํ™”๋œ ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ๊ฐœ๋ฐœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋””์ž์ด๋„ˆ, ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ํ•˜๋ฉฐ, ๋ช…ํ™•ํ•œ ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ์ž‘์—…๋„ ํ•จ๊ป˜ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””์ž์ธ ์‹œ์Šคํ…œ ์Šคํ† ๋ฆฌ๋ถ

๋””์ž์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์ถ•ํ•œ ์ดํ›„, ์Šคํ† ๋ฆฌ๋ถ(Storybook) ์„ ์ ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ๋ถ์€ ๋‹จ์ˆœํžˆ ํŒ€ ๋‚ด ๊ฐœ๋ฐœ์ž ๊ฐ„ ๊ณต์œ ๋ฅผ ๋„˜์–ด์„œ, ๋””์ž์ด๋„ˆ์™€ ๊ธฐํš์ž ๋ถ„๋“ค๋„ ์ง์ ‘ ํ™•์ธํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ UI ํ†ต์ผ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ์Šคํ† ๋ฆฌ๋ถ์„ ๋นŒ๋“œํ•œ ํ›„, AWS S3์— ์ˆ˜๋™์œผ๋กœ ์—…๋กœ๋“œํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„์—๋Š” ์ปค๋ฐ‹๊ณผ ๋™์‹œ์— ์„œ๋ฒ„์— ์ตœ์‹  ๋ฒ„์ „์ด ์ž๋™ ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ๋„๋ก CI/CD ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ ๊ณผ์ •์„ ๋”์šฑ ๊ฐ„ํŽธํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

์ด๋ฒˆ ๋ชจ๋…ธ๋ ˆํฌ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด, ์šฐ๋ฆฌ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ด๊ณ , ๊ณตํ†ต UI ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ์˜ ์ผ๊ด€์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ, ๋ฒ„ํŠผ์ฒ˜๋Ÿผ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๊นŒ์ง€๋„ ๋””์ž์ธ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ํฐ ์˜๋ฏธ์˜€์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ, ๊พธ์ค€ํžˆ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ณ ๋„ํ™”ํ•˜๊ณ , ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋“ค๊ณผ์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐ€๋ฉด์„œ ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ