๊ธฐ๋ฅ ์ ์์ฒญํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
ํน์ง
ํ์ฌ ํ๋์ ๋ฌด์์
๋๊น?
์ต์์ ๋
ธ๋ ๋ชจ๋์ ํฌํจํ๋ monorepo์ ๋ํ yarn ์์
๊ณต๊ฐ์ ์ฌ์ฉํ๋ฉด monorepo์ ๋ฃจํธ์ ๋จ์ผ yarn.lock
๋ง ์์ฑ๋๊ณ ์ต์์ ๋
ธ๋ ๋ชจ๋์ ํน์ ํ yarn.lock
๋ ์์ต๋๋ค.
์์๋๋ ๋์์ ๋ฌด์์
๋๊น?
์ฑ(์ต์์ ๋
ธ๋ ๋ชจ๋)๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ ํฌํจํ๋ ๋ชจ๋
ธ๋ ํฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์์ฌ ์์
๊ณต๊ฐ์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ monorepo์ ๋ฃจํธ์ ๋จ ํ๋์ yarn.lock
ํ์ผ yarn.lock
ํ์ผ์ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ํฉ๋๋ค. ํด๋น ์์
๊ณต๊ฐ์ ๋์ค์ monorepo ์ธ๋ถ์์ ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์:
workspace-a
๋ฐ workspace-b
2๊ฐ์ ์์
๊ณต๊ฐ์ด ์๋ ๋ชจ๋
ธ๋ ํฌ๊ฐ ์๋ ๊ฒฝ์ฐ workspace-a
๋ workspace-b
์์ ๋ด๋ณด๋ธ ๋ชจ๋ ์ค ์ผ๋ถ๋ฅผ ์ฌ์ฉํฉ๋๋ค. workspace-a
๋ฅผ ๋์ปค ์ด๋ฏธ์ง๋ก ํจํค์งํ๋ ค๋ฉด(๋๋ ์ ์ฒด monorepo ์์ด ํด๋น ์์
๊ณต๊ฐ์ ์์ฒด์ ์ผ๋ก ํจํค์งํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ) yarn.lock
๊ฐ ์์ต๋๋ค. ์ฆ, workspace-a
์ ํ์ผ์ monorepo์ ๋ค๋ฅธ ํ๊ฒฝ์ผ๋ก ์ด๋ํ ๋ yarn.lock
ํ์ผ์ด ๋๋ฝ๋๊ณ ์ข
์์ฑ์ ์ค์นํ ๋ ๋ชจ๋ ํ์ผ์ด ์์ค๋ฉ๋๋ค. ์ ๊ธ ํ์ผ์ ์ฅ์ (๊ฐ๋ฐ์ ์ฌ์ฉ๋ ๊ฒ๊ณผ ๋์ผํ ์ข
์์ฑ์ ์ค์นํ๊ณ ์์์ ์๊ณ ์์).
๋๋ ์ด๊ฒ์ ๋ํ ๋ฌธ์ ๋ฅผ ์ฐพ์ ์ ์๋ค๋ ๊ฒ์ ๋งค์ฐ ๋๋์ต๋๋ค. ๊ทธ๋ฐ ์์ผ๋ก monorepos์ ํจ๊ป ์ผํ๊ณ ์ถ์ ์ฌ๋์ ๋๋ฟ์
๋๊น? ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์๋ ๊ฑด ์๋๊น? ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํธ์ด์คํ
์์ด lerna
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก ํจํค์ง๋น ์ ๊ธ ํ์ผ์ด ์์ต๋๋ค.
์ต๊ทผ์ ์ถ์๋ nohoist
๊ธฐ๋ฅ๋ ์์
๊ณต๊ฐ๋น ๋ค๋ฅธ yarn.lock
์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ (์ํ์ง๋ง) ๋์์ด ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฌธ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋ํ ์ด ๋๊ธ ๊ณผ ๋ค์ ๊ด๋ จ
node.js, ์์ฌ ๋ฐ ์ด์ ์ฒด์ ๋ฒ์ ์ ์ธ๊ธํ์ญ์์ค.
๋
ธ๋ 8.9.3, ์ 1.5.1, OSX 10.13.3
์์ฌ ๋ธ๋ก๊ทธ ๊ธฐ๋ฐ :
yarn.lock์ด ํฌํจ๋ ํจํค์ง๋ฅผ ๊ฒ์ํ๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์๋ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์์ฑ์ ์ค์นํ ๋ ์์ ์ yarn.lock ํ์ผ๋ง ์กด์ค๋ฉ๋๋ค. ์ข ์์ฑ ๋ด์ ์ ๊ธ ํ์ผ์ ๋ฌด์๋ฉ๋๋ค.
๊ฐ๋ณ ํจํค์ง๋ฅผ ๊ฒ์ํ ๋ yarn.lock์ ๋ฌถ์ ํ์๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค... ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ๊ฐ๋ฐ ์ํฐํฉํธ์ ๋ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๊ฐ ํจํค์ง์ ๋ฃ์ ํ์๊ฐ ์์ต๋๋ค.
@connectdotz ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๊ฒ์๋ ํจํค์ง์๋ ํ์ํ์ง ์์ ์ ์์ง๋ง ๋์ปค ์ปจํ ์ด๋๋ฅผ ๋น๋ํ๋ ค๋ฉด ํ์คํ ์์ด์ผ ํ ์ด๋๊ฐ์ ๋ฐฐํฌํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค.
๋ฌผ๋ก ...ํ์ง๋ง ๊ฐ๋ฐ ๋์ปค ์ปจํ ์ด๋์๋ ์ ์ฒด ์ ์ฅ์๊ฐ ์์ผ๋ฏ๋ก ์ด์จ๋ yarn.lock์ด ์์ต๋๊น? ๋์ปค ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ OS ๋๋ ํ๋ซํผ์ ๋ํ ๋ชจ๋ ธ๋ฆฌํฌ์งํ ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ํ ์คํธํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ์ ํด๋น yarn.lock์ ๋ฐฐํฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ฐ๋ฐ ์ฃผ๊ธฐ ๋์ monorepo ํ๋ก์ ํธ์ ๊ฐ๋ณ ํจํค์ง๋ฅผ ๋์ปค ์ปจํ ์ด๋์ ๋ฐฐํฌํด์ผ ํ๋ ์ฌ์ฉ ์ฌ๋ก์ ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น?
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ ์ฒด monorepo๋ฅผ ๊ฒฐ๊ณผ ๋์ปค ์ปจํ ์ด๋์ ํจํค์งํ๊ณ ์ถ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก๋์ ์์ docker๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํด๋น ์ด๋ฏธ์ง๋ ๊ฐ๋ฅํ ํ ๊ฐ๋ฒผ์์ผ ํฉ๋๋ค. ๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์๋นํ ํฌ๋ฉฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ํฌํจํฉ๋๋ค(์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ถ ๋ง์ดํฌ๋ก์๋น์ค์ ๊ด๋ จ๋์ง๋ง ์ ๋ถ๋ ์๋). ๋ฐ๋ผ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ํจํค์งํ ๋ ์ด๋ฏธ์ง์ ํด๋น ๋ง์ดํฌ๋ก ์๋น์ค์ ํ์ผ๊ณผ ์ ์ ํ ์ข ์์ฑ์ผ๋ก ๋ค๋ฅธ ๋ชจ๋ ์ข ์์ฑ์ด ํฌํจ๋๊ธฐ๋ฅผ ์ํฉ๋๋ค. ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ์์ ๋ค์ด๋ก๋ํ๊ณ ๋์ปค ์ด๋ฏธ์ง์ ์์น๋ฅผ ์ํด ๋น๋ํ์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ๊ธฐ์์ ์ฃผ์ ๊ณ ๋ ค ์ฌํญ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ฅํ ํ ๊ฐ๋ณ๊ฒ ์ ์งํ๋ ๊ฒ์ด๋ฉฐ ์ ์ฒด monorepo๋ฅผ ํจํค์งํ๋ ๊ฒ์ ์ฐ๋ฆฌ์ ์๊ตฌ์ ๋ง์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ๋ง์ดํฌ๋ก ์๋น์ค์ ์ด๋ฏธ์ง ๋ด์์ "yarn"์ ์คํํ ๋ ๊ฑฐ๊ธฐ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ํ์ง ์๊ณ ์ผ๋ฐ์ ์ธ ์ข ์์ฑ์ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์์ ์๋ฃจ์ ์ ์์ ๊ณต๊ฐ๋ง๋ค yarn.lock ํ์ผ์ ์์ฑํ ํ์๊ฐ ์์ผ๋ฉฐ, ์ฃผ์ด์ง ์์ ๊ณต๊ฐ์ ํจํค์งํ๋ ๊ณผ์ , ์ฃผ๋ฌธํ ์์ ๊ณต๊ฐ์ ๋ํ yarn.lock ํ์ผ์ ์์ฑํ๋ ๋ฑ์ ๊ณผ์ ์ ๋์์ด ๋๋ yarn ๋ช ๋ น์ผ ์๋ ์์ต๋๋ค. ..
์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ช ํํ ํ๋ ๋ฐ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๐ป
@netanelgilad ์์ธํ ๋ด์ฉ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ์ฉ ์ฌ๋ก๊ฐ ํ๋ก๋์ ๋๋ ๊ฐ๋ฐ์ ์ํด ๋์ปค ์ปจํ ์ด๋์ ๊ฐ๋ณ ํจํค์ง๋ฅผ ๊ฒ์ ํ๋ ๊ฒ์ ๊ดํ ๊ฒ์์ ๋ช ํํ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ํตํฉ์ ์์ํ ์ ์๋๋ก #4521์ ํ ๋ก ์ ์ฐธ์ฌํ์ญ์์ค.
๊ฐ๋ณ ์ ๊ธ ํ์ผ์ ์ฌ์ฉ์ ๋ณผ ์ ์์ง๋ง ํ์ํ์ง ์์ต๋๋ค. ๊ฐ๋ณ ํ์ผ์ ๊ฐ๋ฆฌํค๋ -f
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ repo์ ๋ฃจํธ์์ docker๋ฅผ ์คํํ๋ฉด ์ ์ฒด repo๋ฅผ ์ปจํ
์คํธ๋ก ๊ฐ์ง๋ฉฐ ๋ฃจํธ์์ package.json ๋ฐ yarn.lock์ ๋ณต์ฌํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง์ ๋น๋ํ ํจํค์ง์ ๋ํด์๋ง package.json์ด ํ์ํ๋ฉฐ, yarn.lock์ ํจ์ฌ ๋ ๋ง์ ๊ฒ์ด ํฌํจ๋์ด ์์ด๋ yarn์ ๋ณต์ฌํ package.json ํ์ผ์ ๋ํ ํจํค์ง๋ง ์ค์นํฉ๋๋ค.
ํธ์ง : ๊ทธ ๋ง๊ณผ ํจ๊ป. ๋น๋์ ํฌํจ๋์ด ์์ง ์๋๋ผ๋ ๋์ปค ์บ์๊ฐ ๋ชจ๋ ํจํค์ง์ ํจํค์ง ๋ณ๊ฒฝ์ ์ฌ์ฉ๋์ง ์๋๋ก ํฉ๋๋ค.
10๊ฐ์ ๋ค๋ฅธ ํจํค์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋๋ค์ด ์ํ ๊ฒฝ์ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ ์ ์๋๋ก ๊ทธ๋ค ๋ชจ๋๊ฐ ์์ ์ ์ ์ฅ์์ ์ด๊ธฐ๋ฅผ ์ํ์ง๋ง ํ์ํ ๊ฒฝ์ฐ ํจ๊ป ์ฐ๊ฒฐํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๊ฐ ํจํค์ง์ ๋ํ ํ์ ๋ชจ๋์ด ์๋ ๋ฉ๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ด๋ฌํ ๊ฐ ํ์ ๋ชจ๋์ ์์ ๊ณต๊ฐ์ผ๋ก ์ฐธ์กฐํ๋ package.json์ด ์์ต๋๋ค.
์์
๊ณต๊ฐ๊ณผ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ด ํ๋ก์ ํธ๋ ๋ง์ ๋ก์ปฌ ํจํค์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ web-app
์
๋๋ค.
web-app/
|--node_modules/
|--packages/
| |--controls/
| | |--src/
| | |--package.json
| |--utils/
| |--src/
| |--package.json
|--src/
|--package.json
|--yarn.lock
์์
๊ณต๊ฐ ํจํค์ง controls
๋ฐ utils
์ ๊ฒ์๋์ง ์์ผ๋ฉฐ ๊ฒฝ๋ก์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌธ์ ๋ controls
ํจํค์ง( yarn pack
)๋ฅผ ๋ฆด๋ฆฌ์คํด์ผ ํ๊ณ ์์ฒด์ ์ผ๋ก ๋น๋/ํ
์คํธํ๊ณ ์ถ์ง ์๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, yarn install
์์ web-app/packages/constols/
yarn install
ํ๊ณ ์ถ์ต๋๋ค. ์์
๊ณต๊ฐ์์๋ ์ต์์ web-app/yarn.lock
ํ์ผ์ ์ต์์ web-app/node-modules/
์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ web-app/packages/controls/package.json
์ง์ ๋ ํ์ ์งํฉ ๋์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ด ํจํค์ง์ ์์ฒด package.json
ํ์ํ ๋ชจ๋ ์ข
์์ฑ์ด ์๊ณ ๋ค๋ฅธ ์์
๊ณต๊ฐ์์ ๋๋ฝ๋ deps๋ฅผ ์ฑ์ฐ๋ ํ์ด์ผ๋ก ์๋ํ์ง ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
2๊ฐ์ง ๊ฐ๋ฅํ ์๋ฃจ์ ์ด ์์ต๋๋ค.
yarn.lock
๋ฅผ ์ฌ์ฉํ๋ ๋ก์ปฌ package.json
์ง์ ๋ ํจํค์ง๋ง ์ค์นํฉ๋๋ค..yarnrc/.npmrc
.์ด๊ฒ๋ ๊ณ ๊ตฐ๋ถํฌ. API์ ํจ๊ป Angular CLI ํ๋ก์ ํธ๊ฐ ์์ผ๋ฏ๋ก ๋์ผํ ์ ์ฅ์์ ์๊ณ ํ๋ก ํธ์๋๋ฅผ Heroku๋ก ํธ์ํ๋ ค๊ณ ํฉ๋๋ค.
Heroku์๊ฒ ๋จผ์ ํ๋ก ํธ์๋ ์ ์ฅ์๋ก ์ด๋ํ๋๋ก ์ง์ํ๋ ๋น๋ํฉ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. https://github.com/lstoll/heroku-buildpack-monorepo
๋ฌธ์ ๋ nohoist
ํจํค์ง ์์ yarn.lock
๊ฐ ์์ผ๋ฏ๋ก Heroku๋ npm์ผ๋ก ์ค์นํ๊ณ ์ ๊ธด ํจํค์ง๊ฐ ์๋ ๋ชจ๋ ์ ํจํค์ง๋ก ๋๋ฉ๋๋ค.
๊ฐ๋ณ ํจํค์ง์ ํจ๊ป ์ ์ญ yarn.lock ํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ต๊ทผ์ ๋ค์๊ณผ ๊ฐ์ด Dockerfile์ ์ ๊ทผํ์ต๋๋ค.
WORKDIR /app
ENV NODE_ENV=production
ADD yarn.lock /app/
ADD package.json /app/
# Only copy the packages that I need
ADD packages/my-first-package /app/packages/my-first-package
ADD packages/my-second-package /app/packages/my-second-package
RUN cd /app && yarn install --frozen-lockfile
์ด๊ฒ์ ๋ค๋ฅธ ์ฌ๋์ด ์๋ ๋ด๊ฐ ๋ณต์ฌํ ๋ ํจํค์ง์์ ์ค์ ๋ก ์ฌ์ฉ ์ค์ธ ์ข ์์ฑ๋ง ์ค์นํฉ๋๋ค.
๋จผ์ ํ ํจํค์ง์์ ๋ฆด๋ฆฌ์ค ์ํฐํฉํธ๋ฅผ ๋ง๋ ๋ค์ ํด๋น ์ข ์์ฑ์ ์ค์นํ์ง ์์ผ๋ ค๋ ๋น๋ ํ๋ก์ธ์ค๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ Docker์ ๋ค๋จ๊ณ ๋น๋๋ก ์๋นํ ์ฝ์ต๋๋ค.
yarn install --frozen-lockfile
COPY --from=<stage>
yarn install --frozen-lockfile
์คํํ๊ณ RUN
๋ช
๋ น์ ๋
ธ์ถํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ Yarn.lock ํ์ผ์ ์ง์ ๋๊ณ ํ๋ก๋์ ์ ํ์ํ ์ข ์์ฑ๋ง ํฌํจํ๋ ์์ ์ปจํ ์ด๋๋ก ๋๋ฉ๋๋ค.
@johannes-scharlach
๋๋ ๋น์ ์ด ์ค๋ช
ํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ๋ค๋จ๊ณ ๋น๋๋ ์ข์ ํ์
๋๋ค :).
@connectdotz ๋ด ์๊ฐ์ ์ด ๋ฌธ์ ๋ ์ข ๋ฃ๋ ์ ์์ผ๋ฉฐ ๋ฌธ์ #4521์ ๋ํด ๊ณ์ ์์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ yarn.lock ํ์ผ์ด ํจํค์ง์ ํ์ ์งํฉ๊ณผ ํจ๊ป ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ๊ณต๊ฐ๋น yarn.lock์ด ํ์ํ์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค(๋น๋ก ์ด๊ฒ์ด ๋ ๋์ ๊ฐ๋ฐ ์ํฌํ๋ก๊ฐ ๋ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ๐ ). ๊ทธ๋ฌ๋ #4521์ ๋ฌธ์ ๋ ์ฌ์ ํ ์ค์ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์์ ์ป์ ์๋ฃจ์ ์์ ๋น๋ก yarn์ด ์ํธ ์์กด์ฑ๊ณผ ์ฃผ์ด์ง ์์ ๊ณต๊ฐ์ "๊ณต๊ธ์ ์ฒด"๋ก ์๊ณ ์์ด์ผ ํ์ง๋ง Dockerfile์ ๋ชจ๋ ์ข ์์ฑ ์์ ๊ณต๊ฐ์ ์ธ๊ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ ์ง๋ ๋ฉฐ์น ๋์ ๋ชจ๋
ธ๋ ํฌ๋ฅผ ์ฒซ ๋ฒ์งธ Lerna๋ก ๋ณํํ ๋ค์ Yarn ์์
๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋์ต๋๋ค. Yarn์ ์ผ๋ฐ์ ์ผ๋ก ๋ ์์ ์ ์ผ๋ก ์๋ํ์ผ๋ฉฐ ํนํ ์ต๊ทผ yarn workspaces run <script>
๋ฐ wsrun ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ฉ์ง ๊ธฐ๋ฅ์ด ๋์
๋๋ฉด์ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๊ฒ๊ณผ ๋งค์ฐ ๊ฐ๊น์ต๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ผ yarn.lock
๋ ๊ณจ์นซ๊ฑฐ๋ฆฌ์
๋๋ค.
Yarn ์์ ๊ณต๊ฐ์ด ํน์ ๊ธฐ๋ฅ์ด ์๋ ํจํค์ง ์ ์ธ์ธ
yarn workspaces run <script>
ํฉ๋๋ค.package.json
.json
"workspaces": {
"packages": ["packages/*"],
"hoistDependencies": true
}
yarn workspaces hoist-dependencies
ํฉ๋๋ค.๋ฑ์ ์์์ผ ๋ฟ์ด๋ฉฐ ์ค์ ๋ก ์ผ๋ถ ๊ธฐ๋ฅ์ ์ตํธ์ธ ๋์ ์ตํธ์์์ผ ์ ์์ง๋ง(์: ์ฌ๋๋ค์ ์ง๊ธ๊น์ง ๋จ์ผ yarn.lock
๋ฐ ํธ์ด์คํ
์ ๊ธฐ๋ํฉ๋๋ค) ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ ์์
๊ณต๊ฐ์ด repo ์ ์ฒด ์์
์ ์ํ ๊ฐ๋ฒผ์ด ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
์ด๋ป๊ฒ ์๊ฐํ๋์?
์ด ๊ธฐ๋ฅ ์์ฒญ์ด ํด๊ฒฐํ๊ณ ์๋ ๋ฌธ์ ๋ #4521์์์ ๋์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. @johannes-scharlach๊ฐ ์ค๋ช ํ๋ ๊ฒ์ ๋ณธ์ง์ ์ผ๋ก ์ํํ๋ ๋ช ๋ น์ ์์ ๊ณต๊ฐ๋น ์ ๊ธ ํ์ผ๋ณด๋ค ํ์คํ ๋ ์คํ ๊ฐ๋ฅํฉ๋๋ค.
๋ํ ํ์ฌ ์ค์ฒฉ๋ ์์ ๊ณต๊ฐ์ ๋ํ RFC๊ฐ ์ด๋ ค ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด ๊ธฐ๋ฅ ์์ฒญ๊ณผ ๋น์ทํฉ๋๋ค.
Yarn ์์ ๊ณต๊ฐ์ด ํน์ ๊ธฐ๋ฅ์ด ์๋ ํจํค์ง ์ ์ธ์ธ ์์ ์ฝ์ด์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
์์ ๊ณต๊ฐ์ ํฌ๊ฒ ๋ฐ๋์ง ์์ ๊ฒ์ด๋ฉฐ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ง์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ ๊ณต๊ฐ์์ ์ผ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๋ฉด
yarn workspaces run <script>
๊ทธ๊ฒ์ ์ด๋ฏธ ๊ฐ๋ฅํฉ๋๋ค(v1.10, #6244).
ํ์ฌ ์ ๊ธ ํ์ผ์ ํธ์ด์คํธ ๊ตฌ์กฐ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ค๋ฉด
yarn workspaces hoist-dependencies
ํฉ๋๋ค.
์์
๊ณต๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์
๋๋ค( dehoistDependencies
).
๋ด๊ฐ ์ด๊ฒ์ ๋ํด ์ข์ํ์ง ์๋ ๊ฒ์ ๊ทธ๊ฒ์ด ๊ธฐ์ ์ ๋์(ํธ์ด์คํ )์ ์ทจํ๊ณ ๊ทธ๊ฒ์ ์๋ฏธ๋ก ์ ๋์์ผ๋ก ๋ฐ๊พธ๋ ค๊ณ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์ ์คํ ๋ฆฌ์ ์ด์ ์ ๋ง์ถ ๋ค์ ๊ทธ ๋ฐ๋๊ฐ ์๋ ๊ตฌํ์ ํ์ ํด์ผ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ์ฌ์ฉ ์ฌ๋ก("ํน์ ํจํค์ง์๋ง ์ข
์์ฑ ์ค์น")๋ฅผ ํ์ฅํ๋ฉด yarn --focus
๊ฐ ๋ ์ ํด๊ฒฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํต์ฌ ์ง๋ฌธ์ ํธ์ด์คํ
๊ณผ ๋จ์ผ yarn.lock
ํ์ผ์ด ์์
๊ณต๊ฐ์ ์๊ฒฉํ๊ฒ ํ์ํ์ง ์ฌ๋ถ์
๋๋ค. ๋ด ๋ง์, ๊ทธ๊ฒ์ด ์ง์ ์ผ๋ก ๊ทธ๋ค์ ์ ์ํ๋ ๊ฒ์
๋๊น ์๋๋ฉด ์ญ์ฌ์ ์ผ๋ก ๊ทธ๋ค์ด ์ป์ ์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ธ "๊ทธ๋ฅ"์
๋๊น?
์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก์์ ์์ ๊ณต๊ฐ์ ์ต์์ ๊ฐ์ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
node_modules
๋ฅผ ํธ์ด์คํธํฉ๋๋ค.yarn.lock
ํ์ผ์ ์ ์งํ๊ณ (๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ์ค๋ ๋์์ ์ธ๊ธํ ํน์ ํจํค์ง๋ฅผ Docker์์ ๋น๋ํฉ๋๋ค) ๋ํ ํจํค์ง๊ฐ ํน์ ๋ฒ์ ์ ์ ๊ธ ์ ์๋๋ก ํฉ๋๋ค. #6563๋ ์ฐธ์กฐํ์ญ์์ค.yarn workspaces run <script>
๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.ํธ์ด์คํ
์ nohoist
๋ก ๋นํ์ฑํํ ์ ์์ผ๋ฉฐ run
๋ ๋ช
๋ น์ ์ฌ์ฉํ์ง ์์์ผ๋ก์จ "๋นํ์ฑํ"ํ ์ ์์ง๋ง ๋จ์ผ yarn.lock
ํ์ผ์ "๋นํ์ฑํ"ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋นํ์ฑํํ ์ ์๋ ํต์ฌ ๊ธฐ๋ฅ์ธ์ง ๋๋ ์์ง ์ถฉ๋ถํ ์์ฒญ๋์ง ์์ ๊ฒ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. :)
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ yarn install --app-mode package@version
๊ทธ๋ ๊ฒ ํ๋ฉด ํน์ ๋ฒ์ ์์ ์ฑ์ ๊ฒ์ํ ๋ ์์
๊ณต๊ฐ ์ ๊ธ ํ์ผ์ ๋ณต์ฌํ๊ธฐ๋ง ํ๋ฉด ๋๊ณ app-mode
์ค์นํ๋ฉด ๋ฒ๋ค ์ ๊ธ ํ์ผ์ ์ค์ํฉ๋๋ค.
Yarn์ ์ ์ฒด ์ ๊ธ ํ์ผ์ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. ํด๋น ํจํค์ง์ ๊ด๋ จ๋ ์ข ์์ฑ ๊ทธ๋ํ์ ์ผ๋ถ๋ง ์ฝ๊ฒ ์ถ์ถํ ์ ์์ด์ผ ํฉ๋๋ค.
์ฌ์ค ์ด๊ฒ์ ์ง๊ธ๋ ์๋์ผ๋ก ์ํํ๋ ๊ฒ์ด ์๋นํ ์ฌ์ธ ์ ์์ต๋๋ค.
npm pack package@version
).ํธ์ง: ๋ถํํ๋ ์์ ๊ณต๊ฐ ์ ๊ธ ํ์ผ์๋ ์ฑ ํจํค์ง์ ์ข ์์ฑ์ผ ์ ์๋ ์์ ๊ณต๊ฐ ๋ด์ ํจํค์ง ๋ฒ์ ์ด ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ชจ๋ ์๋ชป๋ ๊ฒ์ ๋๋ค. ์์ ๊ณต๊ฐ ์ ๊ธ ํ์ผ์์ ์ฑ ์ ๊ธ ํ์ผ์ ๋ง๋ค ๋ ๋ณต์ฌ๋ณด๋ค ๋ ๋ณต์กํ ์์ ์ด ํ์ํฉ๋๋ค.
๋ณ๋์ ์ ๊ธ ํ์ผ์ด ๋ต์ธ์ง ํ์คํ์ง ์์ง๋ง ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. CLI์ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ monorepo๋ฅผ ์ค์ ํ์ต๋๋ค. CLI์๋ ํน์ ์ค์ ์ด ์๋ ๋ฐ์คํฌํฑ ์์คํ ์์๋ง ์๋ํ๋ ํ๋ซํผ๋ณ ํจํค์ง๊ฐ ๋ช ๊ฐ ํ์ํฉ๋๋ค. ๋ฐ๋ฉด์ ํ์ฌ ์์ ๊ณต๊ฐ ๊ตฌํ์์๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ๋์ปค ์ด๋ฏธ์ง๋ก API๋ฅผ ๋น๋ํ ์ ์์ด์ผ ํฉ๋๋ค.
@samuela ์ ๋งค์ฐ ์ ์ฌํ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค! ์ด๊ฒ์ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค!
๋ด ์ฌ์ฉ ์ฌ๋ก๋ ๋ค๋ฅธ "์ค์ " ์ฌ๋ก์ ๋นํด ์๊ธฐ๊ฒ ๋ณด์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ์ ํธ๋ฆฌํฐ์ ๋ํ monorepo๊ฐ โโ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ฐ์ ํํฌ๊ฐ packages/*
์์ต๋๋ค.
packages/*
์์ ๋ ๋ฒ์งธ ์์
๊ณต๊ฐ์ด ์์ต๋๋ค. local/*
์
๋๋ค. ์ด๊ฒ์ ์ค์ ๋ก gitignore์ ์์ผ๋ฉฐ, ์์ด๋์ด๋ ํ์ฌ์ ๊ฐ๋ฐ์๊ฐ ๊ฑฐ๊ธฐ์์ ์ํ๋ ๋ชจ๋ ๊ฒ์ ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด create-react-app
์ฑ์ ๊ฑฐ๊ธฐ์ ๋ฃ๊ณ ๊ฐ๋ฐ ์ค์ ํํฌ๋ฅผ ํ
์คํธํ ์ ์์ต๋๋ค.
์ด์ local/*
ํจํค์ง๊ฐ gitignore์ ์์ง๋ง ๋ฃจํธ yarn.lock
๋ ๋ก์ปฌ ์์
๊ณต๊ฐ์ผ๋ก ์ธํด ๋จ์ํ ๋ถํ๋ ค์ง๊ณ ์ค์ผ๋์ด git์ ์ฒดํฌ์ธ๋ฉ๋๋ค.
๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ผ๋ถ ์์ ๊ณต๊ฐ์ด ๋ค์๊ณผ ๊ฐ์ ๋งคํ๊ณผ ๊ฐ์ ํน์ ์ ๊ธ ํ์ผ์ ์ฌ์ฉํ๋๋ก ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
"workspaces": {
"packages": [
"packages/*",
"local/*"
],
"lockfiles": {
"local/*": "./local.yarn.lock"
}
}
๋๋ "_์ด_ ์์ ๊ณต๊ฐ์์ ์ ๊ธ ํ์ผ์ ์๋ฌด๊ฒ๋ ๋ฃ์ง ๋ง์ญ์์ค"๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์, ๋ด ๊ฒ์ ์ฒ์๋ถํฐ ์ฌ๊ฐํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋๋๋ค. :)
๋ณ๋์ ์ ๊ธ ํ์ผ์ด ๋ต์ธ์ง ํ์คํ์ง ์์ง๋ง ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. CLI์ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ monorepo๋ฅผ ์ค์ ํ์ต๋๋ค. CLI์๋ ํน์ ์ค์ ์ด ์๋ ๋ฐ์คํฌํฑ ์์คํ ์์๋ง ์๋ํ๋ ํ๋ซํผ๋ณ ํจํค์ง๊ฐ ๋ช ๊ฐ ํ์ํฉ๋๋ค. ๋ฐ๋ฉด์ ํ์ฌ ์์ ๊ณต๊ฐ ๊ตฌํ์์๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ๋์ปค ์ด๋ฏธ์ง๋ก API๋ฅผ ๋น๋ํ ์ ์์ด์ผ ํฉ๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ ๋ชป ๋ฐ์์ต๋๋ค. ๋ด๊ฐ ๋ณด๊ธฐ์, yarn.lock ํ์ผ์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ์ด์ ์ค ํ๋๋ frozen-dep ํ๋ก๋์ ๋น๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค! Yarn์ ์ ์์๋ ๊ทธ๊ฒ์ ์์์ต๋๊น?
๋จ์ผ ์ ๊ธ ํ์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ ๋ค๋ฅธ ์ฃผ์ฅ์ ์ฝ๋ ์์ ๊ถ์ ๋๋ค. GitHub CODEOWNERS ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๋จ์ผ ์ ์ฅ์๊ฐ ์๋ ๊ฒฝ์ฐ ํจํค์ง์ ๋ํ ์์ ํ ์์ ๊ถ์ ๊ฐ๋ฐ์ ๊ทธ๋ฃน์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์์ ์ ์์ ๊ณต๊ฐ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ค์นํ๋ฉด ํญ์ ๋ฃจํธ ์์ค ์ ๊ธ ํ์ผ์ด ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ๋ณ๊ฒฝ์ ์ ๊ธ ํ์ผ์ ์ฝ๋ ์์ ์์ ์น์ธ์ ๋ฐ์์ผ ํ๋ฉฐ, ์ถฉ๋ถํ ๊ท๋ชจ์ ๋จ์ผ ์ ์ฅ์๊ฐ ์ฃผ์ด์ง๋ฉด ์๋ ์์ ๊ณต๊ฐ์ ์์ ์์ ๋ค๋ฆ ๋๋ค.
์์ ๊ณต๊ฐ๋ณ ์ ๊ธ ํ์ผ์ ์์ฑํ๋ ์ต์ ์ด ์๋ ๋ ๋ค๋ฅธ ์ด์ : Google App Engine์ ์ ๊ธ ํ์ผ(NPM/Yarn) ์์ด ๋ ธ๋ ์๋น์ค ์์์ ๊ฑฐ๋ถํฉ๋๋ค. ์ด๊ฒ์ ๊ทธ๋ค ์ ์ฅ์์ ํ๋ฅญํ devop์ด์ง๋ง ์ฐ๋ฆฌ์๊ฒ๋ ๊ณ ํต์ ๋๋ค. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
yarn start
(์ ์ผํ๊ฒ ์ง์๋๋ ์ง์
์ )๋ฅผ ์์ ํฉ๋๋ค.๊ถ๊ทน์ ์ผ๋ก ์์
๊ณต๊ฐ ์ ๊ธ ํ์ผ๋ณ๋ก ์์ฑ๋ yarn install --workspace-lockfile
๋ช
๋ น์ด ์ต์์ ์๋ฃจ์
์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํจํค์ง ์์ค ์ ๊ธ ํ์ผ์ ๋ํ ์ต์ ์ด ์์ผ๋ฉด ์ฐ๋ฆฌ์๊ฒ๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก๋ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ๋ก์ปฌ ์ข ์์ฑ์ ๊ด๋ฆฌํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์๋ํ๊ณ ์์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๋จ์ผ ํจํค์ง๋ง ํฌํจํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์์ต๋๋ค. ์ด๊ฒ๋ค์ ๋ชจ๋ ๊ฒ์๋์ด ํจ๊ป ์ฌ์ฉํ ์ ์์ง๋ง ๋ก์ปฌ์์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ก ์ฐ๊ฒฐํ๋ฉด ๋งค์ฐ ์ ์ฉํ ๋๊ฐ ๋ง์ต๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ถ ๊ฐ๋ฐ์๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ ๋ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฐ๋ฆฌ ์ปดํจํฐ์ ๋ณต์ ํ๋ ํ์ค ๋น ์์ฌ ์์ ๊ณต๊ฐ ๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์๋ํ๊ณ ํจํค์ง ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ก์ปฌ ๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋ณต์ ํฉ๋๋ค. ์ฐ๋ฆฌ ์ค ์ผ๋ถ๋ ํ๋์ ํจํค์ง ๋ณต์ ๋ณธ์ ๊ฐ์ง ์ ์๊ณ ์ผ๋ถ๋ 5๊ฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ๋ก์ปฌ, ๊ต์ฐจ ๋ฆฌํฌ์งํ ๋ฆฌ, ๊ต์ฐจ ์ข ์์ฑ ๊ฐ๋ฐ์ ์ ๋์ ์ผ๋ก ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ํด๊ฒฐํ ์ ์๋ ํ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ข
์์ฑ์ ํธ์งํด๋ ๋ก์ปฌ ์์ฌ ์ ๊ธ ํ์ผ์ด ์
๋ฐ์ดํธ๋์ง ์๊ณ ํญ์ ์
๋ฐ์ดํธ ์ข
์์ฑ์ ์
๋ฐ์ดํธํ์ง ์๋ ๋น ๋ชจ๋
ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฃจํธ ํ์ผ์ด ์
๋ฐ์ดํธ๋ฉ๋๋ค(๋ชจ๋ ํญ๋ชฉ์ด ๋ค์ ์๋์ ์์ต๋๋ค. /packages
gitignore.
๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํธ์ ๋ํ ์ ๊ธ ํ์ผ ์ฐ๊ธฐ๋ฅผ ํธ์ด์คํธํ์ง ์๋ ์ต์ ์ด ์์ผ๋ฉด ํ๋ฅญํ๊ณ ํจํค์ง ์์ค์์ ์์ฑํ๋๋ก ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ธ๊ธํ Docker์ ๊ด๋ จ๋ ๋ฐฐํฌ ๋ฐ ๋น๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ผ๋ฉฐ ์ด๊ฒ๋ ํด๊ฒฐํ ์ ์์ต๋๋ค!
์ด ๊ธฐ๋ฅ์ ์ ์๊ฒ๋ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์ผ๋ถ ํจํค์ง๊ฐ ๋ค๋ฅธ ํ๋ซํผ์ ๋ฐฐํฌ๋ ๋จ์ผ ์ ์ฅ์๊ฐ ์์ต๋๋ค. ํ๋๋ Now.sh์ ํจ๊ป ๋ฐฐํฌ๋ Next.js ์ฑ์ด๊ณ ๋ค๋ฅธ ํ๋๋ Firebase์ ๋ฐฐํฌ๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ ๋ชจ์์ ๋๋ค.
์ด ๋ ๋ฐฐํฌ ๋ชจ๋์์ ์์ค ์ฝ๋๊ฐ ๋ฒ๋ค๋ก ์ ๊ณต๋๊ณ ํด๋ผ์ฐ๋์ ์ค์น ๋ฐ ๋น๋ํ ์ ์๋๋ก ์
๋ก๋๋ฉ๋๋ค. ์์ค์ ํจ๊ป ์ฌ์ฉํ yarn.lock
ํ์ผ์ด ์๋ค๋ ๊ฒ์ ์ข
์์ฑ์ด package.json์ ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์ค์น๋๊ณ ์ ๊ธด ๋ฒ์ ์ด ์์์ ์๋ฏธํฉ๋๋ค.
๋ํ ๊ฐ ์์ ๊ณต๊ฐ์์ yarn.lock ํ์ผ์ ํ์ฑํํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ๋ ์์ฌ ์์ ๊ณต๊ฐ์ด ์ฃผ๋ก monorepos๋ฅผ ์ํ ๊ฒ์์ ์๊ณ ์์ง๋ง @LeeCheneler ์ ๋งค์ฐ ์ ์ฌํ ๊ฒฝ์ฐ ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ํ๋ก์ ํธ(๋ชจ๋ ์์ฒด ์ ์ฅ์๊ฐ ์์)์์ ์ข
์์ฑ์ผ๋ก ์ฌ์ฉํ๋ React ๊ตฌ์ฑ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์์ฌ ์์
๊ณต๊ฐ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ก์ปฌ ๋ฒ์ ์ ์ฝ๊ฒ ์ฐธ์กฐํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋ก์ปฌ ๋ฒ์ ์ ๋น ๋ฅด๊ฒ ์ ํํ ์ ์์ต๋๋ค. ๋ํ library: "*"
์ข
์์ฑ์ด ๋ณ๊ฒฝ ์์ด ์๋ํ๊ธฐ ๋๋ฌธ์ ํ๋ก๋์
์ผ๋ก ํธ์ํ ๋ package.json์ ์์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ์ ์ผํ ๋ฌธ์ ๋ ์์ฌ ์ ๊ธ ํ์ผ์ด ์์ผ๋ฉด ๊ฐ ํ๋ก์ ํธ์ ํ๋ก๋์
๋ฒ์ ์ด ๋ค๋ฅธ ํจํค์ง ๋ฒ์ ์ ์ฌ์ฉํ๊ฒ ๋ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
์ด ๋ฌธ์ ๋ yarn ์์ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ ๋ชจ๋ ํจํค์ง ๊ฐ๋ฐ์์๊ฒ ๊ณตํต์ ์ผ ๊ฒ์ด๋ผ๊ณ ์์ํด์ผ ํฉ๋๋ค.
์ต์์ ์ ๊ธ ํ์ผ์ ๋ ๋ค๋ฅธ ์ค์ํ ๋ฌธ์ ๋ Docker์ ๊ณ์ธต ์บ์ฑ์ ์ค๋จํ๋ค๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋จผ์ package.json ๋ฐ yarn.lock์ ๋ณต์ฌํ์ฌ Docker ์บ์ฑ์ ์ต์ ํํ ์ ์์ต๋๋ค. Docker๊ฐ ํด๋น ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ์ด์ ๊ณ์ธต์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ํด๋น ์ ๊ธ ํ์ผ์ด ์ ์ฒด ๋ชจ๋ ธ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ๋จ์ผ ํ์ผ์ธ ๊ฒฝ์ฐ ํจํค์ง๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์บ์๊ฐ ๋ฌดํจํ๋ฉ๋๋ค. ์ฐ๋ฆฌ์๊ฒ ์ด๊ฒ์ ์บ์ ์์ด ๋ชจ๋ ํจํค์ง๊ฐ ๋น๋๋๋ ์์ฒญ๋๊ฒ ๋๋ฆฐ CI/CD ํ์ดํ๋ผ์ธ์ ์ด๋ํฉ๋๋ค. ํน์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ํด ํจํค์ง ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ Lerna์ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ๋ํ ์ ๊ธ ํ์ผ์ ์ข ์์ฑ ๋ณ๊ฒฝ์ด ์ต์์ ์์ค์ ์๊ธฐ ๋๋ฌธ์ ์ ํ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋จ๋ฉ๋๋ค.
์ด (์ฝ๊ฐ ์ค๋๋) ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด์ ์ ๊ฐ์ด์ง๋ง ์ด๊ฒ์ด ๋์์ด ๋ ์ฌ์ฉ ์ฌ๋ก๋ ์์ต๋๋ค. ๋
๋ฆฝ์ ์ผ๋ก ํธ์คํ
๋๊ณ ๊ฐ๋ฐ๋ 10๊ฐ ์ ๋์ ๋ง์ดํฌ๋ก ์๋น์ค๊ฐ ์์ง๋ง yarn install
๋ฅผ ์
๋ ฅํ์ฌ ๋ชจ๋ ํด๋์ ์ข
์์ฑ์ ์ค์นํ ๋ค์ yarn start
๋ฅผ ์คํํ ์ ์๋ ์ค์ ์์
๊ณต๊ฐ ์ ์ฅ์๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค. ๋ชจ๋ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ์์ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. ์ด๊ฒ์ ๋น๊ต์ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ก ์ํํ ์ ์๋ ์์
์ด์ง๋ง yarn ์์
๊ณต๊ฐ์ผ๋ก๋ ์ํํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์์ง๋ง ๊ฐ micorservice์ yarn.locks๋ฅผ ์กด์คํ๋ฉด์ ์๋ํ๋๋ก ํ ์ ์์์ต๋๋ค.
@nahtnam Yarn 1.x monorepo์ ์์ด๋์ด๋ ์กฐ๊ธ ๋ค๋ฅด๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ ์ง๋ถ ์๋์ ๋
๋ฆฝ์ ์ธ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ์ผ๋ถ ๊ตฌ์ฑ ์์๊ฐ ๋
ธ์ถ๋ ๋จ์ผ ๋ํ ํ๋ก์ ํธ(์์
๊ณต๊ฐ์ด๋ผ๊ณ ํจ)์ ๊ดํ ๊ฒ์
๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ ์์ ํ ๋
๋ฆฝ์ ์ด์ง ์์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. Babel ์ปดํ์ผ๋ฌ๋ ํ๋์ ๋ ํฐ ์ํฐํฐ๋ก, preset-env
๋ ํ์ ๋ชจ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ์ข
์์ฑ์ด ํตํฉ๋๋ค๋ ์ ์์ ๋์ง์ ์
๋๋ค. ์ผ๋ถ ํจํค์ง๊ฐ core-js
์ ์์กดํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋จ์ผ ํจํค์ง์์ ๋์ผํ core-js
๋ฒ์ ์ด์ด์ผ ํฉ๋๋ค. ๋จ์ผ ๋ฃจํธ ์ ๊ธ ํ์ผ๋ก ๋ค๋ฅธ ๋ฒ์ ์ ์ ๊ทธ๊ฑฐ๋ ํ๋ก์ ํธ์ ์ผ๋ถ๊ฐ ๋ค๋ฅธ ๋ฒ์ ์ ์์กดํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ์๋์ผ๋ก ๋ฃจํธ node_modules
์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด๋ ์์ ํ ๋
๋ฆฝ์ ์ธ ํ๋ก์ ํธ์์๋ ์ด์ํฉ๋๋ค.
๋ฐ๋ผ์ ๋ง์ดํฌ๋ก ์๋น์ค ํฉ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ(๋ ๋ฆฝ์ ์ด๋ฉฐ ์ผ๋ถ๋ ๋ช ๋ ๋์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์ผ๋ถ๋ ์์ฑ/์ ๋ฐ์ดํธ๋๋ฉฐ ๋ค๋ฅธ ํ์์ ๊ฐ๋ฐํ ์ ์์) ๋ฃจํธ๊ฐ ์๋ ๊ฐ์ธ ์ ๊ธ ํ์ผ์ด ์์ด์ผ ํฉ๋๋ค. ์ ๊ธ (Docker ๋ฌธ์ ๋ ์ฌ๊ธฐ์ ์์ต๋๋ค). ์ ์ผํ ์ง๋ฌธ์ ์คํฌ๋ฆฝํธ ์คํ์ ์ด๋ค ๋๊ตฌ๊ฐ ๋์์ด ๋ ๊ฒ์ธ์ง์ ๋๋ค. Lerna๋ Yarn์ ๋ฌถ์ฌ ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ต์ด ๋ ์ ์์ต๋๋ค.
์ ์ผํ ์ง๋ฌธ์ ์คํฌ๋ฆฝํธ ์คํ์ ์ด๋ค ๋๊ตฌ๊ฐ ๋์์ด ๋ ๊ฒ์ธ์ง์ ๋๋ค. Lerna๋ Yarn์ ๋ฌถ์ฌ ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ต์ด ๋ ์ ์์ต๋๋ค.
@the-spyke ๊ทธ๋ฟ๋ง์ด ์๋๋๋ค. yarn workspaces
๋ npm link
์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์ฉ ๋ชจ๋์ ์ฐ๊ฒฐํ์ฌ ํด๊ฒฐํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ์
๋๋ค. npm link
๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ์๋ํ์ง ์์ต๋๋ค.
@spyke ๊ฐ์ฌํฉ๋๋ค! ์ด๋ค ์ด์ ์์์ธ์ง ๋ค์งํ ์ค ์์์ต๋๋ค(lerna ๋ yarn ์์ ๊ณต๊ฐ). ๋๋ lerna๋ฅผ ์กฐ์ฌํ๊ณ ๊ทธ๊ฒ์ด ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ด๊ฐ ์์
ํ๋ ๋ชจ๋ ๋จ์ผ ํ๋ก์ ํธ์ ๋ํด ์์
๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ์๋ํ๋ฉด ํ์ํ ๋ ์
๋ฐ์ดํธํ ์ ์๋ ๋ณ๋์ utilities
ํจํค์ง๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ด์ง, ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ํจํค์ง๋ฅผ ๋ถ๊ธฐํ๊ณ ์ถ์ ๋(๋ณธ์ง์ ์ผ๋ก ๋ด๊ฐ ๋ค์ด๋ณธ ์ ์ด ์๋ ๋์์ ๋ ๊ฐ์ ๋ถ๊ธฐ์์ ์์
ํ ์ ์๋๋ก ํ์ฉํจ), ๋ด utilities
์ ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋๋ง๋ค ์ข
์์ฑ์ ๋ค์ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. package.json
์ ์ถ๊ฐํ์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ IDE ๊ฐ์ ธ์ค๊ธฐ์ ๊ฒฝ์ฐ) ; ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค. @the-spyke๋ ์ข์ ์ง์ ์ ํ๊ณ ์์ต๋๋ค. ์๋ง๋ independent projects under one roof
๋ ์์
๊ณต๊ฐ์ ๋ชฉ์ ์ด ์๋ ์ ์์ง๋ง ์ด๊ฒ์ด ์ ๊ฐ ์ฌ๊ธฐ์ ํ๊ณ ์๋ ์ผ์
๋๋ค. monorepo-base
์ ์ฅ์๊ฐ ํ๋ ์์ต๋๋ค. packages
ํด๋๋ ์ ์ธ ๋์ง๋ง packages
์๋์ ๊ฐ ํด๋๋ ๋ณ๋์ ๋
๋ฆฝ์ ์ธ git repo์
๋๋ค.
๋ฌผ๋ก ์ด๊ฒ์ ์ ๋ฅผ ์ด ์ค๋ ๋์ ์ฃผ์ ๋ก ์๋ดํฉ๋๋ค. ๋ชจ๋ ํจํค์ง๋ฅผ ํ๋์ repo๋ก ์ปค๋ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฃจํธ ์์ค yarn.lock
๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋๋ ๋ชจ๋ ๊ฒ์ ์ค์นํ๊ธฐ ์ํด --no-lockfile
๋ฅผ ์ฌ์ฉํด ์์ผ๋ฉฐ ์ต๊ทผ์ class-validator
์ ์ถฉ๋ํ๋ ๋ฒ์ ์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ต๋๋ค. ์ง๊ธ์ ๋ชจ๋ dep๋ฅผ ํน์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๊ณ (์์งํ ๊ทธ ์์ค์ ์ ์ด๊ฐ ๋์๊ฒ ๋ ์ดํด๊ฐ ๋จ) ์๋ ๋ฐฉ์์ ํ์ธํฉ๋๋ค. ๋๋ ์ ์ฒด ํธ๋ ๋๋ฅผ ๋ค์ ์ฝ์ ๊ฒ์
๋๋ค. ์๋ง๋ ์ ์ฌ์ฉ ์ฌ๋ก์ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ํ์ด ์์ ๊ฒ์
๋๋ค.
์ถ์ .
yarn why
๋ lockfile ์์ด๋ ์๋ํ์ง ์์ผ๋ฉฐ ์ผ๋ถ ์ฌ๋๋ค์ด App Engine์ ๋ฌธ์ ๋ฅผ ์ธ๊ธํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ๋ชจ๋ ํจํค์ง๊ฐ ๋ณ๋์ ์ ์ฅ์์ธ ๊ฒฝ์ฐ(VCS์ ์ถ๊ฐํ์ง ์๊ณ ) ์ค์นํ ๋๋ง๋ค ์ ๊ธ ํ์ผ์ด ์์ฑ๋ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ ๊ตฌ์ฒด์ ์ธ ๊ฒฝ์ฐ์ ๋ํด์๋ ํ์คํ์ง ์์ต๋๋ค.
๋ถํํ๋ @johannes-scharlach๊ฐ ์ ์ํ ์๋ฃจ์ ์ ๋น๋๋ ์ด๋ฏธ์ง์ ์ผ๋ถ ๋น๋ ํด๋์ ํฌํจ๋์ง ์์ ๋ฐํ์ ๋ ธ๋ ๋ชจ๋์ด ํ์ํ ๊ฒฝ์ฐ ๋งค์ฐ ์ง์ ๋ถํด์ง๋๋ค. ์ต์ข ๋น๋ ๋จ๊ณ.
(์ฃผ์ ์์ ์ฝ๊ฐ ๋ฒ์ด๋จ )
๋ค์์ ๊ธฐ์กด Docker ์ํฌํ๋ก์ ๋ํ ์ํฅ์ ์ต์ํํ๋ฉด์ ๋๋ฌํ ์๋ฃจ์ ์ ๋๋ค.
ln project/yarn.lock packages/package1/yarn.lock
- ๋ฃจํธ yarn.lock
์์ ๊ฐ ํจํค์ง๋ก ํ๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ญ๋๋ค.COPY yarn.lock .
๊ฐ๊ฐ packages/package1/Dockerfile
yarn install
Docker ๋ด๋ถ์ฅ์ :
๋จ์ :
--frozen-lockfile
์ด(๊ฐ) ์๋ํ์ง ์์ต๋๋ค. ์์
๊ณต๊ฐ ํจํค์ง๋ yarn.lock
ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก yarn์ yarn.lock
์กด์ฌํ์ง ์๋ package.json
"์ถ๊ฐํ" ํจํค์ง๋ฅผ ๋ด
๋๋ค.CI/CD ํ์ดํ๋ผ์ธ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก yarn --frozen-lockfile
๋ฅผ ์ํํ์ฌ ์ด๋ฅผ ํผํ ์ ์์ผ๋ฏ๋ก ์ด๋ ์๊ด์์ด ์ฌ์ํ ๋จ์ ์
๋๋ค.
ํธ์งํ๋ค:
์ ์๊ฐ์๋ ์ค์น์ ๋ํ ์์ฌ ๋ฌธ์๊ฐ ํจํค์ง ํด๊ฒฐ ํ๋ก์ธ์ค์์ ์ ๊ธ ํ์ผ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์กฐ๊ธ ๋ ๋ช
ํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํธ์งํ๋ค:
๋ฐ๋ผ์ git์ ์ค์ ๋ก ํ๋ ๋งํฌ๋ฅผ ์ง์ํ์ง ์๊ณ ์ํํธ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ง ์ง์ํ๋ฏ๋ก ์ด ์ ๋ต์ ์๋ํ์ง ์์ต๋๋ค.
๋ ๋ค๋ฅธ ๋์์ ์ฌ์ ์ปค๋ฐ githook์ ์ฌ์ฉํ์ฌ yarn.lock
๋ฅผ ๊ฐ ์์
๊ณต๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค... ๋ก์ปฌ ์ปดํจํฐ์์ ๋ฐฐํฌํ ๋ ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ํ์ฉํ๋ฏ๋ก ์ด์์ ์ด์ง ์์ต๋๋ค.
@dan-cooke ํต์ฐฐ๋ ฅ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
@dan-cooke, ์์ ๊ณต๊ฐ์ ์๋ก์ด ์ข ์์ฑ์ด ๋ชจ๋ Dockerfile์ ๋ํ ์ค์น ๊ณ์ธต์ ๋ฌดํจํํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ Docker์ ๊ณ์ธต ์บ์ฑ์ ์ค๋จํฉ๋๋ค.
@migueller ์ค์น ๊ณ์ธต์ด ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํจํค์ง์ ๋ํด ํ๋์ ์ ๊ธ ํ์ผ์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. ์ข
์์ฑ์ ํ๋์ ๊ฑฐ๋ํ ๋ชฉ๋ก์ผ๋ก ๋ณํฉํ๊ณ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ด Workspaces์ ์ ์ฒด ๋ชฉ์ ์
๋๋ค. Docker ์บ์๋ฅผ "์ค๋จ"ํ๋ ๊ฒ๊ณผ๋ ๋ฌ๋ฆฌ ์ค์ ์ข
์์ฑ์ด package.json
์ง์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์บ์๊ฐ ๋ฌดํจํ๋๋ฏ๋ก ํจํค์ง์ ์ต์ข
์ฝ๋๋ yarn.lock
์ ๋ด์ฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก yarn.lock
๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ๋ชจ๋ ํจํค์ง๋ฅผ ๋ค์ ๋น๋ํด์ผ ํ๋ฉฐ Docker๋ ๋ชจ๋ ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋น๋๊ฐ yarn install
๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ where every package is built without the cache
์ ๊ฐ์ง ์์ต๋๋ค(์๋ง๋ ์ด๊ฒ์ ์ค์ ํด์ผ ํ ๊ฒ์
๋๋ค).
@migueller
์ณ์. ๋คํ์ค๋ฝ๊ฒ๋ ์ ์ข
์์ฑ์ ์์ฃผ ์ถ๊ฐํ์ง ์์ผ๋ฏ๋ก ์ต๋ ํ ๋ฒ ์คํ๋ฆฐํธ์๋ง ๋ฌธ์ ๊ฐ ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ Docker์์ ์ฌํ ๊ฐ๋ฅํ ์ข ์์ฑ์ ์ํด (์ฐ๋ฆฌ๋ฅผ ์ํด) ์ง๋ถํด์ผ ํ๋ ์ ์ ๋น์ฉ์ ๋๋ค.
@the-spyke, ์ฐธ์ผ๋ก. ์ด๊ฒ์ด ์ด ๋ฌธ์ ๊ฐ ํจํค์ง๋น ๊ฐ๋ณ ์ ๊ธ ํ์ผ์ ๊ฐ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ด์ ์ ๋๋ค. ์ด๋ฐ ์์ผ๋ก ์บ์๋ ๊ณ์ธต์ ํจํค์ง์ ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋๊ณ ๋ค๋ฅธ ํจํค์ง์ ๋ ๋ฆฝ์ ์ผ ๋๋ง ๋ฌดํจํ๋ฉ๋๋ค.
์ด ํ ๋ก ์ v7.0๋ถํฐ ์์ ๊ณต๊ฐ๋ ์ง์ํ๋ npm ์์ฒด๋ก ์ฎ๊ธฐ๋ ๊ฒ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋๋ ๊ด๋ จ ์ฃผ์ ๋ฅผ ์กฐ์ฌํด ์์ผ๋ฉฐ ์์ ๋ด ์๊ฒฌ ์ ์ฝ๊ฐ์ ์ค๋ช
์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค(์ฃผ๋ก ๊ฒฝํ์ด ๋ํ ๊ฐ๋ฐ์๋ฅผ ๋์์ผ๋ก ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ง๋ฉดํ ๋ฌธ์ ๋ lockfile
์ ์ค์์ฑ์ ์ดํดํ๋ ๋ฐ ์คํจํ๊ธฐ ๋๋ฌธ์
๋๋ค.
"ํน์ ๋ฒ์ ์ ๋ํ ๋ชจ๋ ์ข ์์ฑ์ ์ ๊ธ"๊ณ ์ ๋ผ๊ณ ; ๋ถํํ๋, ๋ด๊ฐ ๊ณ ๋ คํ์ง ์์ ํ์ ์ข ์์ฑ ์ ๋ฐ์ดํธ( ์ฌ๊ธฐ ๊ธฐ์ฌ์ ๋ง์ง๋ง ๋จ๋ฝ)๊ฐ ์ ์ฌ์ ์ผ๋ก ์ค๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ง ๋ชปํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก lockfile์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
๋๋ ๊ณผ๊ฑฐ์ ์ฌ๋ฌ ๋ฒ ์
๋ฐ์ดํธ๋ฅผ ๊นจ๋ ๋ฐ ์ถฉ๋ถํ ์๊ฐ ์ด์์ ๋ญ๋นํ์ต๋๋ค. ๋๋ ์ฌ์ํ ์
๋ฐ์ดํธ๋ก ์ธํ ๋ณด์ด์ง ์๋ ๋ฒ๊ทธ๋ณด๋ค ๋ณํฉ ์ถฉ๋๊ณผ ์กฐ์ง์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ monorepo์์ lockfile
๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ๊ฒ์
๋๋ค.
์์์ ๋งํ๋ฏ์ด ์ด ๋ฌธ์ ์ ๋ํ ์ง์ ์ด ์๊ธฐ๋ฅผ ๋งค์ฐ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค.
@migueller ๊ฐ๋ณ ์ ๊ธ ํ์ผ์ ๊ฐ๋ณ Yarn Monorepos๋ฅผ ์๋ฏธํฉ๋๋ค. Monorepo์์ deps ๊ท ์ผ์ฑ์ ๊นจ๋จ๋ฆฌ๊ธฐ ๋๋ฌธ์ Workspace์ ๋ํ ์ ๊ธ ํ์ผ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด Yarn Monorepo์ ์๋ ์์ด๋์ด์์ ๋ฒ์ด๋๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์์ ๊ณต๊ฐ์์ ๋ค๋ฅธ ๋ฒ์ (๋๋ ์ ์ฒด ํ์ ํธ๋ฆฌ)์ ์ฌ์ฉํ๋ ๋์ ๋ฃจํธ์์ deps๋ฅผ ๋จ์ผ ๋ชฉ๋ก์ผ๋ก ํตํฉ, ํธ์ด์คํ ๋ฐ ์ถ์ํ๋ ๊ฒ์ ๋๋ค. .
@the-spyke ๊ทธ๋ฌ๋ ์๋ ๋ฌธ์ ๋ ์ ํํ ๊ทธ ๋ฐ๋์ ๋๋ค. ์์ ๊ณต๊ฐ๋น ์ ๊ธ ํ์ผ์ ๋๋ค.
์์ ๊ณต๊ฐ๋ง๋ค ์ ๊ธ ํ์ผ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
Monorepo์์ dep ๊ท ์ผ์ฑ์ ๊นจ๋จ๋ฆฝ๋๊น? ๋ฌผ๋ก ๊ฐ๋ฐ์ ์ํด. ๊ทธ๋ฌ๋ ๊ฐ ์์ ๊ณต๊ฐ์์ ๊ฐ๋ฒผ์ด ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๋ฐฐํฌํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ณต์ ์ข ์์ฑ์ ์ ์ฒด ๋ชฉ์ ์ด ์ฌ๋ผ์ง๋๋ค.
๊ณต์ ๋๊ณ ํธ์ด์คํธ๋ deps๋ ๊ฐ๋ฐ ์์๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค.
์์ ๊ณต๊ฐ์ด Docker์์ ์๋ํ๋ ค๋ฉด ์ ๊ธ ํ์ผ์ด ํ์ํฉ๋๋ค.
@dan-cooke ๋ณด์๋ค์ํผ 2018๋ ์๋ ์ด ๋ฌธ์ ๊ฐ ์์์ง๋ง ์ง๊ธ์ ์๊ฐ์ด ๋ค๋ฆ ๋๋ค.
Docker์ Microservices๋ฅผ ๋งํ๋ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ผ๋ฐ npm
ํจํค์ง๋ฅผ ๊ฐ๋ฐํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋ด dependencies
์ฌ์์ ๋ฐ๋ผ ์ต์ข
์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ณ ์ ํ production
์ข
์์ฑ ํ์ ํธ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ์ ๊ฐ ์ํ๋ ๊ฒ์ ๊ฐ๋ฐ ๊ฒฝํ์ ๊ทน๋ํํ๊ณ Monorepos์ Yarn Workspaces๊ฐ ์๋ฒฝํ๊ฒ ์ํํ๋ ๊ฒ์
๋๋ค.
๋์์ ๋ง์ดํฌ๋ก์๋น์ค(MS)๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ๊ฐ๋ฅํ ์ํฉ์ด ์์ต๋๋ค.
๋
๋ฆฝ ํ๋ก์ ํธ. ์ผ๋ถ MS๋ ๊ฐ๋ฐ โโ์ค์ด๊ณ ์ผ๋ถ๋ ๋ช ๋
๋์ ๊ฑด๋๋ฆฌ์ง ์์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ทธ๋ค์ ์์ ํ ๋
๋ฆฝ์ ์
๋๋ค. ์ด์์ ์์๋ค UserService
์ฌ์ฉ [email protected]
๋ฐ MessagesService
์ฌ์ฉํ์ฌ [email protected]
. Workspaces์ ํด๋๋ฅผ node_modules
๋ฃจํธ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ฌ์ด ์ผ์ด ์๋๋๋ค. ๋ฐ๋ผ์ ๋ฃจํธ ์ ๊ธ ํ์ผ์ ๊ฐ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ณ๋์ ํ์ผ(๋ฃจํธ)์ ์์ฑํ์ฌ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. Yarn ๋ฌธ์์์ Multirepo
๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋น์ ์ด ๋งํ๋ ๊ฒ์ "ํธ์๋ฅผ ์ํด ๋ฃจํธ ํด๋์ ๋ค๋ฅธ ํด๋์์ ์์
์ ์คํํ๊ณ ์ถ์ต๋๋ค"์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์์ ํ ๋ค๋ฅธ ์ฃผ์ ์
๋๋ค.
Jest/Babel/etc์ ๊ฐ์ ํตํฉ ์ข
์์ฑ์ ๊ฐ์ง ํ๋ก์ ํธ. ์ด๊ฒ์ด ์์
๊ณต๊ฐ์ด ๋ง๋ค์ด์ง ์ด์ ์ด์ง๋ง MS์๋ ์ถ๊ฐ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. Linting ๋ฐ ํ
์คํธ์ ๊ฐ์ CI ๋จ๊ณ์์๋ ๊ฐ๋ฐ์ ์์คํ
์์์ ๋์ผํ๊ฒ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ ์๋ํฉ๋๋ค. Yarn์ด ๋ฃจํธ node_modules์ ์ค์นํ๊ณ ํ๋ฉดํํ deps. ์ถ๊ฐ๋ก yarn install
๋จ๊ณ๋ฅผ ์บ์ํ์ฌ ๋์ ๋น๋ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
ํ๋ก๋์
์์๋ ์์ ํ ๋ค๋ฆ
๋๋ค. ํ๋์ ์์
๊ณต๊ฐ์๋ง deps๊ฐ ํ์ํ๊ณ utils
ํจํค์ง๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋๋ฉ๋๋ค. ๋งํฌํ๊ฑฐ๋ tarball๋ก ๋ค์ด๋ก๋ํด์ผ ํฉ๋๊น? ๋ฐ๋ผ์ ์ค์ ๋ก ํ์ํ ๊ฒ์ ์์
๊ณต๊ฐ๋น ์ ๊ธ ํ์ผ์ด ์๋๋ผ ์์
๊ณต๊ฐ์ ์ง์ ํ์ฌ ์คํํ ์ ์๋ yarn install --prod <workspace>
์ ๊ฐ์ ๋ช
๋ น์ด ์๊ณ ํ๋ก๋์
dep๋ง ์ค์นํ๊ณ ๋์์ ์ฐธ์กฐ๋์ง ์์ ๋ค๋ฅธ ์์
๊ณต๊ฐ์ ๋ฌด์ํ๋ ๊ฒ์
๋๋ค. ๋ด data
WS๊ฐ utils
WS์ ์์กดํ์ง๋ง logging
WS์๋ ์์กดํ์ง ์๋ ๊ฒฝ์ฐ logging
์์ฒด ๋ฐ ํด๋น deps๊ฐ node_modules
๋ํ๋์ง ์์์ผ ํฉ๋๋ค.
๋น๋ ํจํค์ง๋ฅผ ์ ์ฅ์(npm, Arifactory, GutHub)์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ ์ ๊ธ ํ์ผ์ ์์
๊ณต๊ฐ์ ๋ณต์ฌํ๊ณ ์ฌ๊ธฐ์์ yarn install --prod
์ํํ๋ฉด ์ ์ฌํ ๋์์ ์ป์ ์ ์์ต๋๋ค. ์ค๋๋ ํ์ผ์ ๋ํด ๊ฒฝ๊ณ ํด์ผ ํ์ง๋ง ์ ๋ฒ์ ์ผ๋ก ์ฒ์๋ถํฐ ๋ค์ ๋ง๋๋ ๋์ ํ์ผ์์ ๊ณผ๋ํ deps๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค(๋ฐฉ๊ธ ์๋ํ๊ณ ํฉ๋ฒ์ ์ผ๋ก ๋ณด์
๋๋ค). Offline Mirror๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ ์ข๊ณ ๊ฐ๋ ฅํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ Multirepos๋ฅผ ์ํด ์ ํํ ๊ตฌํ๋ Focused Workspaces๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋์ ๋ด๊ฐ ๋งํ ๊ฒ์ ๋ฌธ์ ๊ฐ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๊ฐ์ง ์์ ์๋ ์๋ค๋ ๊ฒ์ ๋๋ค.
@the-์คํ์ดํฌ
๋๋ ๋น์ ์ด ๋งํ๋ ๊ฒ์ ๋ณธ๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ด ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋ฌ์ฑ๋๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์
๊ณต๊ฐ๋น ์ ๊ธ ํ์ผ์ ์ค์ ๋ก ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ ์ ์์ต๋๋ค. ๋น์ ์ ๋ช ๊ฐ์ง ์ข์ ํฌ์ธํธ๋ฅผ ํ์ธํฉ๋๋ค.
์ด์จ๋ "๋ชจ๋ ์ฌ๋์๊ฒ ๋ง๋" ์๋ฃจ์ ์ด ์๋๋๋ค.
@spyke๋, ์ข์ ์ ์ ๋ง์ํด ์ฃผ์ญ์์ค. Yarn ์์ ๊ณต๊ฐ์ด ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ฌธ์ ์ ๋๊ท๋ชจ ๋จ์ผ ์ ์ฅ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ํด๋น ๋์์ธ๊ณผ ์ผ์นํ๋์ง์ ๋ํด ๋ ๋ง์ ์๊ฐ์ ํด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ๊ถ๊ธํฉ๋๋ค.
.
โโโ packages
โโโ app1
โโโ app2
โโโ lib1
โโโ lib2
โโโ lib3
lib3
๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ app1
๋ฐ app2
์ข
์๋ฉ๋๋ค. lib1
๋ app1
์์๋ง ์ฌ์ฉ๋๊ณ lib2
๋ app2
์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๊ทํ์ ์ ์์ ๋ฐ๋ผ lib1
๋ฐ app1
๋ ์์ฒด ์ ๊ธ ํ์ผ์ด ์๋ ์์ฒด ์์
๊ณต๊ฐ์ ์์ด์ผ ํ๋ฉฐ lib2
๋ฐ app2
์ ๋์ผํด์ผ ํฉ๋๋ค. ์ด์ ๋ฌธ์ ๋ ๋ฌด์์ํ๋ ๊ฒ์
๋๋ค lib3
_both_ ๊ฒฝ์ฐ app1
๋ฐ app2
์ ์์กด? ๋ ์์
๊ณต๊ฐ( app1
๋ฐ app2
)์ด ์์
๊ณต๊ฐ์ lib3
๋ฅผ ์ถ๊ฐํ ๋ค์ ๊ฐ ์ฑ์์ yarn install
๋ฅผ ์คํํ๋๋ก ๋ง๋ค ์ ์์ต๋๊น? Yarn์ด ์ด๊ฒ์ ํ์ฉํฉ๋๊น? app1
๋ฐ app2
๋ฅผ ๋ชจ๋ ๋ก์ปฌ์์ ๊ฐ๋ฐํ๋ ค๋ ๊ฒฝ์ฐ ์ถฉ๋์ด ๋ฐ์ํฉ๋๊น? (์๋ง๋ app1
๋ React ์ฑ์ด๊ณ app2
๋ GraphQL API์) ? ์๋ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ ์ง๋ฌธ์ "์ด ๋ฐฉ๋ฒ์ผ๋ก ํธ์ด์คํ
์ ์ด์ ์ ์ด๋ป๊ฒ ์ป์ ์ ์์ต๋๊น?"์
๋๋ค. ์๋ฅผ ๋ค์ด, app1
์ app2
๊ฐ ๋ง์ ๊ณตํต ์์กด์ฑ์ ๊ณต์ ํ๋ค๋ฉด ๊ทธ๊ฒ๋ค์ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์๋์ง ๋ณผ ์ ์์ผ๋ฉฐ Yarn PnP๊ฐ ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ์
๋๋ค(ํ์ผ์ node_modules์ ๋ณต์ฌํ์ง ์๊ณ ๋์ ๊ณต์ ์บ์๋ฅผ ๊ฐ์ง).
๋๋ ์ด๊ฒ์ ์๋ํ๊ณ ๋ค์๋ณด๊ณ ํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์๋ํ๋ฉด ์๋ง๋ ์ฐ๋ฆฌ๋ Yarn ์์ ๊ณต๊ฐ์ ๊ณ์ ์๋ชป ์ฌ์ฉํ์ ๊ฒ์ ๋๋ค...
ํธ์ง: ๋๋ ๊ทธ๊ฒ์ ์๋ํ๊ณ ์๋ํฉ๋๋ค.
์ ๋ ์ง๊ธ ์ ์ฅ์ ๋ฐ๊ฟจ๊ณ Yarn ์์ ๊ณต๊ฐ์ผ๋ก ์ ์ฒด ๋ชจ๋ ธ๋ ํฌ๋ฅผ ๊ด๋ฆฌํ ๋ ์์ ๊ณต๊ฐ๋น ๊ฐ๋ณ ์ ๊ธ ํ์ผ์ ๊ฐ๋ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋ง์์ ๋ ์ค๋ฅผ ์ ์์ง๋ง ์ฌ๋ฐ๋ฅธ ์ง๋ฌธ์ด ์๋ ์๋ ์์์ ๊นจ๋ฌ์์ต๋๋ค. ๋ ๋์ ์ง๋ฌธ์ "Yarn ์์ ๊ณต๊ฐ์ด ๋จ์ผ ์ ์ฅ์๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๋์์ต๋๊น?"์ ๋๋ค. ๋๋ต์ ํ์์ ๊ฐ์ด "๊ทธ๊ฒ์ ๋ฌ๋ ค ์์ต๋๋ค"์ ๋๋ค.
๋น์ ์ด Babel์ด๊ณ ๋จ์ผ ํ์ด ๋จ์ผ ์ ์ฅ์์์ ์์ ํ๊ณ ์๊ณ ๋ชจ๋ ๊ฒ์ด ์ ๊ธ ๋จ๊ณ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์์ ์ด๋ผ๋ฉด ๊ทธ๋ ์ต๋๋ค. Yarn ์์ ๊ณต๊ฐ์ด ์ค๊ณ๋ ์ด์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ ํ์ด ์๋ ์กฐ์ง์ด๊ณ ๋จ์ผ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋จ์ผ Yarn ์์ ๊ณต๊ฐ ๋ฃจํธ๋ก ์ ์ฒด ๋จ์ผ ์ ์ฅ์๋ฅผ ๊ด๋ฆฌํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค. ๋ชจ๋ ธ๋ ํฌ ๋ด์์ Yarn์ ๊ธฐ๋ณธ ๋์์ด๋ ์ฌ๋ฌ Yarn ์์ ๊ณต๊ฐ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์ด๋ค ์ฑ์ ๋ง๋ค๊ณ ์๋์ง, ๋ช ํ์ด ์๋์ง ๋ฑ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ๋ ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ฐ ์ํฐํฐ(์ด ๊ฒฝ์ฐ Dockerfile์ด ์์)์ ๋ํด ๊ฐ ์ํฐํฐ์ ๋ํด ๋ณ๋์ yarn install
์ํ๋๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ด ๋ถ๋ช
ํด์ก์ต๋๋ค(์ด๊ฒ์ด ์์
ํ๊ฒฝ ๋ฃจํธ์ธ์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด). ์ด๊ฒ์ ์ฝ๋ ์์ ๊ถ์ ๋ํ ๋ช
ํ์ฑ์ ์ ๊ณตํ๊ณ , ๋ค๋ฅธ ์ผ์ด๋์ค์์ ๋ฐ์ํ๋ ๊ฒฉ๋ฆฌ๋ ๋ฐฐํฌ๋ฅผ ํ์ฉํ๊ณ , ์ ๊ธ ํ์ผ ๋ฐ Docker ๋ฑ์ ์บ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
--hoist
์ต์
์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.yarn workspace ...
์ฌ์ฉํ์ฌ ๋จ์ผ ์ ์ฅ์์์ NPM ์คํฌ๋ฆฝํธ ์คํ) ์ ์ฒด ๋จ์ผ ์ ์ฅ์์ ๋ํ ๋จ์ผ ์์
๊ณต๊ฐ ๋ฃจํธ๋ ์๋ง๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ด๋ผ๋ ์ ์ ๋ช
์ฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Babel, Jest, React ๋ฑ์ด ์๋ ํ ํ์ํ ๊ฒ์ ์ ๊ณตํฉ๋๋ค.๋ชจ๋ ธ๋ ํฌ๋ฅผ ์คํํ๋ ๋ฐ๋ ์ ํ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ข ์์ฑ์ ์ถ์ ํ๊ณ CI์์ ์๊ฐ์ ์ ์ฝํ๊ธฐ ์ํด ๋ณ๊ฒฝ๋ ํญ๋ชฉ๋ง ๋ค์ ์์ฑํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? Yarn ์์ ๊ณต๊ฐ์ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ์ฟผ๋ฆฌํ ์ ์๋๋ก ํ์ฌ ๋์์ด ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Lerna๋ ์คํ ์ค์ธ ๋ช ๋ น์ ํ ํด๋ก์ง ์ ๋ ฌ์ ํ์ฉํ๊ธฐ ์ํด ์ด ์์ ์ ์ํํฉ๋๋ค. Yarn v2๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ์ข ์์ฑ ๊ทธ๋ํ๋ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. ํจํค์ง ๊ด๋ฆฌ์ PNPM๋ ์ด ์์ ์ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ธ๋ ํฌ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ Bazel , Pants , Buck ๋ฑ๊ณผ ๊ฐ์ (ํจํค์ง ๊ด๋ฆฌ์๊ฐ ์๋) ๋น๋๋ ๋๊ตฌ๋ฅผ ์๋ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.
@migueller ๊ทํ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ฅด๋ฉด ์๊ฒฉํ๊ฒ ๋
๋ฆฝ์ ์ธ ํจํค์ง๋ ๊ธฐํ ์ด๊ตญ์ ์ธ ๊ฒ์ด ํ์ํ์ง ์์ผ๋ฉฐ ๋ ์์ ๊ฐ๋ฐ์ ์ค์น๋ ์ํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ผ๋ฐ Yarn Monorepo: ๋จ์ผ ๋ฃจํธ ๋ฐ ๋ชจ๋ ํจํค์ง๋ฅผ ์์
๊ณต๊ฐ์ผ๋ก ์์ํด์ผ ํฉ๋๋ค. ์ค์น ์๊ฐ์ด ๋นจ๋ผ์ง๊ณ ๋์คํฌ ์ฌ์ฉ๋์ด ์ค์ด๋ค๋ฉฐ app1
๋ ๋ก์ปฌ ๋งํฌ lib1
๋ฐ lib3
ํฉ๋๋ค. ์ ์ผํ ๋จ์ ์ lib1
devDep์ ์ถ๊ฐํ๋ฉด ๊ณต์ yarn.lock
๊ฐ ์
๋ฐ์ดํธ๋๊ธฐ ๋๋ฌธ์ CI ์บ์ ๋ฌดํจํ๊ฐ ๋ ์์ฃผ ๋ฐ์ํ๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ์ ์ถฉ์์ ๋ง์ด ๊ฑฑ์ ํ๊ธฐ ์ํด ์ข
์์ฑ์ ์
๋ฐ์ดํธํ์ง ์์ต๋๋ค.
lib1
๋ lodash@^4.5.0" and
lib2 may depend on
lodash@^4.10.0"์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. Monorepo์ ๊ฒฝ์ฐ lodash
์ ๋จ์ผ ๋ฒ์ ์ด ์ฌ์ฉ๋๊ธฐ๋ฅผ ์ํ๋ฏ๋ก Yarn์ ๋ฃจํธ node_modules์ ์ฌ๋ ค์ง ` [email protected] "์ ๊ฐ์ ๋ ์ง์ ์์ ํธํ๋๋ ์ต์ ๋ฒ์ ์ ์ค์นํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์
๋ฐ์ดํธ์ ๊ฒฝ์ฐ ๋จ์ผ ํตํฉ ๋ฒ์ ์ ์
๋ฐ์ดํธํ๋ฏ๋ก ๋ชจ๋ ์์
๊ณต๊ฐ์ด ํญ์ ๊ฐ์ ํ์ด์ง์ ์ ์ง๋ฉ๋๋ค. ์ด๊ฒ์ ์ํ๋ ๋์์
๋๋ค.
๋
๋ฆฝ์ ์ธ ํ์ด ๋
๋ฆฝ์ ์ธ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ์ํฉ๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ proj1
๋ proj2
์ [email protected]
์๋ [email protected]
์ ๋จธ๋ฌผ๊ณ ์์ ์ ์ผ์ด๋์ค๋ก ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๋ฌผ๋ก lodash@~4.5.0
์ ๊ฐ์ ๋ณด๋ค ์๊ฒฉํ ์ง์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ง๋ง ์ฌ์ ํ 2๋จ๊ณ ์ข
์์ฑ์ ๋๋ฌด ์ผ์ฐ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ฒด์ ์ผ๋ก ํด๋น ํ๋ก์ ํธ๋ ์์ ํ ๊ด๋ จ์ด ์์ ์ ์์ผ๋ฉฐ ํ๋์ git repo ๋ด๋ถ์์ ๋ฐ์ํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ Yarn Monorepo๋ก ๋ฐ์ธ๋ฉํ๊ณ ๊ณต์ ์ ๊ธ ํ์ผ์ ๋ํ ๋
๋ฆฝ์ฑ์ ์ ์ถฉํ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฅ ์๋ ๊ทธ๋๋ก ๋ํ์ธ์. ๋
๋ฆฝ์ ์ธ ์ถ์ด ์๋ ๋ณ๋์ ํ๋ก์ ํธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ Multirepo๋ผ๊ณ ํฉ๋๋ค. Unix์์ ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ /
์ ์์ง๋ง PC์์ ๊ฐ๋ฅํ ๋ชจ๋ JS ํ๋ก์ ํธ๊ฐ Monorepo์ฌ์ผ ํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค :-)
ํ๋ก๋์
์ฌ์ฉ์ ์ํด ๊ฐ๋ฅํ ์ต์ํ์ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒ์ Yarn๊ณผ ์์ ํ ๊ด๋ จ์ด ์์ง๋ง Yarn์ด yarn.lock
๋ผ๋ ๊ฐ๋ฐ ์ํฐํฉํธ๋ฅผ ์ฌ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ ์ ์์ผ๋ฉฐ ์ด ์์
๋ ๋์์ด ๋ ์ ์์ต๋๋ค.
@the-spyke, ์ด ์์์๋ 3๊ฐ์ ์์ ์์ญ๋ง ์ฌ์ฉํ์ง๋ง ์ค์ ์ ์ฅ์์๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๋ชจ๋์ ๋ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฐํฌ๋ ์ํฌ๋ก๋๊ฐ ์กฐํฉ๋ 20๊ฐ ์ด์์ ์์ ์์ญ์ด ์์ต๋๋ค. ๋ด๊ฐ ์ง๊ธ ๋ณด๋ ๋ฐฉ์์ ๋ ๋ฆฝ์ ์ธ ์ ๊ธ ํ์ผ์ด ์๋ ์ฌ๋ฌ Yarn ์์ ๊ณต๊ฐ ๋ฃจํธ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์๋ง๋ ์๋ฏธ๊ฐ ์์ ์ ์๋ monorepo(๋๋ multirepo๋ผ๊ณ ํ๋ ๊ฒ)๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ถ๋ฆฌ ๋จ์๋ก ์ ๊ฐ ๊ฐ๋ฅํ ๋จ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๊ฐํ๊ณ ์์ต๋๋ค. ์ ๊ธ ํ์ผ๊ณผ ์ ์ ๋ ฌ๋ฉ๋๋ค.
์ ์๊ฐ์๋ ์ด ์์ ์ด ๋งค์ฐ ํ๋ฅญํ๊ฒ ์๋ํ๋ ์ด์ ๋ ์ด๊ธฐ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋ฌ๋ฆฌ ๋ช ์๋์ด ์์์๋ ๋ถ๊ตฌํ๊ณ Yarn ์์ ์์ญ์ด ์์ ์์ญ ๋ฃจํธ ์ธ๋ถ์ ๊ฒฝ๋ก๋ฅผ ์ง์ํ๋ค๋ ์ฌ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ ๊ฐ์ง ์ ์์ต๋๋ค.
{
"workspaces": [
"../lib1",
"../lib3"
]
}
@migueller ์ ๋์ผํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ผ๋ฉฐ ํ ๊ฐ์ง ๊ฐ๋ฅํ ์์ด๋์ด๋ Yarn์ด ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ์์ ๊ณต๊ฐ ์ธํธ ๋ฅผ ์ง์ํ๋ ๊ฒ์ ๋๋ค.
{
"workspaces": {
"frontend-app": ["frontend", "common"],
"backend-app": ["backend", "common"]
}
}
Yarn์ ๋ ๊ฐ์ ์ถ๊ฐ ์ ๊ธ ํ์ผ์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค(๊ธฐ๋ณธ yarn.lock
๊ฐ ์ฌ์ ํ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค).
.
โโโ monorepo/
โโโ yarn.frontend-app.lock
โโโ yarn.backend-app.lock
โโโ packages/
โโโ frontend
โโโ backend
โโโ common
ํ๋ก ํธ์๋์ฉ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ๋ค์์ ํฌํจํ๋ ์ปจํ ์คํธ(์: tar ๋ฅผ ํตํด )๋ฅผ ์์ฑํฉ๋๋ค.
.
โโโ <Docker build context>/
โโโ yarn.frontend-app.lock
โโโ packages/
โโโ frontend
โโโ common
๋ด๊ฐ ๊น์ด ์๊ฐํ์ง ์์ ๊ฒ์ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋ค๋ฅธ ๋ฒ์ ์ ์ ๊ทธ๋ฉด ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ ์ข
์์ฑ์ ์ค์นํ ์ ์๋์ง( node_modules
๋งํฌ)์
๋๋ค. ๊ทธ๋ฌ๋ ์์ ํ ๋์ ์์ค์ ๊ด์ ์์ ๋ณด๋ฉด 2์ฐจ์ Yarn ์์
๊ณต๊ฐ์ด ์๋ง๋ ์ฐ๋ฆฌ๊ฐ ์ถ๊ตฌํ๋ ๊ฒ์
๋๋ค.
( ์ฌ๊ธฐ์๋ ๋น์ทํ ๊ธ์ด ์ฌ๋ผ
์์ ๊ณต๊ฐ๋น ์ ๊ธ ํ์ผ์ด ํ์ํ์ง ์๊ณ ๋์ ๋ฐฐํฌ๋ฅผ ์ํด ์์ ๊ณต๊ฐ๋น node_modules๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
@gfortaine , ํ ๋ก ์ ์ฝ์ผ๋ฉด ์ค์ ๋ก ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ณ๋์ ์ ๊ธ ํ์ผ์ ๊ฐ๋ ์ด์ ๋ ์ค์น์ ๊ด๋ จ์ด ์์ผ๋ฉฐ ๋์ ํน์ ํจํค์ง๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ๋ณ๊ฒฝ๋๋ ์ ๊ธ ํ์ผ์ด ์์ต๋๋ค. ์ต์์ ์ ๊ธ ํ์ผ์ _๋ชจ๋ _ ์์ ๊ณต๊ฐ ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ๋์ง๋ง ๋จ์ผ ํจํค์ง๋ก ๋ฒ์๊ฐ ์ง์ ๋ ์ ๊ธ ํ์ผ์ _ํด๋น_ ํจํค์ง์ ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋๋ง ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ด๊ฒ์ด ์ฌ์ฉ์ ์์ญ์์ ์ํ๋ ์ ์๋ค๋ ์ ์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. @yarnpkg/lockfile
ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์์ ์ ๊ธ ํ์ผ์ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๊ณ yarn workspaces info
๋ฅผ ์ฌ์ฉํ๋ฉด ์์
๊ณต๊ฐ ์ข
์์ฑ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ด ์ ๋ณด๋ฅผ ๊ฐ ์์
๊ณต๊ฐ์ package.json
์ ํจ๊ป ์ฌ์ฉํ์ฌ ์์
๊ณต๊ฐ๋น ์ ๊ธ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ์ฅ์์ postinstall
์คํฌ๋ฆฝํธ๋ก ์ค์ ํ์ฌ ๊ฐ๋ณ ์ ๊ธ ํ์ผ์ ์ต์์ ์์ค ํ์ผ๊ณผ ๋๊ธฐํ๋ ์ํ๋ก ์ ์งํ ์ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๊ตฌ์ถํ๊ณ ๋ด ๋ฐ๊ฒฌ์ผ๋ก ๋ค์๋ณด๊ณ ํ ์ ์์ต๋๋ค.
pnpm: @pnpm/make-dedicated-lockfile ์๋ ๋ถ๊ตฌํ๊ณ ์ด ๊ตฌํ์ ๋ฐฉ๊ธ ์ฐพ์ ๊ฒ ๊ฐ์ต๋๋ค.
๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค ๐
์ด ๋์(์์ ๊ณต๊ฐ๋น ๋ฒ์ ๊ด๋ฆฌ, ๊ฐ ํจํค์ง์ ์ฌ์ ํ ์ ๊ธ ํ์ผ์ด ์์)์ ๋ํ ๋์ ํ์๋ ํ์ ํธ๋ฆฌ๊ฐ ์์ ํ ๋ค๋ฅธ ์ ์ฅ์๋ก ๋ด๋ณด๋ด์ง๋ ์ค์ฒฉ๋ ๋จ์ผ ์ ์ฅ์๊ฐ ์์ผ๋ฏ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง๋์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ง๊ธ์ lerna/npm๊ณผ ์ผ๋ถ ์ฌ์ฉ์ ์ง์ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ ์ ๊ณ ๋ฅด๊ฒ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์์ฌ(์ค์ฒฉ ์ง์์ด ์๋ ๊ณณ์์ v2๋ก ์ถ์ธก)๊ฐ ๋ชจ๋ ๊ฒ์ ํ ๋ฒ์ ๊ด๋ฆฌํ ์ ์์ง๋ง ์ ์ญ ๊ณ ์ ์ ์ฌ๋ฐ๋ฅธ ํ์ ์งํฉ์ ๊ฐ๊ฐ ๋จ๊ฒจ ๋ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ค์น ํ ์คํฌ๋ฆฝํธ๋ ์ ๊ธ ํ์ผ์ ์ง์ ๊ด๋ฆฌํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค. ๋ณต์กํด ๋ณด์ด์ง๋ง ์ด๋ ์ชฝ์ด๋ ์ข์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ ์ฒด monorepo๋ฅผ ๊ฒฐ๊ณผ ๋์ปค ์ปจํ ์ด๋์ ํจํค์งํ๊ณ ์ถ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก๋์ ์์ docker๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํด๋น ์ด๋ฏธ์ง๋ ๊ฐ๋ฅํ ํ ๊ฐ๋ฒผ์์ผ ํฉ๋๋ค. ๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์๋นํ ํฌ๋ฉฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ํฌํจํฉ๋๋ค(์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ถ ๋ง์ดํฌ๋ก์๋น์ค์ ๊ด๋ จ๋์ง๋ง ์ ๋ถ๋ ์๋). ๋ฐ๋ผ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ํจํค์งํ ๋ ์ด๋ฏธ์ง์ ํด๋น ๋ง์ดํฌ๋ก ์๋น์ค์ ํ์ผ๊ณผ ์ ์ ํ ์ข ์์ฑ์ผ๋ก ๋ค๋ฅธ ๋ชจ๋ ์ข ์์ฑ์ด ํฌํจ๋๊ธฐ๋ฅผ ์ํฉ๋๋ค. ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ์์ ๋ค์ด๋ก๋ํ๊ณ ๋์ปค ์ด๋ฏธ์ง์ ์์น๋ฅผ ์ํด ๋น๋ํ์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ๊ธฐ์์ ์ฃผ์ ๊ณ ๋ ค ์ฌํญ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ฅํ ํ ๊ฐ๋ณ๊ฒ ์ ์งํ๋ ๊ฒ์ด๋ฉฐ ์ ์ฒด monorepo๋ฅผ ํจํค์งํ๋ ๊ฒ์ ์ฐ๋ฆฌ์ ์๊ตฌ์ ๋ง์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ๋ง์ดํฌ๋ก ์๋น์ค์ ์ด๋ฏธ์ง ๋ด์์ "yarn"์ ์คํํ ๋ ๊ฑฐ๊ธฐ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ํ์ง ์๊ณ ์ผ๋ฐ์ ์ธ ์ข ์์ฑ์ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์์ ์๋ฃจ์ ์ ์์ ๊ณต๊ฐ๋ง๋ค yarn.lock ํ์ผ์ ์์ฑํ ํ์๊ฐ ์์ผ๋ฉฐ, ์ฃผ์ด์ง ์์ ๊ณต๊ฐ์ ํจํค์งํ๋ ๊ณผ์ , ์ฃผ๋ฌธํ ์์ ๊ณต๊ฐ์ ๋ํ yarn.lock ํ์ผ์ ์์ฑํ๋ ๋ฑ์ ๊ณผ์ ์ ๋์์ด ๋๋ yarn ๋ช ๋ น์ผ ์๋ ์์ต๋๋ค. ..
์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ช ํํ ํ๋ ๋ฐ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๐ป