๋ชจ๋ ธ๋ ํฌ ๊ตฌ์ถ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ํ๋ก ํธ์๋ Lerna ์ข ํฉ ๊ฐ์ด๋. ํจ์จ์ ์ธ ์ํฌํ๋ก์ฐ์ ๊ฐ์ํ๋ ํ์ ์ผ๋ก ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ์ ์ญ๋์ ๊ฐํํฉ๋๋ค.
ํ๋ก ํธ์๋ Lerna: ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ์ ์ํ ๋ชจ๋ ธ๋ ํฌ ๊ด๋ฆฌ ๋ง์คํฐํ๊ธฐ
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ณต์กํ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ํนํ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ์๊ฒ ์๋นํ ์ด๋ ค์์ ์ค ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ธ ์ ์ฅ์๋ฅผ ์ ์งํ๋ ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฝ๋ ์ค๋ณต, ์ผ๊ด์ฑ ์๋ ์ข ์์ฑ, ํํธํ๋ ๊ฐ๋ฐ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ๋ชจ๋ ธ๋ ํฌ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด Lerna์ ๊ฐ์ ํจ๊ณผ์ ์ธ ๊ด๋ฆฌ ๋๊ตฌ์ ๊ฒฐํฉํ์ฌ ์ง์ ์ผ๋ก ๋น์ ๋ฐํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ํ๋ก ํธ์๋ Lerna์ ๋ํด ์์ธํ ์์๋ณด๊ณ , ๊ทธ ์ด์ , ์ค์ ๊ตฌํ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ต์ ํํ๊ณ ๊ธ๋ก๋ฒ ํ ์ ๋ฐ์ ๊ฑธ์ณ ์ํํ ํ์ ์ ์ด์งํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ๊ตฌํ ๊ฒ์ ๋๋ค.
๋ชจ๋ ธ๋ ํฌ๋ ๋ฌด์์ธ๊ฐ์?
๋ชจ๋ ธ๋ ํฌ(monolithic repository์ ์ค์๋ง)๋ ์ฌ๋ฌ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ฝ๋๊ฐ ๋์ผํ ๋ฒ์ ๊ด๋ฆฌ ์ ์ฅ์์ ์ ์ฅ๋๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ ๋ต์ ๋๋ค. ์ด๋ ๊ฐ ํ๋ก์ ํธ๊ฐ ์์ฒด ๊ฐ๋ณ ์ ์ฅ์์ ์์ฃผํ๋ ํด๋ฆฌ๋ ํฌ(polyrepo) ์ ๊ทผ ๋ฐฉ์๊ณผ ๋์กฐ๋ฉ๋๋ค.
๋ชจ๋ ธ๋ ํฌ์ ๊ฐ๋ ์ ์ค๋ ์ ๋ถํฐ ์กด์ฌํ์ง๋ง, ํนํ ๋๊ท๋ชจ ์กฐ์ง๊ณผ ๊ณตํต ์ข ์์ฑ ๋๋ ๊ธฐ๋ฅ์ ๊ณต์ ํ๋ ํ๋ก์ ํธ์์ ์ต๊ทผ ๋ช ๋ ๋์ ๊ทธ ์ฑํ์ด ๊ธ์ฆํ์ต๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๊ฒฝ์ฐ, ๋ชจ๋ ธ๋ ํฌ๋ ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ , ๊ณต์ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ ํธ๋ฆฌํฐ ํจํค์ง, ์ฌ์ง์ด ๋ฐฑ์๋ ์๋น์ค๊น์ง ๋ชจ๋ ๋จ์ผ ์ ์ฅ์ ๊ตฌ์กฐ ๋ด์ ๋ด์ ์ ์์ต๋๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ ํํ๋ ์ด์ ?
ํ๋ก ํธ์๋ ํ๋ก์ ํธ์ ๋ชจ๋ ธ๋ ํฌ ์ ๋ต์ ์ฑํํ๋ ๊ฒ์ ์ด์ ์ ๋ค์ํ๋ฉฐ ๊ฐ๋ฐ์ ์์ฐ์ฑ, ์ฝ๋ ํ์ง ๋ฐ ์ ๋ฐ์ ์ธ ํ๋ก์ ํธ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ ๋๋ค:
- ๊ฐ์ํ๋ ์์กด์ฑ ๊ด๋ฆฌ: ์ฌ๋ฌ ์ ์ฅ์์ ๊ฑธ์ณ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ๋ชฝ์ผ ์ ์์ต๋๋ค. ๋ชจ๋ ธ๋ ํฌ์์๋ ์์กด์ฑ์ ์ต์์ ๋ ๋ฒจ๋ก ๋์ด์ฌ๋ ค ๊ฐ ์์กด์ฑ์ ๋จ์ผ ๋ฒ์ ์ด ๋ชจ๋ ํจํค์ง์ ์ค์น๋๊ณ ๊ณต์ ๋๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ํด๋ฆฌ๋ ํฌ ์ค์ ์์ ํํ ๋ฐ์ํ๋ "์์กด์ฑ ์ง์ฅ"์ ํฌ๊ฒ ์ค์ฌ์ค๋๋ค.
- ์์์ ์ปค๋ฐ ๋ฐ ๋ฆฌํฉํฐ๋ง: ์ฌ๋ฌ ํ๋ก์ ํธ์ ๊ฑธ์น ๋ณ๊ฒฝ ์ฌํญ์ ์์์ ์ผ๋ก ์ปค๋ฐํ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ผ ์ปค๋ฐ์ผ๋ก ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์ ๋ฐ์ดํธํ์ฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ณ ํตํฉ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋๊ท๋ชจ ๋ฆฌํฉํฐ๋ง์ด ํจ์ฌ ์ฝ๊ณ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค.
- ์ฝ๋ ๊ณต์ ๋ฐ ์ฌ์ฌ์ฉ์ฑ: ๋ชจ๋ ธ๋ ํฌ๋ ์์ฐ์ค๋ฝ๊ฒ ์ฝ๋ ๊ณต์ ๋ฅผ ์ฅ๋ คํฉ๋๋ค. ๊ณต์ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ ํธ๋ฆฌํฐ ํจ์ ๋ฐ ๋์์ธ ์์คํ ์ ๋์ผํ ์ ์ฅ์ ๋ด์ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ์ฝ๊ฒ ๊ฐ๋ฐ ๋ฐ ์ฌ์ฉ๋ ์ ์์ด ์ผ๊ด์ฑ์ ์ด์งํ๊ณ ์ค๋ณต์ ์ค์ ๋๋ค.
- ๊ฐ์ํ๋ ๊ฐ๋ฐ ๊ฒฝํ: ๋จ์ผ ์ง์ค ๊ณต๊ธ์(single source of truth)์ ํตํด ๊ฐ๋ฐ์๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฝ๊ฒ ํ์ํ๊ณ ์์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ธ๋ ํฌ์ ํตํฉ๋ ๋๊ตฌ๋ ํจํค์ง ๊ฐ์ ๊ด๊ณ๋ฅผ ์ดํดํ์ฌ ํฌ๋ก์ค ํจํค์ง ์ฐ๊ฒฐ ๋ฐ ์ต์ ํ๋ ๋น๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ผ๊ด๋ ํด๋ง ๋ฐ ๊ตฌ์ฑ: ๋ชจ๋ ํ๋ก์ ํธ์ ๊ฑธ์ณ ์ผ๊ด๋ ๋น๋ ๋๊ตฌ, ๋ฆฐํฐ, ํฌ๋งทํฐ ๋ฐ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ๋จํด์ง๋๋ค. ์ด๋ ๋์ฑ ๊ท ์ผํ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ์ด์ด์ง๊ณ ๊ฐ๋ฐ์์ ์ธ์ง ๋ถํ๋ฅผ ์ค์ฌ์ค๋๋ค.
- ๊ธ๋ก๋ฒ ํ์ ์ํ ์ฌ์ด ํ์ : ์๋ก ๋ค๋ฅธ ์๊ฐ๋์ ๊ฑธ์ณ ์์ ํ๋ ๊ตญ์ ํ์ ๊ฒฝ์ฐ, ๋ชจ๋ ธ๋ ํฌ๋ ๋ชจ๋ ์ฝ๋์ ๋ํ ๋จ์ผํ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ์ง์ค ๊ณต๊ธ์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์กฐ์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ๋ชจ๋ ์ฌ๋์ด ๊ณต์ ์ฝ๋์ ์ต์ ๋ฒ์ ์ผ๋ก ์์ ํ๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
Lerna ์๊ฐ: ๋น์ ์ ๋ชจ๋ ธ๋ ํฌ ๋๋ฐ์
๋ชจ๋ ธ๋ ํฌ์ ๊ฐ๋ ์ ๊ฐ๋ ฅํ์ง๋ง, ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด ์ ๋ฌธ์ ์ธ ํด๋ง์ด ํ์ํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ Lerna๊ฐ ๋ฑ์ฅํฉ๋๋ค. Lerna๋ ์ฌ๋ฌ ํจํค์ง๋ฅผ ๊ฐ์ง JavaScript ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ธ๊ธฐ ์๋ ํด์ฒด์ธ์ ๋๋ค. ์ด๋ ๋ชจ๋ ธ๋ ํฌ์ ํจํค์ง๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ฒ์ํ์ฌ ์ผ๊ด๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ณ ์ ๋ฐ์ดํธ ๊ฒ์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Lerna๋ ๋ชจ๋ ธ๋ ํฌ ๊ด๋ฆฌ์ ์ฌ๋ฌ ํต์ฌ์ ์ธ ๊ณผ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค:
- ํจํค์ง ๊ฒ์ ๋ฐ ๊ด๋ฆฌ: Lerna๋ ๋ชจ๋ ธ๋ ํฌ ๋ด์ ํจํค์ง๋ฅผ ์๋์ผ๋ก ๊ฒ์ํ์ฌ ๋ชจ๋ ํจํค์ง ๋๋ ์ผ๋ถ ํจํค์ง์ ๊ฑธ์ณ ๋ช ๋ น์ ์คํํ ์ ์๋๋ก ํฉ๋๋ค.
- ์์กด์ฑ ์ฐ๊ฒฐ: ๋ชจ๋ ธ๋ ํฌ ๋ด์ ๋ก์ปฌ ํจํค์ง๋ฅผ ์๋์ผ๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌํ์ฌ ํจํค์ง๊ฐ ๋จผ์ ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์๋ ํ์ ์์ด ์๋ก ์์กดํ ์ ์๋๋ก ํฉ๋๋ค.
- ๋ฒ์ ๊ด๋ฆฌ: Lerna๋ ์ ์ฐํ ๋ฒ์ ๊ด๋ฆฌ ์ ๋ต์ ์ ๊ณตํ์ฌ ๋ชจ๋ ํจํค์ง์ ๋ฒ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋๋ ๋์์ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
- ๊ฒ์: ์ ๋ฐ์ดํธ๋ ํจํค์ง๋ฅผ npm ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ๋ฒ์ ๋ฒํ ๋ฐ ๋ณ๊ฒฝ ๋ก๊ทธ ์์ฑ์ ์ฒ๋ฆฌํฉ๋๋ค.
Lerna๋ก ํ๋ก ํธ์๋ ๋ชจ๋ ธ๋ ํฌ ์ค์ ํ๊ธฐ
Lerna๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก ํธ์๋ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ค์ ํ๋ ํ์ ๋จ๊ณ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. Node.js์ npm (๋๋ Yarn)์ด ์ ์ญ์ผ๋ก ์ค์น๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
1. ์ Lerna ์ ์ฅ์ ์ด๊ธฐํ
๋จผ์ , ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ํ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ Lerna๋ก ์ด๊ธฐํํฉ๋๋ค:
mkdir my-frontend-monorepo
cd my-frontend-monorepo
lerna init
์ด ๋ช
๋ น์ ๊ธฐ๋ณธ์ ์ธ Lerna ๊ตฌ์ฑ ํ์ผ(lerna.json
)์ ์์ฑํ๊ณ ๊ฐ๋ณ ํจํค์ง๊ฐ ์์นํ packages
๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค.
2. ํจํค์ง ๊ด๋ฆฌ์ ์ ํ
Lerna๋ npm๊ณผ Yarn์ ๋ชจ๋ ์ง์ํฉ๋๋ค. lerna.json
์์ ์ ํธํ๋ ๊ฒ์ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Yarn์ ์ฌ์ฉํ๋ ค๋ฉด:
{
"packages": [
"packages/*"
],
"version": "0.0.0",
"npmClient": "yarn",
"useWorkspaces": true
}
Yarn ๋๋ npm v7+๋ฅผ ์ฌ์ฉํ ๋ useWorkspaces: true
๋ฅผ ์ค์ ํ๋ฉด ๋ด์ฅ๋ ์ํฌ์คํ์ด์ค ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์์กด์ฑ ์ค์น ๋ฐ ์ฐ๊ฒฐ์ ๋์ฑ ์ต์ ํํ ์ ์์ต๋๋ค. npm v7+๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด package-lock.json
๋๋ npm-shrinkwrap.json
์ด ์ปค๋ฐ๋์ด ์๋์ง ํ์ธํ์ญ์์ค.
3. ์ฒซ ๋ฒ์งธ ํ๋ก ํธ์๋ ํจํค์ง ์์ฑ
packages
๋๋ ํ ๋ฆฌ ์์ ๊ฐ๋ณ ํ๋ก ํธ์๋ ํ๋ก์ ํธ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํ ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ณต์ UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ๋จํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
mkdir packages/ui-components
mkdir packages/web-app
์ด์ ๊ฐ ์ ํจํค์ง ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ npm/Yarn ํจํค์ง๋ฅผ ์ด๊ธฐํํฉ๋๋ค:
cd packages/ui-components
yarn init -y
# Or npm init -y
cd ../web-app
yarn init -y
# Or npm init -y
packages/ui-components/package.json
๋ด๋ถ์๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ UI ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. packages/web-app/package.json
๋ด๋ถ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์กด์ฑ์ ์ ์ํฉ๋๋ค.
4. Lerna๋ก ํจํค์ง ์ฐ๊ฒฐ
web-app
์ด ui-components
์ ์์กดํ๋๋ก ํ๋ ค๋ฉด Lerna์ ๋ช
๋ น์ค ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จผ์ , lerna.json
์ด ํจํค์ง๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒ์ํ๋๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค:
{
"packages": [
"packages/*"
],
"version": "0.0.0",
"npmClient": "yarn",
"useWorkspaces": true
}
์ด์ ๋ชจ๋ ธ๋ ํฌ์ ๋ฃจํธ์์ ๋ค์์ ์คํํฉ๋๋ค:
lerna add @my-monorepo/ui-components --scope=@my-monorepo/web-app
์ฐธ๊ณ : @my-monorepo/ui-components
์ @my-monorepo/web-app
์ ๊ฐ package.json
ํ์ผ์ ์ ์๋ ์ค์ ํจํค์ง ์ด๋ฆ์ผ๋ก ๋์ฒดํ์ญ์์ค. ๊ฐ ํจํค์ง์ package.json
ํ์ผ์์ name
ํ๋๋ฅผ ์ด ์ค์ฝํ๋ฅผ ๋ฐ์ํ๋๋ก ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
Lerna๋ ํ์ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. Yarn Workspaces ๋๋ npm Workspaces๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๋ฃจํธ package.json
์ workspaces
ํ๋๋ฅผ ๊ตฌ์ฑํด์ผ ํ ์๋ ์์ต๋๋ค:
root/package.json { "name": "my-frontend-monorepo", "private": true, "workspaces": [ "packages/*" ] }
์ํฌ์คํ์ด์ค๊ฐ ๊ตฌ์ฑ๋๋ฉด Lerna์ `add` ๋ช ๋ น์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์์ ์ํฌ์คํ์ด์ค ์ฐ๊ฒฐ์ ๋ ์์กดํ์ฌ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์์ต๋๋ค. ๋ฃจํธ์์ `yarn install` ๋๋ `npm install`์ ์คํํ๋ฉด ์ํฌ์คํ์ด์ค๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
5. ํจํค์ง ์ ๋ฐ์ ๊ฑธ์ณ ๋ช ๋ น ์คํ
Lerna๋ ์ฌ๋ฌ ํจํค์ง์ ๊ฑธ์ณ ๋ช ๋ น์ ์คํํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ ํจํค์ง๋ฅผ ๋ถํธ์คํธ๋ฉํ๋ ค๋ฉด (์์กด์ฑ ์ค์น ๋ฐ ์ฐ๊ฒฐ):
lerna bootstrap
๊ฐ ํจํค์ง์ package.json
์ ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๋ฉด (์: build
์คํฌ๋ฆฝํธ):
lerna run build
ํน์ ํจํค์ง์์ ๋ช ๋ น์ ์คํํ ์๋ ์์ต๋๋ค:
lerna run build --scope=@my-monorepo/web-app
๋๋ ํน์ ํจํค์ง๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค:
lerna run build --no-private --exclude=@my-monorepo/ui-components
๊ธ๋ก๋ฒ ํ์ ์ํ Lerna ๊ณ ๊ธ ๊ธฐ๋ฅ
๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ธ์๋ Lerna๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ์ ํนํ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
6. ๋ฒ์ ๊ด๋ฆฌ ์ ๋ต
Lerna๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฒ์ ๊ด๋ฆฌ ์ ๋ต์ ์ ๊ณตํฉ๋๋ค:
- ๊ณ ์ ๋ฒ์ ๊ด๋ฆฌ(๊ธฐ๋ณธ): ๋ชจ๋ ธ๋ ํฌ์ ๋ชจ๋ ํจํค์ง๋ ๋จ์ผ ๋ฒ์ ์ ๊ณต์ ํฉ๋๋ค. ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๋ฉด ๋ชจ๋ ํจํค์ง์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ ํจํค์ง ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ํ๋ก์ ํธ์ ์ด์์ ์ ๋๋ค.
- ๋ ๋ฆฝ ๋ฒ์ ๊ด๋ฆฌ: ๊ฐ ํจํค์ง๋ ์์ฒด ๋ ๋ฆฝ์ ์ธ ๋ฒ์ ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ ํจํค์ง๊ฐ ๋ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๊ณ ๋ค๋ฅธ ์๊ฐ์ ์ ๋ฐ์ดํธ ๋ฐ ๋ฆด๋ฆฌ์ค๋ ์ ์์ ๋ ์ ์ฉํฉ๋๋ค.
lerna.json
์์ ์ด๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
{
// ... other settings
"version": "1.0.0" // For fixed versioning
}
๋๋ ๋ ๋ฆฝ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ์ฑํํฉ๋๋ค:
{
// ... other settings
"version": "independent"
}
๋ ๋ฆฝ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋, Lerna๋ ๊ฒ์ ์์ ์ค์ ์ด๋ค ํจํค์ง๊ฐ ๋ณ๊ฒฝ๋์๊ณ ๋ฒ์ ๋ฒํ์ด ํ์ํ์ง ์ง์ ํ๋๋ก ํ๋กฌํํธ๋ฅผ ํ์ํฉ๋๋ค.
7. ํจํค์ง ๊ฒ์
Lerna๋ npm ๋๋ ๋ค๋ฅธ ๋ ์ง์คํธ๋ฆฌ์ ํจํค์ง๋ฅผ ๊ฒ์ํ๋ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ๋ง๋ญ๋๋ค.
๋จผ์ , ํจํค์ง๊ฐ ์ ์ ํ package.json
ํ์ผ(์ด๋ฆ, ๋ฒ์ , ๊ทธ๋ฆฌ๊ณ ๋น๊ณต๊ฐ ํจํค์ง ๋๋ ์ค์ฝํ ํจํค์ง๋ฅผ ์ํ publishConfig
ํฌํจ)๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํ์ญ์์ค.
์ ๋ฐ์ดํธ๋ ๋ชจ๋ ํจํค์ง๋ฅผ ๊ฒ์ํ๋ ค๋ฉด:
lerna publish
Lerna๋ ๋ง์ง๋ง ๊ฒ์ ์ดํ ๋ณ๊ฒฝ๋ ํจํค์ง๋ฅผ ํ์ธํ๊ณ , (์๋ํ๋์ง ์์ ๊ฒฝ์ฐ) ๋ฒ์ ์ ์ฆ๊ฐ์ํค๋๋ก ํ๋กฌํํธ๋ฅผ ํ์ํ ๋ค์ ๊ฒ์ํฉ๋๋ค. conventional-changelog
์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ ๋ฒํ ๋ฐ ๋ณ๊ฒฝ ๋ก๊ทธ ์์ฑ์ ์๋ํํ ์๋ ์์ต๋๋ค.
Azure Artifacts, GitHub Packages ๋๋ Artifactory์ ๊ฐ์ ๋น๊ณต๊ฐ npm ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํ๋ ๊ตญ์ ํ์ ๊ฒฝ์ฐ, CI/CD ํ์ดํ๋ผ์ธ์ด ์ฌ๋ฐ๋ฅธ ์ธ์ฆ ํ ํฐ ๋ฐ ๋ ์ง์คํธ๋ฆฌ URL๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ์ญ์์ค.
8. ์ง์์ ํตํฉ ๋ฐ ์ง์์ ๋ฐฐํฌ (CI/CD)
Lerna๋ฅผ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉํ๋ ๊ฒ์ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
Lerna ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ํ ์ฃผ์ CI/CD ๊ณ ๋ ค ์ฌํญ:
- ์บ์ฑ: ๋น๋ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํด
node_modules
๋๋ ํ ๋ฆฌ์ ๋น๋ ์ํฐํฉํธ๋ฅผ ์บ์ํฉ๋๋ค. - ์ ํ์ ๋น๋: ํน์ ์ปค๋ฐ์์ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ํจํค์ง๋ง ๋น๋ํ๊ณ ํ
์คํธํ๋๋ก CI๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
lerna changed
๋๋lerna run --affected
์ ๊ฐ์ ๋๊ตฌ๋ ๋ณ๊ฒฝ๋ ํจํค์ง๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. - ๋ณ๋ ฌํ: Lerna์ ๋ณ๋ ฌ ๋ช ๋ น ์คํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ CI ์์ ์๋๋ฅผ ๋์ ๋๋ค.
- ๊ฒ์ ์ ๋ต: ํนํ ๋ ๋ฆฝ ๋ฒ์ ๊ด๋ฆฌ์ ๊ฒฝ์ฐ ํจํค์ง๊ฐ ์ธ์ ์ด๋ป๊ฒ ๊ฒ์๋๋์ง์ ๋ํ ๋ช ํํ ๊ท์น์ ์ ์ํฉ๋๋ค. Git ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
CI/CD ์ํฌํ๋ก์ฐ ์ค๋ํซ ์์ (๊ฐ๋ ์ ):
# ... setup Node.js environment ... # Install dependencies using the package manager configured in lerna.json RUN yarn install --frozen-lockfile # or npm ci # Run linters and tests on changed packages RUN lerna run lint --stream --affected RUN lerna run test --stream --affected # Build packages RUN lerna run build --stream --affected # If changes detected and configured to publish, run publish # Consider using specific GitHub Actions or GitLab CI jobs for publishing # RUN lerna publish from-git --yes
๊ธ๋ก๋ฒ ํ์ ๊ฒฝ์ฐ, CI/CD ๋ฌ๋๊ฐ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋์ด ์๊ฑฐ๋ ์ค์ํ ๋น๋ ๋ฐ ๋ฐฐํฌ ๋จ๊ณ์์ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ์ญ์์ค.
ํ๋ก ํธ์๋ Lerna ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
Lerna ๋ชจ๋ ธ๋ ํฌ์ ์ด์ ์ ๊ทน๋ํํ๊ณ ๊ธ๋ก๋ฒ ํ์ ์ํ ์ํํ ๊ฒฝํ์ ๋ณด์ฅํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
9. ์ผ๊ด๋ ๋ช ๋ช ๊ท์น
ํจํค์ง์ ์ผ๊ด๋ ๋ช
๋ช
๊ท์น์ ์ฑํํ์ญ์์ค. ์ผ๋ฐ์ ์ผ๋ก ์ค์ฝํ ์ด๋ฆ(์: @my-company/ui-components
, @my-company/auth-service
)์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ํนํ ๋๊ท๋ชจ ๋ชจ๋
ธ๋ ํฌ์์ ๋ช
ํ์ฑ๊ณผ ๊ตฌ์ฑ๋ ฅ์ ํฅ์์ํต๋๋ค.
10. ๋ช ํํ ํจํค์ง ๊ฒฝ๊ณ
๋ชจ๋ ธ๋ ํฌ๋ ์ฝ๋ ๊ณต์ ๋ฅผ ์ฅ๋ คํ์ง๋ง, ํจํค์ง ๊ฐ์ ๋ช ํํ ๊ฒฝ๊ณ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋๋ ์ค๊ณ(์: ๊ธฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๊ฐ ์๋ ํ, ํ ํจํค์ง์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ํจํค์ง์ ๊ด๋ฒ์ํ ๋ณ๊ฒฝ์ ํ์๋ก ํ๋ ๋ฐ์ ํ ๊ฒฐํฉ์ ๋ง๋ค์ง ๋ง์ญ์์ค.
11. ์ค์ ์ง์ค์ ๋ฆฐํ ๋ฐ ํฌ๋งทํ
Lerna๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํจํค์ง์ ๊ฑธ์ณ ์ผ๊ด๋ ๋ฆฐํ ๋ฐ ํฌ๋งทํ ๊ท์น์ ์ ์ฉํ์ญ์์ค. ESLint, Prettier, Stylelint์ ๊ฐ์ ๋๊ตฌ๋ ๋ฃจํธ ์์ค์์ ๊ตฌ์ฑํ๊ณ Lerna ๋ช ๋ น์ ํตํด ์คํํ์ฌ ์ฝ๋ ํ์ง ๋ฐ ๊ท ์ผ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์์:
lerna run lint --parallel
lerna run format --parallel
--parallel
์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํจํค์ง์ ๊ฑธ์ณ ์ด๋ฌํ ์์
์ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์ต๋๋ค.
12. ํจ๊ณผ์ ์ธ ํ ์คํธ ์ ๋ต
๊ฐ๋ ฅํ ํ
์คํธ ์ ๋ต์ ๊ตฌํํ์ญ์์ค. lerna run test
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํจํค์ง์ ๋ํ ํ
์คํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. CI ์ต์ ํ๋ฅผ ์ํด์๋ ๋ณ๊ฒฝ๋ ํจํค์ง์ ๋ํด์๋ง ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐ ์ค์ ์ ๋์ญ์์ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ํฌ์๋(E2E) ํ ์คํธ์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋จ์/ํตํฉ ํ ์คํธ ์ค์ ์ ๊ณ ๋ คํ์ญ์์ค. ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ์ ๊ฒฝ์ฐ, ํ ์คํธ ์ธํ๋ผ๊ฐ ํด๋น๋๋ ๊ฒฝ์ฐ ์ ์ฌ์ ์ธ ๋คํธ์ํฌ ์ง์ฐ ๋๋ ์ง์ญ์ ์ฐจ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ์ญ์์ค.
13. ๋ฌธ์ํ ๋ฐ ์ปค๋ฎค๋์ผ์ด์
๋ชจ๋ ธ๋ ํฌ์์๋ ๋ช ํํ ๋ฌธ์ํ๊ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๊ฐ ํจํค์ง์ ๋ชฉ์ , ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฐ ํน์ ์ค์ ์ง์นจ์ ์ค๋ช ํ๋ README๊ฐ ์๋์ง ํ์ธํ์ญ์์ค. ์ ์ฒด ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๊ณ ์๋ก์ด ๊ธฐ์ฌ์์๊ฒ ์ง์นจ์ ์ ๊ณตํ๋ ์ค์ README๋ฅผ ๋ชจ๋ ธ๋ ํฌ์ ๋ฃจํธ์ ์ ์งํ์ญ์์ค.
ํ์ ๊ฐ์ ์ ๊ธฐ์ ์ธ ์ปค๋ฎค๋์ผ์ด์ , ํนํ ๊ณต์ ํจํค์ง์ ๋ํ ์ค์ํ ๋ณ๊ฒฝ ์ฌํญ์ด๋ ์ํคํ ์ฒ ๊ฒฐ์ ๊ณผ ๊ด๋ จํ์ฌ, ๋ค๋ฅธ ์ง์ญ ๊ฐ์ ์ ๋ ฌ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
14. ์ต์ ํ๋ก ํธ์๋ ํด๋ง ํ์ฉ
์ต์ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์ ๋น๋ ๋๊ตฌ๋ ์ข ์ข ๋ชจ๋ ธ๋ ํฌ์ ๋ํ ์ข์ ์ง์์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
- Webpack/Vite: ๋ชจ๋ ธ๋ ํฌ ๋ด์์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ ์ผ๋ก ๋ฒ๋ค๋งํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- React/Vue/Angular: ์ด๋ฌํ ํ๋ ์์ํฌ๋ก ๊ตฌ์ถ๋ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค.
- TypeScript: ํจํค์ง ๊ฒฝ๊ณ๋ฅผ ์กด์คํ๋ ๊ตฌ์ฑ์ผ๋ก ๋ชจ๋ ธ๋ ํฌ ์ ์ฒด์ ๊ฑธ์ณ ํ์ ์์ ์ฑ์ ์ํด TypeScript๋ฅผ ์ฌ์ฉํ์ญ์์ค.
Turborepo ๋ฐ Nx์ ๊ฐ์ ๋๊ตฌ๋ ์ง๋ฅํ ์บ์ฑ ๋ฐ ์๊ฒฉ ์คํ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋์ฑ ๊ณ ๊ธ ๋ชจ๋ ธ๋ ํฌ ๋น๋ ์์คํ ์ผ๋ก ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ผ๋ฉฐ, ํนํ ๋๊ท๋ชจ ๋ชจ๋ ธ๋ ํฌ์ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋์ ๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
Lerna์ ๋ชจ๋ ธ๋ ํฌ๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ์ ์ฌ์ ์ธ ๋์ ๊ณผ์ ๋ฅผ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ์ด๊ธฐ ์ค์ ๋ณต์ก์ฑ: ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๊ฐ๋ณ ์ ์ฅ์๋ก ์์ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ผ๋ฉฐ, ํนํ ์ด ๊ฐ๋ ์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์์๊ฒ ๊ทธ๋ ์ต๋๋ค.
- ๋น๋ ์๊ฐ: ์ ์ ํ ์ต์ ํ ์์ด๋ ๋๊ท๋ชจ ๋ชจ๋ ธ๋ ํฌ์ ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค. Lerna์ ๋ณ๋ ฌ ์คํ์ ํ์ฉํ๊ณ ๊ณ ๊ธ ๋น๋ ์์คํ ์ ํ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ํด๋ง ํธํ์ฑ: ์ ํํ ํด๋ง(๋ฆฐํฐ, ํฌ๋งทํฐ, ๋ฒ๋ค๋ฌ)์ด ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์กฐ์ ํธํ๋๋์ง ํ์ธํ์ญ์์ค.
- ๋ฒ์ ๊ด๋ฆฌ ์ฑ๋ฅ: ๊ด๋ฒ์ํ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ง ๋งค์ฐ ํฐ ๋ชจ๋ ธ๋ ํฌ์ ๊ฒฝ์ฐ, Git ์์ ์ด ๋๋ ค์ง ์ ์์ต๋๋ค. ์์ ๋ณต์ ๋๋ Git LFS์ ๊ฐ์ ์ ๋ต์ด ์ด๋ฅผ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ํ์ต ๊ณก์ : ๊ฐ๋ฐ์๋ ๋ชจ๋ ธ๋ ํฌ ์ํฌํ๋ก์ฐ์ ์ ์ํ๊ณ Lerna๊ฐ ํจํค์ง ๋ฐ ์ข ์์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๋ฐ ์๊ฐ์ด ํ์ํ ์ ์์ต๋๋ค.
๋์ ๋ฐ ๋ณด์ ๋๊ตฌ
Lerna๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง, ๋ชจ๋ ธ๋ ํฌ ๊ด๋ฆฌ๋ฅผ ๋ณด์ํ๊ฑฐ๋ ๋์์ ์ ๊ณตํ ์ ์๋ ๋ค๋ฅธ ์๋ฃจ์ ๋ ์กด์ฌํฉ๋๋ค:
- Yarn Workspaces: ์ธ๊ธํ๋ฏ์ด, Yarn์ ๋ด์ฅ ์ํฌ์คํ์ด์ค ๊ธฐ๋ฅ์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ํ ํ๋ฅญํ ์์กด์ฑ ๊ด๋ฆฌ ๋ฐ ์ฐ๊ฒฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- npm Workspaces: npm v7๋ถํฐ npm๋ ๊ฐ๋ ฅํ ์ํฌ์คํ์ด์ค ์ง์์ ํฌํจํฉ๋๋ค.
- Nx: ์์กด์ฑ ๊ทธ๋ํ ๋ถ์, ์ง๋ฅํ ์บ์ฑ ๋ฐ ๋ถ์ฐ ์์ ์คํ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ํ ๋งค์ฐ ๋ ๋จ์ ์ธ ๋น๋ ์์คํ ์ผ๋ก, ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๋น๋ ์๋ ์ธก๋ฉด์์ Lerna๋ณด๋ค ๋ฐ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- Turborepo: Nx์ ์ ์ฌํ๊ฒ, Turborepo๋ ์๋์ ํจ์จ์ ์ธ ์บ์ฑ์ ์ค์ ์ ๋ JavaScript ๋ชจ๋ ธ๋ ํฌ์ฉ ๊ณ ์ฑ๋ฅ ๋น๋ ์์คํ ์ ๋๋ค.
๋ง์ ํ์ด ํต์ฌ ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์กฐ๋ฅผ ์ํด Yarn/npm ์ํฌ์คํ์ด์ค๋ฅผ ํ์ฉํ๊ณ , ๊ฒ์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ํด Lerna (๋๋ Nx/Turborepo)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ฒฐ๋ก
ํ๋ก ํธ์๋ Lerna๋ JavaScript ๋ชจ๋ ธ๋ ํฌ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ์๋ฃจ์ ์ ์ ๊ณตํ๋ฉฐ, ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ๊ฐ๋ฐ ํ์๊ฒ ํจ์จ์ ์ธ ์ํฌํ๋ก์ฐ, ๊ฐ์ํ๋ ์์กด์ฑ ๊ด๋ฆฌ ๋ฐ ํฅ์๋ ์ฝ๋ ๊ณต์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Lerna์ ๊ธฐ๋ฅ์ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํจ์ผ๋ก์จ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ์ฝ๋ ํ์ง์ ๊ฐ์ ํ๋ฉฐ ํ์ ์ ์ฃผ๋ํ๋ ํ์ ํ๊ฒฝ์ ์กฐ์ฑํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง๊ณ ํ์ด ๋ค๋ฅธ ์ง์ญ์ผ๋ก ํ์ฅ๋จ์ ๋ฐ๋ผ Lerna(๋๋ ๋ณด์ ๋๊ตฌ)๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ ธ๋ ํฌ ์ ๋ต์ ์ฑํํ๋ ๊ฒ์ ์ ๋ต์ ์ด์ ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ณด๋ค ์์ง๋ ฅ ์๋ ๊ฐ๋ฐ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ์ค๋ฒํค๋๋ฅผ ์ค์ด๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ๊ธ๋ก๋ฒ ํ์ด ๊ณ ํ์ง ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ ๊ณตํ ์ ์๋๋ก ํฉ๋๋ค.
๊ธ๋ก๋ฒ ํ์ ์ํ ํต์ฌ ์์ :
- ํ์คํ: Lerna๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ด๋ ํด๋ง ๋ฐ ์ฝ๋ ํ์ค์ ์ ์ฉํ์ญ์์ค.
- ํ์ : ์์์ ์ปค๋ฐ๊ณผ ์ฌ์ด ์ฝ๋ ๊ณต์ ๋ฅผ ํ์ฉํ์ฌ ๋ ๋์ ํ ์๋์ง๋ฅผ ์ฐฝ์ถํ์ญ์์ค.
- ์ต์ ํ: ์๋ํ๋๊ณ ํจ์จ์ ์ธ ๋น๋ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ํด Lerna๋ฅผ CI/CD์ ํตํฉํ์ญ์์ค.
- ์ํต: ๋ช ํํ ๋ฌธ์ํ์ ์ด๋ฆฐ ์ํต ์ฑ๋์ ์ ์งํ์ญ์์ค.
ํ๋ก ํธ์๋ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ํ Lerna๋ฅผ ๋ง์คํฐํจ์ผ๋ก์จ, ๊ธ๋ก๋ฒ ๊ท๋ชจ์์ ํ์ ์ฑ์ฅ๊ณผ ์ฑ๊ณต์ ์ง์ํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ง์ ๊ฐ๋ฅํ ๊ฐ๋ฐ ์ธํ๋ผ์ ํฌ์ํ๋ ๊ฒ์ ๋๋ค.