-
์ฌ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ ๊ธฐ๋ก (feat. monorepo, submodule)๐ FE 2024. 4. 9. 11:04
๋ฌธ์ ๋ฐฐ๊ฒฝ
- ์ฝ๋ ์ปจ๋ฒค์
์์ด
30์ฌ ๊ฐ๊ฐ ๋๋ ์ฌ๋ด ์์คํ ์ ๊ฐ๋ณ ๋ด๋น์๊ฐ ๊ด๋ฆฌํ๋ฉฐ, ์์ดํ ์ฝ๋ ์ปจ๋ฒค์ ์ผ๋ก ์ ์ง ๋ณด์์ ๋ง์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ ์ด์. - ์ฐ์ฌ๋์ด ์๋ ๊ณตํต ์ปดํฌ๋ํธ / ๋ก์ง
์ฐ์ฌ๋์ด ์๋ ์ปดํฌ๋ํธ / ํ / ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ๊ท ๊ฐ๋ฐ ๋ฐ ์ด์์ ์์ด ๋ฐ๋ณต์ ์ธ ๊ณต์๊ฐ ๋ค์ด๊ฐ๋ ์ด์ - ํจํค์ง ๋ฒ์ ์์ด
ํ๋ก์ ํธ ๋ณ ํธํ๋์ง ์๋ ํจํค์ง ๋ฒ์ ์ ์ฌ์ฉํ๋ฉฐ ์ฝ๋ ํต์ผ์ฑ์ ํด์น๋ ๋ฌธ์ .
๋ชฉํ
๊ณตํต ๋ก์ง(์ปดํฌ๋ํธ/ํ /์ ํธํจ์)์ ๋ณ๋์ ๋ ํฌ์งํ ๋ฆฌ๋ก ๋ถ๋ฆฌํ๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋๊ฐ ๊ฐ๋ฅํด์ง๊ฒ ๊ตฌ์ฑํ์ฌ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ์ฅํด์ ์ฌ์ฉํ ์ ์๊ฒ ํจ์ ๋ชฉํ๋ก ํจ.
๋ชฉํ ๋ฌ์ฑ์ ์ํ์ฌ ๋ค์ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ์. (1) ๊น ์๋ธ ๋ชจ๋, (2) npm ํจํค์ง ๊ฐ๋ฐ. ๊ฐ๊ฐ์ ๋ฐฉ๋ฒ์ด ์ ๋ง๋ค์ ์ด๋ ค์์ด ์์ด ๊ฒฐ๋ก ์ ์ผ๋ก ์ฌ๋ด์์คํ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋ npm ํจํค์ง๋ฅผ ๊ฐ๋ฐํ๊ธฐ๋ก ์ ํ์์.
์๋
(1) ๊น ์๋ธ ๋ชจ๋ (xx)
๋ณ๋์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๊น ์๋ธ๋ชจ๋๋ก ๋ถ๋ฌ์ ํ์ฅํด ์ฌ์ฉํ๋ ๋ฐฉ์์๋ ๋ค์ ๋ฌธ์ ๊ฐ ์์์.
1. ์ด์ํ ํด๋ ๊ตฌ์กฐ
๋ค์๊ณผ ๊ฐ์ด ํ๋์ ํ๋ก์ ํธ ๋ด ์ฌ๋ฌ ๊ฐ์ node_modules๊ฐ ์์นํ๋ ์ด์ํ ํด๋ ๊ตฌ์กฐ๊ฐ ๋จ. ๋ค์ค node_modules๋ก ์คํ์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ํจํค์ง ๊ฒฝ๋ก ์ฐพ๊ธฐ ์ค๋ฅ๋ ์์์.
๐ฆ ๋ถ๋ชจํ๋ก์ ํธ
โฃ ๐ node_modules
โฃ ๐ฆ์๋ธ๋ชจ๋
โ โฃ ๐ node_modules
2. ๋ํต์ ์ผ์ผํค๋ ์ฑํฌ ๋ง์ถ๊ธฐ
๋ฉ์ธ ํ๋ก์ ํธ์์๋ ์๋ธ ๋ชจ๋์ ์ปค๋ฐ ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ์ง ์๊ณ commit hash๋ฅผ ์ ์ฅํจ. ๊ทธ๋์ ์๋ธ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด, ์๋ธ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ์ปค๋ฐํ ํ์ ๋ฉ์ธ ํ๋ก์ ํธ์์๋ ํ๋ฒ ๋ ์ปค๋ฐ์ ํด์ผ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์๋จ.
์๋ธ ๋ชจ๋์ ๋ธ๋์น๋ ๋ฉ์ธ ํ๋ก์ ํธ์ ๋ธ๋์น์ ๋ณ๊ฐ๋ก ๋์ํ์ฌ ๋ฉ์ธ ํ๋ก์ ํธ์ ์ ๋ธ๋์น ์์ฑ ์ ์๋ธ๋ชจ๋ ๋ธ๋์น๋ ํจ๊ป ๋ถ๊ธฐํด์ ์ฌ์ฉํด์ผ ํจ. ํ๋ก์ ํธ์ ์์ ์ฌํญ์ด ์๊ธธ ๋๋ง๋ค ์๋ธ๋ชจ๋ ๋ธ๋์น๊น์ง ๊ด๋ฆฌํด ์ฃผ๋ ๊ฒ์ด ๊ฝค๋ ๊ท์ฐฎ์ ์์ ์ด...
(2) npm ํจํค์ง ๊ฐ๋ฐ (oo)
๋ฒ์ ๊ด๋ฆฌ๋ ํ์ฉ๋ ์ธก๋ฉด์์ ์ฅ๊ธฐ์ ์ผ๋ก ์ฌ๋ด์์คํ ๊ณต์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์ด ๋ ๋น ๋ฅธ ๊ธธ์ด๋ผ๊ณ ํ๋จํจ. ๊ทธ ๊ณผ์ ์์ ์ฌ๋ฌ ์ฌ๋ด ์์คํ ๊ณผ-๋์์ธ ์์คํ ์ ๋ถ๋ฆฌ๋ ์ํฌ ์คํ์ด์ค์์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ชจ๋ ธ๋ ํฌ ๋์ ์ ๊ณ ๋ คํ์ง๋ง... ์ฌ์ค์ ใ ใ
๋ชจ๋ ธ๋ ํฌ ์ํคํ ์ณ ๋์์ธ ์์คํ ๋ถ๋ฆฌ๋ฅผ ์ํด ์ต์ข ์ ์ผ๋ก ํ๋ก์ ํธ ์ํคํ ์ฒ๋ฅผ ์ ์ด๋ฏธ์ง์ฒ๋ผ ๋ฐ๊พธ์ด์ผ ํ์.
๋น๊ต์ ์ต๊ทผ์ ์ฌ๋ด์์ ๊ณ ์ฐฉ๋ ํ๋ ์์ํฌ๋ asp.net core + react ์กฐํฉ์ธ๋ฐ, ๊น์์๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์ฝ๋๊ฐ ๊ฐ์ ์ ์ฅ์์์ ๊ด๋ฆฌ๋๊ณ ์์์.
๋ํ ํ์ฌ 30์ฌ ๊ฐ๊ฐ ๋๋ ์ฌ๋ด ์์คํ ์ asp.net core mvc, asp.net wep api, webform ๋ฑ ์ผ๊ด์ ์ด์ง ์์ ์ํคํ ์ฒ๋ก ๊ฐ๊ธฐ ๊ตฌ์ฑ๋ ํ๋ก์ ํธ๊ฐ ๋ง์๋ฐ, ์ด ์ค์ ํ๋ก ํธ์ ๋ฐฑ๋จ์ด ๋ถ๋ฆฌ๋์ง ์๊ณ , ํ๋ก ํธ ํ์ผ์ด ์๋ฒ์์ ๊ตฌ์ฑ๋๋ webform ํํ์ ํ๋ก์ ํธ๋ ๋ง์๊ธฐ์ ์ ์ด์ ๋์์ธ ์์คํ ๋ถ๋ฆฌ๊ฐ ์ด๋ ค์ด ํ๊ฒฝ์ด๊ธฐ๋ ํ์.
๊ธฐ์กด ์ํคํ ์ณ ์ด๋ค ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐฉ์์ ๋ชจ๋ ธ๋ ํฌ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๊ณ , ์ด๋ค ํ๋ก์ ํธ๋ ๊ธฐ์กด ์ํคํ ์ฒ๋ฅผ ์ ์งํ๋ ๊ฒ, ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์กฐ์ ๊น ์ ์ฅ์ ๊ตฌ์กฐ๊ฐ ์์ดํจ์์ ์ค๋ ํผ์ ์ด ์ ์ง๋ณด์์ ๋น์ฉ์ ๋ฐ์ํ ์ ์๊ฒ ๋ค๋ ํ๋จํ์ ์์ค ๊ด๋ฆฌ ๋ฐฉ์์ ํ๋ก์ ํธ ๋น ํ๋์ ๊น ์ ์ฅ์๋ฅผ ์ ์งํ๊ธฐ๋ก! ๋ชจ๋ ธ๋ ํฌ ๋์ ์ ์ ์ธ! ์ฌ์ด๋ ํ๋ก์ ํธ ํ ๋๋ง ์ฌ์ฉํด ๋ด์ผ์ง!
๊ฒฐ๋ก
๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ / ํ / ์ ํธํจ์๋ฅผ ๊ณต์ ํ ์ ์๋ ํจํค์ง ๊ฐ๋ฐ์ ๋ชฉํ๋ก ์ก์. ํ์ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ถ ์ด๊ธฐ ๋จ๊ณ๋ก ์ถ๊ฐ๋ก ์์ฑ๋ ์ปดํฌ๋ํธ๊ฐ ๋งค์ฐ ๋ง๋ค๊ณ ํ๋จํ์ฌ, ๋ฒ์ ๊ด๋ฆฌ์ ์ด๋ ค์์ด ์์๋์์. ์ด๋ ์ ๋ ์ถ๊ฐ๋ ์ปดํฌ๋ํธ๊ฐ ๋๋ ์๊ฒ ๋ค๋ ํ๋จ์ด ์ด๋ค์ง๋ ์์ ์ npm private ํจํค์ง ๋ฐฐํฌ ์์ ! ๊ทธ์ ๊น์ง ๋น๋๋ ๋ค์ ๋ฐฉ์์ผ๋ก ์ด๋ค์ง.
// ๊ณตํต๋ชจ๋: ProjectF // ๋์ ํ๋ก์ ํธ: ProjectA "build": "tsc && vite build && rimraf <<ProjectA ์ node_modules ๊ฒฝ๋ก>>\\<<๊ณตํต๋ชจ๋ํ๋ก์ ํธ๋ช >> && md <<ProjectA ์ node_modules ๊ฒฝ๋ก>>\\<<๊ณตํต๋ชจ๋ํ๋ก์ ํธ๋ช >>\\dist && xcopy /y /s .\\dist <<ProjectA ์ node_modules ๊ฒฝ๋ก>>\\<<๊ณตํต๋ชจ๋ํ๋ก์ ํธ๋ช >>\\dist /E && copy <<ProjectF์ package.json ๊ฒฝ๋ก>> <<ProjectA ์ node_modules ๊ฒฝ๋ก>>\\<<๊ณตํต๋ชจ๋ํ๋ก์ ํธ๋ช >>\\ /Y",
๋ํ ์คํ ๋ฆฌ๋ถ์ UI ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ์, ํ ์ด๋ ์ ํธํจ์๋ ๋ณ๋์ ๋ฌธ์ํ ํ ํ๋ฆฟ ์ ์ ๊ณผ์ ์ด ํ์ํ๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์๋นํ ์ฝ์ง์ด ์์์. vite lib mode + storybook v8 + typescript + typedoc๋ฅผ ์ฌ์ฉํด์ ์คํ ๋ฆฌ ์ ์์ ์ต๋ํ ๊ณต์๊ฐ ๋ค์ง ์๊ฒ ๊ฐ๋ฐํ์๊ณ , ๊ทธ ๋ด์ฉ์ ๋ค์ ํฌ์คํ ์ ์ด์ด์ง๋๋ค!
'๐ FE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธ ์ฌ์ด ์ด๋ฏธ์ง ๋ฃ๊ณ ๊ด๋ฆฌํ๊ธฐ (1) 2023.09.03 - ์ฝ๋ ์ปจ๋ฒค์
์์ด