์ด๋ฒ JSConf์ ๐ [๋ฉ์ธ ์คํ ์ด์ง] ๋ชจ๋ ธ๋ ํฌ์์ ๊ฐ๋ฐํ๊ธฐ – ์์ด ์ฐํ ์ ์ธ์ ์ ๋ฃ๋ค๊ฐ ๋ชจ๋ ธ๋ ํฌ์๋ํด์ ์๊ฒ๋์๋ค. ๊ทธ๋์ ๋ชจ๋ ธ๋ ํฌ์ ๋ํด์ ๊ธ๋ก ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
Lerna
Git repo
Git submodule
๋งค ํ๋ก์ ํธ๋ง๋ค ๋น์ทํ ์ฝ๋๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ค. npm์ ํจํค์ง๋ก ๋ฐฐํฌํ๊ธฐ๋ ์ ๋งคํ๊ณ ์ง๊ธ๋๋ ์ด๋ฐ ๊ฐ๋ ์ด์์ด์ Master-publisher ๋ผ๋ ๊ณณ์์ UI๋ค์ ์ ๋ถ ๊ฐ๋ฐํ๊ณ stroybook์ผ๋ก ํ์ธํ๊ณ ์ด ๊ณผ์ ํ์ ์ฝ๋๋ฅผ ์ค์ ์ฌ์ฉํ ๊ณณ์์ ์ฌ์ฉํ๊ฒ๋๋ค. ๋ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ๋๋์๊ณ ํ์ง๋ง ์๋ณธ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ์ข๋ ํผํฌ๋จผ์ค๋ฅผ ๋์ด์ฌ๋ฆฌ๊ธฐ์ํด์ ๋ณ๊ฒฝํ๋ค๋ณด๋ฉด ๋ค๋ฅธ ๊ณณ์ ์ฝ๋๋ค๋ ๋์ผํ๊ฒ ๋ณ๊ฒฝํด์ค์ผํ๋ค. ํ์ง๋ง ํ๋๊ฐ์ง์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋คํ๋ฉด ๋ฒ๊ฑฐ๋กญ์ง๋ง ๋ชจ๋ ์์์ ์ผ๋ก ๊ต์ฒดํด์ค ์๋์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฐ๊ฐ ๋ง์ฝ 100๊ฐ์ง๊ฐ ๋์ด๊ฐ๋ค๋ฉด? ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ํ๊ธฐ ์๋๋์๋์ ์๋๋ ๋ชปํ๊ฒ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ๊ณ์ ํ๋์ ์ฝ๋๋ฅผ ํตํด์ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ๋์ฆ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋์ ๋ชจ๋ ธ๋ ํฌ๊ฐ ์๊ธด ๊ฒ๊ฐ๋ค.
Mono Repo, ๋ถ์ฐ๋์ด ๊ด๋ฆฌ๋๋ ์ฌ๋ฌ Repository๋ฅผ ํ Repository ์์ ๋ฃ์ด์ ๊ด๋ฆฌํ์ ์ด๋ค.
๊ทธ๋ผ ์ด๋ค ๊ฒ๋ค์ ํตํด์?
Lerna
Lerna๋ ์ฌ๋ฌ Packages(ํ๋ก์ ํธ)๋ฅผ ๊ด๋ฆฌํ๋๋ก ๋์์ฃผ๋ ๋๊ตฌ ์ด๋ค.
mono-repo/
packages/
package-1/package.json
package-2/package.json
package.json
lerna.json
์ด package์ ์๋ pacjage.,json์ ์ฐธ์กฐํ์ฌ, node_module์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ค๋ค.
์ฅ์ Mono Repo ๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ฒ๋๋ฉด, ๊ฐ๊ฐ ํ๋ก์ ํธ ๋ง๋ค ์ค์ ํ๋ ESlint๋ Jest ๋ฑ์ ์ธํ ์ ๋ ์ด์ ๋ณต๋ถํ ํ์๊ฐ ์๋ค. ํ Repo์ ๋ชจ๋ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ฝ๋ ์ฌ์ฌ์ฉ๋ ์ฉ์ดํด ์ง๋ค.
๋จ์ ๊ธฐ์กด์ Repo ๋ก ๊ด๋ฆฌํ๋ ์ฝ๋๋ฅผ ํฉ์น๋ฉด, history๋ฅผ ์์ด๋ฒ๋ฆด ์๋ ์๋ค.
Git Submodule
ํ๋ก์ ํธ๋ฅผ ์ํํ๋ค ๋ณด๋ฉด ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค. ํจ๊ป ์ฌ์ฉํ ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์ธ๋ถ์์ ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋๊ฐ ๋ด๋ถ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ์ ์๋ค. ์ด๋ฐ ์ํฉ์์ ์์ฃผ ์๊ธฐ๋ ์ด์๋ ๋ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ณ๊ฐ๋ก ๋ค๋ฃจ๋ฉด์๋ ๊ทธ ์ค ํ๋๋ฅผ ๋ค๋ฅธ ํ๋ ์์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
Git ์ ์ฅ์ ์์ ๋ค๋ฅธ Git ์ ์ฅ์๋ฅผ ๋๋ ํ ๋ฆฌ๋ก ๋ถ๋ฆฌํด ๋ฃ์ ๊ฒ์ด ์๋ธ ๋ชจ๋์ด๋ค. ๋ค๋ฅธ ๋ ๋ฆฝ๋ Git ์ ์ฅ์๋ฅผ Cloneํด์ ๋ด Git ์ ์ฅ์ ์์ ํฌํจํ ์ ์์ผ๋ฉฐ ๊ฐ ์ ์ฅ์์ ์ปค๋ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.