๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

๋ฉ์–ด๋ฆฌ์ฑ„ ๋งŒ๋“ค๋˜ ๊ณผ๊ฑฐ ์ฝ”๋“œ์™€๋Š” ๋‹ฌ๋ฆฌ ์ตœ์‹  ์ฝ”๋“œ๋“ค์€ ์ „๋ถ€ ๋ชจ๋“ˆํ™”๊ฐ€ ๋˜์–ด์žˆ๋‹ค.

๋ชจ๋“ˆํ™”์˜ ์ด์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ์—ญ์‹œ ์œ ์ง€๋ณด์ˆ˜์™€, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๊ฐ€์žฅ ํฐ ์ด์ ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ํฐ ๋ฉ์–ด๋ฆฌ์ฑ„ ๋งŒ๋“ค์–ด ๊ตด๋ฆฐ๋‹ค๋ฉด ํ•œ ๋ถ€๋ถ„์„ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๊ณ , ์˜์กด์„ฑ ํŒŒ์•… ๋˜ํ•œ ๋ณต์žกํ•ด์ง„๋‹ค.

๋˜ํ•œ ์ผ๋˜ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๊ณณ์— ์žฌํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

๋ชจ๋“ˆํ™” ์ „
๋ชจ๋“ˆํ™” ํ›„

์‚ฌ์ง„์ถœ์ฒ˜: https://d2.naver.com/helloworld/0923884

 

๋ฉ€ํ‹ฐ๋ ˆํฌ(multi repo) === ํด๋ฆฌ๋ ˆํฌ(poly repo)

๋ฉ€ํ‹ฐ๋ ˆํฌ๋ž€ ๋ง ๊ทธ๋Œ€๋กœ ์—ฌ๋Ÿฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ์šด์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ฐ์ž ๋…์ž์ ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ์— ๊ฐ ํŒ€๋ณ„ ์ž์œจ์„ฑ์ด ๋ณด์žฅ๋˜๊ณ  ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•œ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋ฌธ์ œ์ ๋“ค๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ

  • ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ์˜ ๋ฐ˜๋ณต์ ์ธ ์—…๋ฌด: ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ๋งˆ๋‹ค ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•, CI/CD ๊ตฌ์ถ•, ๋นŒ๋“œ ํ›„ ๋ฐฐํฌ ๋“ฑ ๋ฐ˜๋ณต์ ์ธ ์—…๋ฌด๊ฐ€ ์ง€์†๋œ๋‹ค.
  • ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ํ†ต์ผ์˜ ์–ด๋ ค์›€: ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‚˜๋ˆˆ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ๋งž์ถ”๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ด€๋ฆฌ ํฌ์ธํŠธ์˜ ์ฆ๊ฐ€: ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ, ๊ด€๋ฆฌ ํฌ์ธํŠธ๊ฐ€ ๋Š˜์–ด๋‚˜ ์—…๋ฌด๊ฐ€ ๊ณผ์ค‘๋œ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ์ด๋Š” ๊ณง ํ”„๋กœ์ ํŠธ์˜ ๋ ˆ๊ฑฐ์‹œ ํŒŒ์•…์ด ์–ด๋ ค์›Œ์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ถ”์ ์ด ์–ด๋ ค์›€: ํŒ€์› ๊ฐ„ ์ง€์†์ ์œผ๋กœ ์†Œํ†ตํ•˜๊ณ , ํ”ผ๋“œ๋ฐฑํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ๋ณธ์ธ์ด ๋งก์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ถ”์ ์ด ์›ํ™œํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ(mono repo)

๋ชจ๋…ธ๋ ˆํฌ๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐœ๋ณ„ ํ”„๋กœ์ ํŠธ๋ฅผ, ์ž˜ ์ •์˜๋œ ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด์„œ ํ•˜๋‚˜์˜ Repo์— ๋‹ด์€ ๊ฒƒ์ด๋‹ค.

๋ฉ€ํ‹ฐ๋ ˆํฌ์™€๋Š” ์ƒ๋ฐ˜๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•œ ์ €์žฅ์†Œ์— ์ €์žฅ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ „๋žต์ด๋‹ค.

๋‹จ์ˆœํžˆ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋…ธ๋ ˆํฌ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ์—๋Š” ๋ถ€์กฑํ•˜๊ณ , ํ”„๋กœ์ ํŠธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ๋Š” ํ”„๋กœ์ ํŠธ ์‚ฌ์ด์— ์˜์กด์„ฑ์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๊ฐ™์€ ์ œํ’ˆ๊ตฐ ๋“ฑ ์ •์˜๋œ ๊ด€๊ณ„๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ์˜ ๋Œ€ํ‘œ์ ์ธ ์žฅ์ ์œผ๋กœ๋Š”

  • ๋” ์‰ฌ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ: ๋ฐ˜๋ณต๋˜๋˜ ๊ณผ์ •๋“ค์„ ๊ธฐ์กด DevOps๋ฅผ ์ด์šฉํ•˜๋ฏ€๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ์ด ์—†๋‹ค.
  • ๋” ์‰ฌ์šด ์˜์กด์„ฑ ๊ด€๋ฆฌ: ์˜์กด์„ฑ ํŒจํ‚ค์ง€๊ฐ€ ๊ฐ™์€ ์ €์žฅ์†Œ์— ์žˆ๊ธฐ์— ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
  • ๋‹จ์ผํ™”๋œ ๊ด€๋ฆฌ ํฌ์ธํŠธ: ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋ฐ DevOps์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ถ”์  ์šฉ์ด: ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ™์ด ์ž‘๋™ํ•˜๊ธฐ์—, ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ถ”์ ์ด ์šฉ์ดํ•˜๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ

