
๋ชจ๋ ธ๋ ํฌ ๊ธฐ๋ฐ ๋์์ธ ์์คํ ํจํค์ง ๊ตฌ์ถ๊ธฐ

- #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 ์ปดํฌ๋ํธ ๊ด๋ฆฌ์ ์ผ๊ด์ฑ์ ํ๋ณดํ ์ ์๊ฒ ๋์์ต๋๋ค.
ํนํ, ๋ฒํผ์ฒ๋ผ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ปดํฌ๋ํธ ํ๋๊น์ง๋ ๋์์ธ ์์คํ ์์์ ์ผ๊ด์ฑ ์๊ฒ ๊ด๋ฆฌํ ์ ์๋ค๋ ์ ์ด ํฐ ์๋ฏธ์์ต๋๋ค.
์์ผ๋ก, ๊พธ์คํ ๋์์ธ ์์คํ ์ ๊ณ ๋ํํ๊ณ , ๋ค๋ฅธ ํจํค์ง๋ค๊ณผ์ ์์กด์ฑ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํด ๋๊ฐ๋ฉด์ ๋ ๋์ ๊ฐ๋ฐ ๊ฒฝํ์ ๋ง๋ค์ด ๋๊ฐ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค!