λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
IT

μ›ΉνŒ©(Webpack): ν˜„λŒ€ μ›Ή κ°œλ°œμ„ μœ„ν•œ 핡심 도ꡬ

by πŸ’²πŸŽ΅βœ–οΈβœ”οΈβ˜Ό 2024. 2. 20.
728x90

μ›ΉνŒ©(Webpack): ν˜„λŒ€ μ›Ή κ°œλ°œμ„ μœ„ν•œ 핡심 도ꡬ

1. μ›ΉνŒ©μ˜ κ°œλ…

μ›ΉνŒ©(Webpack)은 λͺ¨λ“ˆ λ²ˆλ“€λŸ¬(Module Bundler)둜, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” λ‹€μ–‘ν•œ μžμ›λ“€μ„ λ²ˆλ“€λ§ν•˜μ—¬ μ΅œμ ν™”λœ 정적 μžμ›μœΌλ‘œ λ³€ν™˜ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬ νŒŒμΌλ“€ κ°„μ˜ μ˜μ‘΄μ„±μ„ νŒŒμ•…ν•˜κ³ , ν•„μš”ν•œ μžμ›λ“€μ„ λ¬Άμ–΄ ν•˜λ‚˜μ˜ 파일둜 μƒμ„±ν•¨μœΌλ‘œμ¨ μ›Ή λ‘œλ”© μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

2. μ›ΉνŒ©μ˜ ν™œμš©

2.1 λͺ¨λ˜ ν”„λ ˆμž„μ›Œν¬μ™€ μ›ΉνŒ©

ν˜„λŒ€μ˜ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬(Vue, React, Angular λ“±)듀은 μ›ΉνŒ©μ„ λ‚΄μž₯ν•˜μ—¬ μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŠ” 각 ν”„λ ˆμž„μ›Œν¬κ°€ κ°–λŠ” μ»΄ν¬λ„ŒνŠΈ, μŠ€νƒ€μΌ, 이미지 λ“±μ˜ λ‹€μ–‘ν•œ μžμ›λ“€μ„ 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.

2.2 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ²ˆλ“€λ§

μ›ΉνŒ©μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ, CSS, 이미지, 폰트 λ“± λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€λ“€μ„ ν•˜λ‚˜λ‘œ λ²ˆλ“€λ§ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ λ‘œλ”©ν•  수 μžˆλŠ” μ΅œμ ν™”λœ ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ€λ‹ˆλ‹€. 이둜써 초기 λ‘œλ”© 속도λ₯Ό κ°œμ„ ν•˜κ³ , λ„€νŠΈμ›Œν¬ λΉ„μš©μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ›ΉνŒ©μ˜ λ‚΄μž₯

μ›ΉνŒ©μ΄ λͺ¨λ˜ ν”„λ ˆμž„μ›Œν¬μ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ” μ΄μœ λŠ” μ—¬λŸ¬ κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

3.1 λͺ¨λ“ˆ μ‹œμŠ€ν…œ

μ›ΉνŒ©μ€ λͺ¨λ“ˆ μ‹œμŠ€ν…œμ„ 톡해 각 μ»΄ν¬λ„ŒνŠΈ, 라이브러리, μŠ€νƒ€μΌ 등을 λͺ¨λ“ˆλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.

3.2 μ½”λ“œ λΆ„ν• 

μ›ΉνŒ©μ€ μ½”λ“œλ₯Ό μ—¬λŸ¬ 청크(chunk)둜 λΆ„ν• ν•¨μœΌλ‘œμ¨, 초기 λ‘œλ”© μ‹œ ν•„μš”ν•œ λΆ€λΆ„λ§Œ λ‘œλ”©λ˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μ΄λŠ” λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λΆˆν•„μš”ν•œ μžμ›μ„ 미리 λ‘œλ”©ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

3.3 μžλ™ λ²ˆλ“€λ§

μ›ΉνŒ©μ€ μ½”λ“œμ— λŒ€ν•œ λ³€κ²½ 사항을 κ°μ§€ν•˜κ³  μžλ™μœΌλ‘œ λ²ˆλ“€λ§ν•΄μ£ΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. κ°œλ°œμžλŠ” λ³€κ²½λœ λ‚΄μš©μ„ μ‹ κ²½μ“°μ§€ μ•Šκ³  κ°œλ°œμ— 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€.

4. μ›ΉνŒ© 예제 μ½”λ“œμ™€ μ‚¬μš© 예제

4.1 κ°„λ‹¨ν•œ μ›ΉνŒ© μ„€μ • 파일 예제

// webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

4.2 μ‚¬μš© 예제

# μ›ΉνŒ© λΉŒλ“œ μ‹€ν–‰
npx webpack

μœ„ μ˜ˆμ œλŠ” κ°„λ‹¨ν•œ μ§„μž… 파일(index.js)을 λ²ˆλ“€ν•˜μ—¬ dist 폴더에 bundle.js둜 좜λ ₯ν•˜λŠ” μ„€μ •μž…λ‹ˆλ‹€.

5. μ›ΉνŒ©μ˜ μž₯단점

5.1 μž₯점

  • λͺ¨λ“ˆ 관리: μ½”λ“œλ₯Ό λͺ¨λ“ˆ λ‹¨μœ„λ‘œ λΆ„ν• ν•˜κ³  관리할 수 μžˆμ–΄ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•˜λ‹€.
  • μžλ™ν™”: μ½”λ“œ λ³€κ²½ μ‹œ μžλ™μœΌλ‘œ λΉŒλ“œλ˜λ―€λ‘œ 효율적인 개발이 κ°€λŠ₯ν•˜λ‹€.
  • μ½”λ“œ μ΅œμ ν™”: λ²ˆλ“€λ§μ„ 톡해 λΆˆν•„μš”ν•œ μ½”λ“œμ˜ 전솑을 λ°©μ§€ν•˜κ³  μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆλ‹€.

5.2 단점

  • ν•™μŠ΅ 곑선: μ΄ˆκΈ°μ—λŠ” 섀정이 λ³΅μž‘ν•΄ ν•™μŠ΅μ΄ ν•„μš”ν•˜λ‹€.
  • λΉŒλ“œ μ‹œκ°„: λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λΉŒλ“œ μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 수 μžˆλ‹€.

6. κ²°λ‘ 

μ›ΉνŒ©μ€ ν˜„λŒ€ μ›Ή κ°œλ°œμ—μ„œ ν•„μˆ˜μ μΈ λ„κ΅¬λ‘œ 자리작고 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“ˆ 관리, μžλ™ν™”, μ½”λ“œ μ΅œμ ν™” λ“± λ‹€μ–‘ν•œ μž₯점을 μ œκ³΅ν•˜λ©°, λͺ¨λ˜ ν”„λ ˆμž„μ›Œν¬λ“€κ³Όμ˜ ν†΅ν•©μœΌλ‘œ λ”μš± 효과적으둜 μ‚¬μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 초기 ν•™μŠ΅ 곑선을 κ·Ήλ³΅ν•˜λ©΄μ„œ μ›ΉνŒ©μ„ 효과적으둜 ν™œμš©ν•œλ‹€λ©΄ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯ ν–₯상 및 개발 생산성을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€