2024.10.27
ํŒจํ‚ค์ง€-๋งค๋‹ˆ์ €-๋ฟŒ์‹œ๊ธฐ-posts-hits

๐Ÿ‘Š ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋ฟŒ์‹œ๊ธฐ

TL;DR

  • ๊ฐ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋“ค์˜ ๊ฐ„๋‹จํ•œ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ•œ๋‹ค.
  • ๊ฐ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋“ค์˜ ์žฅ๋‹จ์ ์„ ์ดํ•ดํ•œ๋‹ค.

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ž€?

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋จผ์ € ํŒจํ‚ค์ง€๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž

ํŒจํ‚ค์ง€ (package)

ํŒจํ‚ค์ง€๋ž€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด๋‹ค. ์ฆ‰ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ ๋ฒˆ๊ฑฐ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐํฌ๋œ ๋ชจ์Œ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ๋ง ๊ทธ๋Œ€๋กœ "ํŒจํ‚ค์ง€"๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ธ ๊ฒƒ์ด๋‹ค. ์„ค๋ช…์„ ๋ง๋ถ™์ด์ž๋ฉด ์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜์กด์„ฑ(dependency)์„ ๊ด€๋ฆฌํ•ด ํ”„๋กœ์ ํŠธ์˜ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

์–ด๋ ค์šด ๋‚ด์šฉ์€ ์•„๋‹ˆ์ง€๋งŒ ์ฝ”๋“œ๋กœ ๊ฐ„๋‹จํžˆ ํ’€์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ง์ ‘ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ

const removeDuplicates = (arr) => {
	return arr.filter((item, index) => arr.indexOf(item) === index);
}
 
const numbers = [1, 2, 2, 3, 4, 4, 5];
console.log(removeDuplicates(numbers)); // [1, 2, 3, 4, 5];

ํŒจํ‚ค์ง€(lodash)๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์‹œ

const _ = require('lodash');
 
const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = _.uniq(numbers);
 
console.log(uniqueNumbers); // [1, 2, 3, 4, 5];

package.json

{
	name: "project",
	version: "1.0.0",
	"dependencies": {
		"lodash": "^x.y.z"
	}
}
  • ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ•ด ๋” ์งง๊ณ  ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋Š” package.json ํŒŒ์ผ ์•ˆ์— ๋ช…์‹œ๋˜๊ณ , ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ์ด ์˜์กด์„ฑ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

โ“์˜์กด์„ฑ(dependency) ๐Ÿ’ก ์†Œํ”„ํŠธ์›จ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ ์ œ 3์˜ ์†Œํ”„ํŠธ์›จ์–ด

์ •๋ฆฌํ•˜์ž๋ฉด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์„ธ ๋‹จ๊ณ„

์ด์ œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•˜์œผ๋‹ˆ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ• ์ง€ ์•Œ์•„๋ณผ ์ฐจ๋ก€์ด๋‹ค.

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ† ์Šค์—์„œ ์ž‘์„ฑํ•œ ๊ธ€๊ณผ yarn ๊ณต์‹ ๋ฌธ์„œ, ๊ทธ๋ฆฌ๊ณ  GPT๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

1. Resolution

Resolution ๋‹จ๊ณ„๋Š” ํ•œ ๋งˆ๋””๋กœ ์ •์˜ํ•˜๋ฉด 'ํ•„์š”ํ•œ ๋ฒ„์ „์„ ๊ฒฐ์ •(๊ณ ์ •) (resolve dependencies)' ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋Š” ์ด ๋‹จ๊ณ„์—์„œ package.json ๋˜๋Š” lock ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ๊ฒฐ์ •ํ•œ๋‹ค.

2. Fetch

Resolution์˜ ๊ฒฐ๊ณผ๋กœ '๊ฒฐ์ •๋œ ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์‹ค์ œ๋กœ ๋‹ค์šด๋กœ๋“œ' ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค.

3. Link

๋‹ค์šด๋กœ๋“œํ•œ ํŒจํ‚ค์ง€๋ฅผ ํ”„๋กœ์ ํŠธ์˜ node_modules์— ๋ฐฐ์น˜ํ•˜๊ณ , ๊ฐ ํŒจํ‚ค์ง€์˜ ์˜์กด์„ฑ๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค. ์ฆ‰, 'Resolution/Fetch ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๋‹จ๊ณ„' ์ด๋‹ค.

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ์ข…๋ฅ˜

์ด ๊ธ€์„ ์“ฐ๊ฒŒ ๋œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชฉ์ ์ด๋‹ค. ๊ฐ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ์–ด๋–ค ๋ชฉ์ ์„ ๊ฐ€์ง€๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์žฅ์ ๊ณผ ๋‹จ์ ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

npm

npm(Node Package Manager)๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ Node.js ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๋“ค์ด ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก 2009๋…„์— ๋“ฑ์žฅํ–ˆ๋‹ค.

JS ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๋จผ์ € ๋“ฑ์žฅํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ธ๋งŒํผ, ์ˆ˜๋งŽ์€ ํŒจํ‚ค์ง€๊ฐ€ ๊ณต์œ ๋˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด์ž ์žฅ์ ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ npm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ณ ์งˆ์ ์œผ๋กœ ๊ฒช๋Š” ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. npm์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•  ๋•Œ ๋ชจ๋“  ์˜์กด์„ฑ์„ node_modules ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— ์ €์žฅํ•˜๋Š”๋ฐ, ์˜์กด์„ฑ์˜ ์˜์กด์„ฑ๊นŒ์ง€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ํ—ˆ์šฉํ•ด ๋ชจ๋“  ํ•˜์œ„ ์˜์กด์„ฑ ํŠธ๋ฆฌ๋ฅผ ์ค‘๋ณต์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ณต์žกํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด node_modules๋ฅผ ๊ณ„์† ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋ผ์„œ ์†๋„์™€ ์šฉ๋Ÿ‰ ์ธก๋ฉด์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ๋™์ผํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์„ค์น˜๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

yarn

(Engineering at Meta - Yarn: A new package manager for JavaScript)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์„ฑ์žฅํ•˜๊ณ  ๊ฐ ๋น„์ฆˆ๋‹ˆ์Šค๋งˆ๋‹ค ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์ ์  ๋น„๋Œ€ํ•ด์ง์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ, ๋ณด์•ˆ, ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 2016๋…„ Facebook์„ ์ฃผ์ถ•์œผ๋กœ ๊ฐœ๋ฐœ๋œ yarn์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

yarn์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ–ˆ๋‹ค.

  • ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ
  • ์„ฑ๋Šฅ ๊ฐœ์„ 
  • ์ผ๊ด€์„ฑ ์žˆ๋Š” ์„ค์น˜ ํ™˜๊ฒฝ

yarn์€ ๋ณ‘๋ ฌ ๋‹ค์šด๋กœ๋“œ์™€ Fetching ๋‹จ๊ณ„์—์„œ ์บ์‹ฑ์„ ํ†ตํ•ด ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ๋˜ํ•œ yarn์€ yarn.lock ํŒŒ์ผ์„ ํ†ตํ•ด ๋ชจ๋“  ์˜์กด์„ฑ์˜ ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜์—ฌ ํŒจํ‚ค์ง€์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

  • ๋งŒ์•ฝ yarn.lock ํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  package.json์— ๋ช…์‹œ๋œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด, yarn.lock์— ๋ช…์‹œ๋œ ๋ฒ„์ „ ๊ทธ๋Œ€๋กœ ์„ค์น˜๋˜๊ณ  yarn.lock ํŒŒ์ผ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋งŒ์•ฝ yarn.lock ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ package.json์— ๋ช…์‹œ๋œ ์˜์กด์„ฑ์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, package.json์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ ์ฐพ์•„ ์„ค์น˜ํ•˜๊ณ  ์ด๋ฅผ yarn.lock ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค.

๋˜ํ•œ yarn์€ flatํ•œ node_modules ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•ด node_modules ์ค‘์ฒฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. flatํ•œ node_modules ๊ตฌ์กฐ๋ž€, yarn์€ node_modules ํด๋”์— ๊ฐ ํŒจํ‚ค์ง€๋ฅผ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์— flatํ•˜๊ฒŒ ์„ค์น˜ํ•ด ํ•˜์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์ค‘๋ณต ์„ค์น˜๋ฅผ ํ”ผํ•˜๊ณ  ๋‹จ์ผ ๋ฒ„์ „๋งŒ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๊ฐ€ ๋™์ผํ•œ ๋ฒ„์ „์˜ lodash๋ฅผ ์˜์กด์„ฑ์œผ๋กœ ๊ฐ€์ง„๋‹ค๋ฉด, node_modules/lodash์— ํ•œ ๋ฒˆ๋งŒ ์„ค์น˜ํ•˜๊ณ  ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ์ด ์œ„์น˜์˜ lodash๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•œ๋‹ค.

pnpm

pnpm ๊ณต์‹ ๋ฌธ์„œ - ๋™๊ธฐ pnpm์€ ๋””์Šคํฌ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ๊ณผ ํŒจํ‚ค์ง€ ์„ค์น˜ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด 2017๋…„์— ์ถœ์‹œ๋˜์—ˆ๋‹ค.