์‚ฌ์ง„์ถœ์ฒ˜: https://d2.naver.com/helloworld/0923884

 

๋ชจ๋…ธ๋ ˆํฌ(mono repo) ๊ตฌ์„ฑ

https://dev.to/limal/simplify-your-monorepo-with-npm-7-workspaces-5gmj

์ตœ์ƒ๋‹จ root folder๋กœ ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ๊ตฌ์„ฑํ•œ ์‚ฌ์ง„์ด๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ ๋‚ด ์ „์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” Dependency ๋ฐ Workspace์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์€ root package.json์—์„œ ํ†ตํ•ฉ๋œ ์ฑ„๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

์ฆ‰, ๊ณตํ†ต์ ์ธ ์„ค์ •์„ ๊ฐ ์„œ๋น„์Šค๋ณ„๋กœ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค. ๋ฌผ๋ก , ๊ฐœ๋ณ„์ ์ธ ์„ค์ •์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ package.json์—์„œ ์ถ”๊ฐ€ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

https://classic.yarnpkg.com/blog/2018/02/15/nohoist/

์™ผ์ชฝ ์‚ฌ์ง„๊ณผ ์˜ค๋ฅธ์ชฝ ์‚ฌ์ง„์„ ๋น„๊ตํ•ด๋ณด๋ฉด ๋™์ผํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” ๋ชจ๋“ˆ๋“ค์ด ์ค‘๋ณต ์ œ๊ฑฐ๋œ ์ ์ด ๋น„๊ต๋  ๊ฒƒ์ด๋‹ค.

๋™์ผํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” ๋ชจ๋“ˆ๋“ค์„ ์ตœ์ƒ๋‹จ ๊ณ„์ธต์œผ๋กœ Hoisting ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ๋๋‹ค.

์ฝด๋‹ค ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์˜ ๋ชจ๋…ธ๋ ˆํฌ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

...
โ”œโ”€ services
โ”‚    ....
โ”‚  โ”œโ”€ service-a
โ”‚  โ””โ”€ services-b
...
โ”œโ”€ libraries
โ”‚    ....
โ”‚  โ”œโ”€ libraries-a
โ”‚  โ””โ”€ libraries-b
โ””โ”€ package.json

์„œ๋น„์Šค ๋ณ„๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋“ค์ด services ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ๋ชจ์—ฌ์žˆ๊ณ , ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ libraries ๋””๋ ‰ํ† ๋ฆฌ์— ๋ชจ์—ฌ์žˆ๋‹ค. 

// libraries/qanda-design-system

{
  "name": "qanda-design-system",
  "version": "1.0.1",
  "dependencies": {
    ...
  }
}
// services/project-a

{
  "name": "projectA",
  "dependencies": {
    "qanda-design-system": "1.0.1"
  }
}

์œ„์™€ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด libraries์— ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ services/project-a์˜ package.json์—์„œ dependencies๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

 

...
โ”œโ”€ services
โ”‚    ....
โ”‚  โ”œโ”€ service-a
โ”‚  โ”‚   โ”œโ”€ .eslintrc
โ”‚  โ””โ”€ services-b
โ”‚      โ””โ”€ .eslintrc
...
โ””โ”€ .eslintrc

๋ชจ๋…ธ๋ ˆํฌ๋Š” Lint ํ™˜๊ฒฝ์—์„œ๋„ ์žฅ์ ์„ ๋ณด์ธ๋‹ค.

๋ฉ€ํ‹ฐ๋ ˆํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฆฐํŠธ ์„ค์ •์„ ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๋”๋ผ๋„, ์„ค์ • ํŒŒ์ผ์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ณ„๋กœ ๊ฐ๊ฐ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฐํŠธ ์„ค์ •์€ root ๋””๋ ‰ํ† ๋ฆฌ์— ํ†ต์ผ์‹œํ‚ค๊ณ , ๊ฐ ํ”„๋กœ์ ํŠธ ๋ณ„๋กœ ๋ฆฐํŠธ ์„ค์ •์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฆฐํŠธ ํŒŒ์ผ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋”ฐ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ผ์„œ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๋‹ค.

 

References

 

ํŒ€์›Œํฌ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ์‹œ์Šคํ…œ ๊ตฌ์ถ•

์ฝด๋‹ค ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์ด ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ์„ ํƒํ•œ ์ด์œ 

blog.mathpresso.com

 

๋ชจ๋…ธ๋ ˆํฌ์˜ ๋ฌธํ™”์  ์˜์˜

Overview ์ฝด๋‹ค ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์—์„œ ์ตœ๊ทผ ํšจ์œจ์ ์ธ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด "๋ชจ๋…ธ๋ ˆํฌ(monorepo)"๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. (๋ ˆํฌ ์ด๋ฆ„๋„ ๊ต‰์žฅํžˆ Semantic ํ•œ "qanda-frontend"์ž…๋‹ˆ๋‹ค) ํŒ€ ๋‚ด์—์„œ ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ๋„์ž…ํ•˜์ž๋Š”

yeoulcoding.me

https://d2.naver.com/helloworld/0923884

 

'๐Ÿ”ฅ Front-End > Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] API  (0) 2022.07.19
[Web] JWT  (0) 2022.07.19
๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!