๋ํ๋ง์์ ํจํค์ง ๋งค๋์ ๋ก Yarn Berry๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. Yarn Berry์ ํน์ง์ ์ดํดํ๊ธฐ ์ํด, ๋ชจ๋ํ์ ํจํค์ง ๋งค๋์ ์ ๊ฐ๋ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ง์ด๋ณด์๋ค.
๐ ๋ชจ๋ํ์ ํ์์ฑ
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ผ์ ๋ถ๋ฆฌํด๋ ๋ชจ๋ ๊ฐ์ ์ ์ญ ์ค์ฝํ ์์์ ์คํ๋๋ฏ๋ก ์ ์ญ ์ค์ฝํ๋ฅผ ๊ณต์ ํ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ํ๋ฅผ ์ํด์ , ES6 ๋ชจ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํด์ผ๋ง ํ๋ค. script ํ๊ทธ์ module ํ์ ์ ์ค์ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ชจ๋๋ก ๋ก๋ํ ์ ์๋ค. ๋ชจ๋๋ก ๋ก๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ชจ๋ ์ค์ฝํ์ ํฌํจ๋๋ค. ๋ชจ๋ ์ค์ฝํ ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ณ๋์ ๋ ๋ฆฝ๋ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ธ๋ถ์์๋ exportํ ๋ณ์์ ํจ์๋ง ์ ๊ทผํ ์ ์๋ค.
ES6์์๋ named export ๋ผ๋ ๋ชจ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค.
- export ํค์๋๋ฅผ ์ฌ์ฉํด ํจ์, ๋ณ์, ํด๋์ค๋ฅผ ๊ฐ๋ณ๋ก ์ธ๋ถ์ ๊ณต๊ฐํ ์ ์๋ค.
- default export ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ import ์์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- ๋ํ ES6 ๋ชจ๋์ ๋์ import, export๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ ์คํ์์ ์ import/exportํ ๋์์ ๋ณ๊ฒฝํ ์ ์๋ค.
export ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
// lib.js
export const sayHello = () => {
console.log('hi');
}
// index.js
import {sayHello} from './lib';
sayHello();
export default ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
// lib.js
export default const sayHello = () => {
console.log('hi');
}
// index.js
import sayHello from './lib';
sayHello();
๐๐ปโ๏ธ npm๊ณผ package.json
๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๋ง์ฝ scriptํ๊ทธ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ค์ ๋ก๋ํ๋ค๋ฉด, ํ์ํ ํจํค์ง๋ฅผ ์์กด์ฑ์ ๋ง๊ฒ ์ผ์ผ์ด ๋์ดํด์ผ ํ๊ณ ๊ฐ ํจํค์ง์ ๋ฒ์ ์ ์๋ง๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ค. ์ด๋ฌํ ๋ถํธํจ์ ํด๊ฒฐํ๊ธฐ ์ํด npm์ด ๋ฑ์ฅํ๋ค! npm์ ์ฌ์ฉํ๋ฉด ์ด ๋ชจ๋ ๊ฒ๋ค์ package.json์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
package.json
ํจํค์ง์ ๊ด๋ จ๋ ๋ฉํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํ์ผ์ด๋ค. ๊ฐ๋ น CRA๋ก ๋ง๋ ํ๋ก์ ํธ์ package.json์ ํด๋น React App์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. ๋น์ฐํ ์ฑ์ ์์กด์ฑ์ ๋ํ ์ ๋ณด๋ค๋ ๋ด๊ณ ์๋ค.
์ค์ ๋ก CRA ํ๋ก์ ํธ๋ฅผ ํ์ธํด๋ณด๋ฉด ๊ฐ์ฅ ์์ ํด๋์ package.json ํ์ผ์ด ์์ ๋ฟ ์๋๋ผ node_modules ๋ด์ ์์กด์ฑ ํจํค์ง๋ค์๋ ๊ฐ๊ฐ package.json ํ์ผ์ด ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
npm install ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด package.json์ ๋ช ์๋ ๋ชจ๋ ์์กด์ฑ ํจํค์ง๋ค์ด node_modules ํด๋์ ์ค์น๋๋ค. ์ฐธ๊ณ ๋ก node_modules๋ ํญ์ .gitignore์ ํฌํจ๋๋๋ฐ, ๊ทธ ์ด์ ๋ ํด๋์ ํฌ๊ธฐ๊ฐ ๊ฑฐ๋ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํฌ๊ธฐ๊ฐ ํฐ node_modules๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ผ๋ก ๊ด๋ฆฌํ์ง ์๊ณ , ๋์ package.json ํ์ผ์ ์ฐธ์กฐํด ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
npm์ ๋ฌธ์ ์
- ๋นํจ์จ์ ์ธ ์์กด์ฑ ํ์ ๋ฐฉ์
node_modules๋ฅผ ์ฌ์ฉํ๋ npm์, ํจํค์ง๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ ์์ ํด๋์ node_modules๋ฅผ ๊ณ์ํด์ ํ์ํ๋ค. ์ด๋ฌํ ์์กด์ฑ ํ์ ๋ฐฉ์์ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค. ๋ํ ํ์ผ ์์คํ ์ ์ ๊ทผํ๋ I/O ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. - ํจํค์ง ํธ์ด์คํ ์ผ๋ก ์ธํ ์ ๋ น ์์กด์ฑ(phantom dependency) ๋ฌธ์
๐ซ Yarn Berry
Plug’n’Play
Yarn Berry์ Plug’n’Play ์ ๋ต์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
Yarn Berry๋ node_modules ํด๋๋ฅผ ์์ฑํ์ง ์๋๋ค. ๋์ .yarn/cache , .pnp.cjs ๋ฅผ ์ฌ์ฉํ๋ค.
- .pnp.cjs : ๊ฐ ํจํค์ง์ ์์กด์ฑ ์ ๋ณด์, ๊ฐ ์์กด์ฑ์ ์์น๋ฅผ ์ ์ฅํ๋ค. ์ด๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋นํจ์จ์ ์ธ node_modules ํ์ ์์ด ์ํ๋ ์์กด์ฑ์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ค.
- .yarn/cache : ์์กด์ฑ ํจํค์ง๋ค์ด zip ํ์์ผ๋ก ์ ์ฅ๋์ด ์๋ค. ์์ถ ํ์ผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ node_moduls์ ๋นํด ํฌ๊ธฐ๊ฐ ์๋ค.
๋ํ PnP๋ ํจํค์ง ํธ์ด์คํ ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, npm๊ณผ ๊ธฐ์กด yarn์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ น ์์กด์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
Zero-Install
์์์ ์ธ๊ธํ๋ฏ node_modules๋ ํฌ๊ธฐ๊ฐ ์ปค ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ์ฌ๋ฆฌ์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ cloneํด ์ฑ์ ์ฒซ ์คํํ๋ ๊ฒฝ์ฐ npm install ๋ช ๋ น์ด๋ฅผ ํตํด ์์กด์ฑ์ ์ค์นํ๋ ์์ ์ด ํ์ํ๋ค. ๋ค๋ฅธ ์์กด์ฑ์ ์ฌ์ฉํ๋ ๋ธ๋์น๋ก ๋ณ๊ฒฝ ์์๋ ์์ง ์๊ณ npm install ์ ํ์ด์ผ ํ๋ค. ๋ฐ๋ฉด yarn berry๋ ์์กด์ฑ์ zip ํ์์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๊ฐ ์๋ค. ๋ฐ๋ผ์ ์์กด์ฑ๋ค์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ผ๋ก ๊ด๋ฆฌํด๋ ๋ฌด๋ฐฉํ๋ค. Zero-Install ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ด ์ ์ ํ์ฉํ ๊ธฐ๋ฅ์ด๋ค.
์ ๋ฆฌํ์๋ฉด Zero-Install์ด๋, Yarn Berry์์ ์์กด์ฑ์ ๋ฒ์ ๊ด๋ฆฌ์ ํฌํจํ๋ ๊ฒ์ ๋ปํ๋ค. ์์กด์ฑ๋ค์ด github๋ก ๊ด๋ฆฌ๋๊ณ ์๊ธฐ ๋๋ฌธ์(github์ ์ฌ๋ผ๊ฐ ์๊ธฐ ๋๋ฌธ์), git clone์ผ๋ก ์ ์ฅ์๋ฅผ ๋ณต์ ํ์ ๋ ์์กด์ฑ๋ค์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค. ์ค์นํ ํ์๊ฐ ์๋ค. (์ด๋ฅผ ํตํด CI์ ์์๋๋ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์๋ค๊ณ ํ๋ค. ์ด ์ ์ ์์ง CI๋ฅผ ์ง์ ์ฌ์ฉํด๋ณธ ์ ์ด ์์ด์ ์๋ฟ์ง๋ ์๋๋ค.)
yarn berry ๋ก ๊ด๋ฆฌ๋๊ณ ์๋ ahmatda ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํ์ธํด๋ณด๋ฉด, ์ค์ ๋ก ์์กด์ฑ zip ํ์ผ๋ค์ด ์ ๋ก๋ ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค์์ ๊ธฐํ๊ฐ ๋๋ค๋ฉด pnpm๊ณผ yarn berry์ ์ฐจ์ด์ ๋ํด์๋ ์ ๋ฆฌ ํด๋ด์ผ๊ฒ ๋ค. ๋ฐฉ๊ธ ๊ฐ๋จํ ์ฐพ์๋ณธ ๋ฐ๋ก๋, pnpm์์๋ PnP ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค(!)
References
https://ui.toast.com/fe-guide/ko_DEPENDENCY-MANAGE
https://toss.tech/article/node-modules-and-yarn-berry
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
eslint ํ๋ฌ๊ทธ์ธ ์ข ๋ฅ, ์ด ์ ๋ฆฌ (1) | 2022.10.15 |
---|---|
Yarn Berry๋ก React Native ํ๋ก์ ํธ ์์ํ๊ธฐ (0) | 2022.10.12 |
npm, yarn, pnpm์ ์ฐจ์ด์ ์ ๋น๊ตํด๋ณด์ (0) | 2022.09.26 |
Context API ์ ๋๋ก ์ดํดํ๊ธฐ (1) | 2022.09.22 |
useEffect ์ ๋๋ก ์ดํดํ๊ธฐ (2) | 2022.09.21 |