๋””์Šคํฌ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ ๊ฐœ์„ 

pnpm์€ ๋ชจ๋“  ์˜์กด์„ฑ์„ ์ „์—ญ์ ์œผ๋กœ ๋‹จ์ผ ์œ„์น˜์— ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ํ•˜๋“œ ๋งํฌ๋กœ ์ฐธ์กฐํ•ด ์ถ”๊ฐ€์ ์ธ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„ค์น˜ ์†๋„ ๊ฐœ์„ 

  1. Resolution : ํ•„์š”ํ•œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•ด ์ €์žฅ์†Œ์— fetchํ•œ๋‹ค.
  2. Fetch : ์˜์กด์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  3. Link : ๋‚จ์•„์žˆ๋Š” ๋ชจ๋“  ์˜์กด์„ฑ๋“ค์€ store๋กœ๋ถ€ํ„ฐ node_modules๋กœ fetchํ•˜๊ณ  ํ•˜๋“œ ๋งํฌ๋œ๋‹ค.

ํ•˜๋“œ ๋งํฌ ๋ฐฉ์‹ ๋•๋ถ„์— pnpm์€ ์šฉ๋Ÿ‰๊ณผ ์†๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜์กด์„ฑ์„ ํ•˜๋‚˜๋งŒ ์„ค์น˜ํ•˜๊ณ , ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๊ณ !

๋˜ํ•œ pnpm์€ symlink๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์„œ๋กœ ์ฐธ์กฐํ•˜๋„๋ก ํ•œ๋‹ค. ํŠน์ • ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ์˜์กด์„ฑ๋“ค์€ node_modules/.pnpm/ ๋‚ด์˜ ์ ์ ˆํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ๋˜๋„๋ก ํ•œ๋‹ค. (๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ pnpm ๊ณต์‹ ๋ฌธ์„œ - ํ‰ํƒ„ํ•œ node_modules๊ฐ€ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฅผ ์ฝ๊ณ  ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ๋‹ค)

(์ถ”๊ฐ€ ๊ฐœ๋…) PnP (Plug'n'Play)

PnP๋Š” yarn์˜ ์ตœ์‹  ๋ฒ„์ „์ธ yarn berry์—์„œ ๋“ฑ์žฅํ•œ ์ „๋žต์ด๋‹ค. (์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€, PnP๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ์•„๋‹Œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.)

PnP๋Š” node_modules ์—†์ด (!) ์˜์กด์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. PnP๋Š” ์˜์กด์„ฑ์„ .pnp.cjs ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ๋กœ๋“œํ•ด ๋” ๋น ๋ฅธ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.์ด ๊ณผ์ •์—์„œ ๋ชจ๋“  ์˜์กด์„ฑ์˜ ๋ฒ„์ „์„ ๋‹จ์ผ ํŒŒ์ผ์—์„œ ์ง€์ •ํ•จ์œผ๋กœ์จ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๊ด€๋ฆฌํ•œ๋‹ค.

// pnp.cjs
["my-service", /* ... */ [{
  // ./my-service์—์„œ...
  "packageLocation": "./my-service/",
  "packageDependencies": [
    // React๋ฅผ import ํ•˜๋ฉด 18.2.0 ๋ฒ„์ „์„ ์ œ๊ณตํ•˜๋ผ.
    ["react", "npm:18.2.0"]
  ]
]

์œ„์™€ ๊ฐ™์ด ํŒจํ‚ค์ง€์™€ ๋ฒ„์ „์„ ๋ช…์‹œํ•ด node_modules๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ Link ๋‹จ๊ณ„์˜ ์†๋„๋ฅผ ๋”์šฑ ์˜ฌ๋ ธ๋‹ค.


๋งˆ์น˜๋ฉฐ

์ด๋ ‡๊ฒŒ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋ฌด์—‡์ธ์ง€์™€ ๊ฐ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€, ๋‚˜์•„๊ฐ€ PnP์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค๋ค„๋ดค๋‹ค. ๊ธ€์„ ์“ฐ๋ฉฐ ๋Š๋‚€ ์ ์€, ๊ฒฐ๊ตญ ๊ณต๋ถ€๋ฅผ ํ•จ์— ์žˆ์–ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ํ•ด๋‹น ๊ธฐ์ˆ ์ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€์— ์ง‘์ค‘ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด ๊ธฐ์ˆ ์ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๋‚˜๋Š” ์ด ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ณ ๋ฏผํ•˜๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„, ์–ด๋ ต์ง€๋งŒ ๋งค์šฐ ๋ฟŒ๋“ฏํ•œ ๊ณต๋ถ€์˜€๋‹ค!


์ฐธ๊ณ ํ•œ ๊ธ€๋“ค