๐Node On Rails: ์์ฌ๋ก ์์ ๊ณต๊ฐ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ Monorepo ๋ง๋ค๊ธฐ
์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ค ํ๋๋ Monorepo๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค!
Node on Rails ๊ฐ๋ฐ ๊ตฌ์กฐ
node-on-rails์ ๋ชฉํ๋ ๋ชจ๋ํํ๋ ๊ฒ์ ๋๋ค. Javascript/Typescript ์ธ๊ณ์์ ์ด๋ ํจํค์ง๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ชจ๋ ๋ชจ๋/๊ตฌ์ฑ ์์/ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ ์ํ๋ ๋๋ก ์์ ํจํค์ง๊ฐ ๋ฉ๋๋ค. ์ฒ์์๋
cli
ํจํค์ง์ core
ํจํค์ง์ ๋ ๊ฐ์ง ํจํค์ง๋ง ์์ ๊ฒ์
๋๋ค. ๋์ ์ค๋ซ๋์ ํผ์๊ฐ ์๋ ๊ฒ์ด๊ณ , ๋น๋ ๊ณผ์ ๊ณผ ํผ๋ธ๋ฆฌ์ฑ์ด ์ฌ์์ผ ํ๋ค. ๊ทธ๋์ ์ด๋ ์์ ์์ ์ฐ๋ฆฌ๋ N
ํจํค์ง๋ฅผ ๊ฐ์ง ์ ์์ง๋ง ์ฐ๋ฆฌ๋ ๋จ์ง ํ๋์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ํฉ๋๋ค!๋ชจ๋ ธ๋ ํฌ๋?
Wikipedia์์ ๋งํ๋ ๋ด์ฉ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
In revision control systems, a Monorepo is a software development strategy where code for many projects is stored in the same repository. As of 2017, this software engineering practice was over a decade old but had only recently been named.
์๊ฒ ์ต๋๋ค. ์ฝ๊ฐ์ ๋์์ด ๋์ง๋ง ์ค์ ๋ก๋ ๐คทโโ๏ธ.
Monorepo๋ ๋ง์ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ GitHub์์ ๋ค์ํ ์ ํ์ ๋ณผ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ข ๋ฅ์ Monorepos๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋์ ํด๋ก ์ ํ์ํ ๋ชจ๋ ์ ๋ณด์ ์ฝ๋๋ฅผ ํฌํจํ๋ ํด๋น ํ๋ก์ ํธ
Monorepo์ ๋ ๋ง์ ์ ํ์ด ์์ต๋๋ค.
์ด์ node-on-rails์ ์ฌ์ฉํ ์ ํ์ด ๋ช ํํด์ผ ํฉ๋๋ค. 'ํจํค์ง ๋ชจ๋ ธ๋ ํฌ'.
๋ชจ๋ ธ๋ ํฌ ์ค์ ์ ์ด๋ป๊ฒ ํ๋์?
์ง๊ธ์
yarn workspaces
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ง๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ Monorepo ๋๊ตฌ์ธ Lerna
๋ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋์ค์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.๊ฐ์ฅ ๋จผ์ ๋ง๋ค์ด์ผ ํ ๊ฒ์ ๋ฃจํธ ํด๋์ ๋๋ค.
mkdir node-on-rails
์๋ก ์์ฑ๋
node-on-rails
ํด๋์ ๋ค์ JSON์ด ํฌํจ๋ package.json ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค.{
"private": true,
"name": "node-on-rails",
"workspaces": [
"packages/*"
],
}
"๊ฐ์ธ"ํค๋ ๋ฃจํธ ํจํค์ง๋ฅผ ๋์ค์๊ฒ ๊ณต๊ฐํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ฆ์ ์ ํ ์ฌํญ์ด์ง๋ง ์ฌ์ ํ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค.
๋ง์ง๋ง ์ธ ์ค์ ์ฌ๊ธฐ์์ ๊ฐ์ฅ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ์ฌ๊ธฐ์์ ์์ ๊ณต๊ฐ์ ์ ์ํฉ๋๋ค. ํด๋ ๊ฒฝ๋ก์ ๋ฐฐ์ด์ ๋๋ค. ๋ชจ๋ ํจํค์ง๋
packages
ํด๋์ ์์ผ๋ฏ๋ก *
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ yarn
๋ชจ๋ ํ์ ํด๋๊ฐ ์์
๊ณต๊ฐ์ด ๋๊ธฐ๋ฅผ ์ํ๋ค๊ณ ์๋ฆด ์ ์์ต๋๋ค.์ด์ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ ์ฒซ ๋ฒ์งธ ํจํค์ง ํด๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
mkdir -p packages/CLI packages/core
์ด ๊ฒ์๋ฌผ์ ์งง๊ฒ ์ ์งํ๊ธฐ ์ํด package.json ์ค ํ๋๋ฅผ ๋ง๋ค์ง๋ง ๋จผ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค.
์ด์
package.json
ํด๋์ node-on-rails/packages/core
๋ฅผ ์์ฑํฉ๋๋ค. ๋ด๋ถ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.{
"name": "@nor/core",
"version": "0.0.1",
"dependencies": {
"typescript": "^3.7.4"
}
}
node-on-rails/packages/cli
ํด๋์์๋ ๋์ผํ๊ฒ ํ ์ ์์ต๋๋ค.๋ชจ๋ ์ข ์์ฑ์ ์ค์นํด ๋ณด๊ฒ ์ต๋๋ค.
yarn install
์! ๊ทธ๊ฒ ๋ค์ผ ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ์์ ์์ญ์ ๋ํ ๋ชจ๋ ์ข ์์ฑ์ด ์ค์น๋ฉ๋๋ค!
์ด์ ์์ ๊ณต๊ฐ์์ npm ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๋ฉด
cd
์์
๊ณต๊ฐ์ผ๋ก ๋ค์ด๊ฐ๊ฑฐ๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.yarn workspace @nor/CLI run test
๋๋ ์๋ฅผ ๋ค์ด ๋ชจ๋ ํจํค์ง์์ ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ ค๋ ๊ฒฝ์ฐ ๋ค์์ ์ ๋ ฅํ ์ ์์ต๋๋ค.
yarn workspaces run test
๋ณด๋์ค: ๋ชจ๋ npm ์ข ์์ฑ ์ ๋ฐ์ดํธ
๋ชจ๋ ํจํค์ง๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ์ง ์์ผ๋ ค๋ฉด ๋ค์์ ์ค์นํด์ผ ํฉ๋๋ค.
npm-check-updates
:sudo yarn global add npm-check-updates
๋ฃจํธ package.json์ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ญ์์ค.
"scripts": {
"upgrade:all": "find . -type f -name 'package.json' -not -path './.git/*' -not -path '*/node_modules/*' -execdir ncu --upgrade \\;"
},
์ด๊ฒ์ด ์ด ํฌ์คํธ์ ์ ๋ถ์ ๋๋ค. ์ด์ Monorepo๊ฐ โโ๋ฌด์์ด๋ฉฐ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์ ์ดํดํ์ จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด๊ฒ์ด ๊ทํ์๊ฒ ๊ฐ์น๋ฅผ ๋ํ๋ค๋ฉด ํธ์ํฐ๋ ๋ค๋ฅธ ์์ ๋ฏธ๋์ด์์ ์ด ๊ฒ์๋ฌผ์ ๊ณต์ ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ๋๋ ์ธ์์์ ๊ฐ์ฅ ํ๋ณตํ ์ฌ๋์ด ๋ ๊ฑฐ์ผ.๐๐
๐์๋ ํ์ธ์! | | | Medium | |
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐Node On Rails: ์์ฌ๋ก ์์ ๊ณต๊ฐ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ Monorepo ๋ง๋ค๊ธฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/lampewebdev/node-on-rails-creating-a-monorepo-aka-workspaces-with-yarn-284iํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค