ν¨μ¨μ μΈ μμ‘΄μ± μΆμ , μ½λ μ΅μ ν, μ΅μ μΉ μ ν리μΌμ΄μ μ νμ₯μ± κ°νλ₯Ό μν΄ μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ·Έλν λΆμμ νμ νμ©νμΈμ. λͺ¨λ² μ¬λ‘μ κ³ κΈ κΈ°μ μ λ°°μ보μΈμ.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ·Έλν λΆμ: νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μ μν μμ‘΄μ± μΆμ
λμμμ΄ λ°μ νλ μΉ κ°λ° νκ²½μμ μλ°μ€ν¬λ¦½νΈλ μνΈμμ©μ μ΄κ³ λμ μΈ μΉ μ ν리μΌμ΄μ μ μ΄μμ΄ λμμ΅λλ€. μ ν리μΌμ΄μ μ 볡μ‘μ±μ΄ μ¦κ°ν¨μ λ°λΌ μμ‘΄μ±μ κ΄λ¦¬νκ³ μ½λ μ μ§λ³΄μμ±μ 보μ₯νλ κ²μ΄ 무μλ³΄λ€ μ€μν΄μ‘μ΅λλ€. λ°λ‘ μ΄ μ§μ μμ μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ·Έλν λΆμμ΄ μ€μν μν μ ν©λλ€. λͺ¨λ κ·Έλνλ₯Ό μ΄ν΄νκ³ νμ©νλ©΄ κ°λ°μλ νμ₯ κ°λ₯νκ³ ν¨μ¨μ μ΄λ©° κ²¬κ³ ν μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. μ΄ κΈμμλ μμ‘΄μ± μΆμ κ³Ό κ·Έκ²μ΄ νλ μΉ κ°λ°μ λ―ΈμΉλ μν₯μ μ΄μ μ λ§μΆ° λͺ¨λ κ·Έλν λΆμμ 볡μ‘ν μΈλΆ μ¬νμ μ¬λ μκ² λ€λ£Ήλλ€.
λͺ¨λ κ·Έλνλ 무μμΈκ°?
λͺ¨λ κ·Έλνλ μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ λ΄ λ€λ₯Έ λͺ¨λ κ°μ κ΄κ³λ₯Ό μκ°μ μΌλ‘ ννν κ²μ λλ€. κ° λͺ¨λμ λ 립μ μΈ μ½λ λ¨μλ₯Ό λνλ΄λ©°, κ·Έλνλ μ΄λ¬ν λͺ¨λλ€μ΄ μλ‘ μ΄λ»κ² μμ‘΄νλμ§λ₯Ό 보μ¬μ€λλ€. κ·Έλνμ λ Έλλ λͺ¨λμ, μ£μ§(μ )λ μμ‘΄μ±μ λνλ λλ€. μ½λμ λ€λ₯Έ λΆλΆλ€μ΄ μ΄λ»κ² μ°κ²°λκ³ μλ‘ μμ‘΄νλμ§λ₯Ό 보μ¬μ£Όλ λ‘λλ§΅μ΄λΌκ³ μκ°ν μ μμ΅λλ€.
λ κ°λ¨ν λ§ν΄, μ§μ μ§λλ€κ³ μμν΄ λ³΄μΈμ. κ° λ°©(λΆμ, μΉ¨μ€, μμ€)μ λͺ¨λλ‘ μκ°ν μ μμ΅λλ€. μ κΈ° λ°°μ , λ°°κ΄, ꡬ쑰μ μ§μ§λλ μμ‘΄μ±μ λνλ λλ€. λͺ¨λ κ·Έλνλ μ΄λ¬ν λ°©λ€κ³Ό κ·Έ κΈ°λ° μμ€ν μ΄ μ΄λ»κ² μλ‘ μ°κ²°λμ΄ μλμ§λ₯Ό 보μ¬μ€λλ€.
λͺ¨λ κ·Έλν λΆμμ΄ μ μ€μνκ°?
λͺ¨λ κ·Έλνλ₯Ό μ΄ν΄νλ κ²μ μ¬λ¬ κ°μ§ μ΄μ λ‘ λ§€μ° μ€μν©λλ€:
- μμ‘΄μ± κ΄λ¦¬: λͺ¨λ κ°μ μμ‘΄μ±μ μλ³νκ³ κ΄λ¦¬νμ¬ μΆ©λμ λ°©μ§νκ³ νμν λͺ¨λ λͺ¨λμ΄ μ¬λ°λ₯΄κ² λ‘λλλλ‘ λ³΄μ₯ν©λλ€.
- μ½λ μ΅μ ν: κ·Έλνλ₯Ό λΆμνμ¬ μ¬μ©νμ§ μλ μ½λ(λ°λ μ½λ μ κ±° λλ νΈλ¦¬ μμ΄νΉ)λ₯Ό μλ³νκ³ μ ν리μΌμ΄μ μ λ²λ€ ν¬κΈ°λ₯Ό μ΅μ ννμ¬ λ‘λ μκ°μ λ¨μΆν μ μμ΅λλ€.
- μν μμ‘΄μ± κ°μ§: μν μμ‘΄μ±μ λ κ° μ΄μμ λͺ¨λμ΄ μλ‘ μμ‘΄νμ¬ λ£¨νλ₯Ό μμ±ν λ λ°μν©λλ€. μ΄λ μμΈ‘ν μ μλ λμκ³Ό μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. λͺ¨λ κ·Έλν λΆμμ μ΄λ¬ν μνμ κ°μ§νκ³ ν΄κ²°νλ λ° λμμ΄ λ©λλ€.
- μ½λ μ€ν리ν : μ ν리μΌμ΄μ μ νμμ λ°λΌ λ‘λν μ μλ λ μμ μ²ν¬λ‘ λλλ ν¨μ¨μ μΈ μ½λ μ€ν리ν μ κ°λ₯νκ² ν©λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν©λλ€.
- μ μ§λ³΄μμ± ν₯μ: λͺ¨λ κ·Έλνλ₯Ό λͺ ννκ² μ΄ν΄νλ©΄ μ½λλ² μ΄μ€λ₯Ό 리ν©ν λ§νκ³ μ μ§λ³΄μνκΈ°κ° λ μ¬μμ§λλ€.
- μ±λ₯ μ΅μ ν: μ±λ₯ λ³λͺ© νμμ μλ³νκ³ μ ν리μΌμ΄μ μ λ‘λ© λ° μ€νμ μ΅μ ννλ λ° λμμ΄ λ©λλ€.
μμ‘΄μ± μΆμ : λͺ¨λ κ·Έλν λΆμμ ν΅μ¬
μμ‘΄μ± μΆμ μ λͺ¨λ κ°μ κ΄κ³λ₯Ό μλ³νκ³ κ΄λ¦¬νλ κ³Όμ μ λλ€. μ΄λ€ λͺ¨λμ΄ λ€λ₯Έ μ΄λ€ λͺ¨λμ μμ‘΄νλμ§ νμ νλ κ²μ λλ€. μ΄ κ³Όμ μ μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ ꡬ쑰μ λμμ μ΄ν΄νλ λ° κΈ°λ³Έμ΄ λ©λλ€. νλ μλ°μ€ν¬λ¦½νΈ κ°λ°μ λ€μκ³Ό κ°μ λͺ¨λ μμ€ν μ ν΅ν΄ μ΄μ§λλ λͺ¨λμ±μ ν¬κ² μμ‘΄ν©λλ€:
- ES λͺ¨λ (ESM): ECMAScript 2015 (ES6)μμ λμ λ νμ€νλ λͺ¨λ μμ€ν μ λλ€. `import`μ `export` ꡬ문μ μ¬μ©ν©λλ€.
- CommonJS: μ£Όλ‘ Node.js νκ²½μμ μ¬μ©λλ λͺ¨λ μμ€ν μ λλ€. `require()`μ `module.exports`λ₯Ό μ¬μ©ν©λλ€.
- AMD (Asynchronous Module Definition): μ£Όλ‘ λΈλΌμ°μ μμ λΉλκΈ° λ‘λ©μ μν΄ μ€κ³λ μ€λλ λͺ¨λ μμ€ν μ λλ€.
- UMD (Universal Module Definition): AMD, CommonJS, μ μ μ€μ½νλ₯Ό ν¬ν¨ν μ¬λ¬ λͺ¨λ μμ€ν κ³Ό νΈνλλλ‘ μλνλ λ°©μμ λλ€.
μμ‘΄μ± μΆμ λꡬμ κΈ°μ μ μ΄λ¬ν λͺ¨λ μμ€ν μ λΆμνμ¬ λͺ¨λ κ·Έλνλ₯Ό ꡬμΆν©λλ€.
μμ‘΄μ± μΆμ μ μλ λ°©μ
μμ‘΄μ± μΆμ μ λ€μ λ¨κ³λ₯Ό ν¬ν¨ν©λλ€:
- νμ±: κ° λͺ¨λμ μμ€ μ½λλ₯Ό νμ±νμ¬ `import` λλ `require()` ꡬ문μ μλ³ν©λλ€.
- ν΄μ: λͺ¨λ μ§μ μ(μ: `'./my-module'`, `'lodash'`)λ₯Ό ν΄λΉ νμΌ κ²½λ‘λ‘ ν΄μν©λλ€. μ΄ κ³Όμ μλ μ’ μ’ λͺ¨λ ν΄μ μκ³ λ¦¬μ¦κ³Ό μ€μ νμΌ(μ: `package.json`) μ°Έμ‘°κ° ν¬ν¨λ©λλ€.
- κ·Έλν ꡬμ±: κ° λ Έλκ° λͺ¨λμ λνλ΄κ³ κ° μ£μ§κ° μμ‘΄μ±μ λνλ΄λ κ·Έλν λ°μ΄ν° ꡬ쑰λ₯Ό μμ±ν©λλ€.
ES λͺ¨λμ μ¬μ©ν λ€μ μμ λ₯Ό κ³ λ €ν΄ λ³΄μΈμ:
// moduleA.js
import moduleB from './moduleB';
export function doSomething() {
moduleB.doSomethingElse();
}
// moduleB.js
export function doSomethingElse() {
console.log('Hello from moduleB!');
}
// index.js
import { doSomething } from './moduleA';
doSomething();
μ΄ μμ μμ λͺ¨λ κ·Έλνλ λ€μκ³Ό κ°μ κ²μ λλ€:
- `index.js`λ `moduleA.js`μ μμ‘΄ν©λλ€.
- `moduleA.js`λ `moduleB.js`μ μμ‘΄ν©λλ€.
μμ‘΄μ± μΆμ κ³Όμ μ μ΄λ¬ν κ΄κ³λ₯Ό μλ³νκ³ κ·Έμ λ°λΌ κ·Έλνλ₯Ό ꡬμ±ν©λλ€.
λͺ¨λ κ·Έλν λΆμ λꡬ
μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ·Έλνλ₯Ό λΆμνκΈ° μν μ¬λ¬ λκ΅¬κ° μμ΅λλ€. μ΄λ¬ν λꡬλ μμ‘΄μ± μΆμ κ³Όμ μ μλννκ³ μ ν리μΌμ΄μ ꡬ쑰μ λν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
λͺ¨λ λ²λ€λ¬
λͺ¨λ λ²λ€λ¬λ νλ μλ°μ€ν¬λ¦½νΈ κ°λ°μ νμμ μΈ λꡬμ λλ€. μ ν리μΌμ΄μ μ λͺ¨λ λͺ¨λμ λΈλΌμ°μ μμ μ½κ² λ‘λν μ μλ νλ μ΄μμ νμΌλ‘ λ¬Άμ΄μ€λλ€. μΈκΈ° μλ λͺ¨λ λ²λ€λ¬λ λ€μκ³Ό κ°μ΅λλ€:
- Webpack: μ½λ μ€ν리ν , νΈλ¦¬ μμ΄νΉ, ν« λͺ¨λ κ΅μ²΄ λ± λ€μν κΈ°λ₯μ μ§μνλ κ°λ ₯νκ³ λ€μ¬λ€λ₯ν λͺ¨λ λ²λ€λ¬μ λλ€.
- Rollup: λ μμ λ²λ€μ μμ±νλ λ° μ€μ μ λ λͺ¨λ λ²λ€λ¬λ‘, λΌμ΄λΈλ¬λ¦¬λ μμ κ·λͺ¨μ μ ν리μΌμ΄μ μ μ΄μμ μ λλ€.
- Parcel: μ¬μ©νκΈ° μ½κ³ μ΅μνμ μ€μ λ§ νμν μ λ‘ κ΅¬μ± λͺ¨λ λ²λ€λ¬μ λλ€.
- esbuild: Goλ‘ μμ±λ λ§€μ° λΉ λ₯Έ μλ°μ€ν¬λ¦½νΈ λ²λ€λ¬ λ° λ―Έλνμ΄μ΄μ λλ€.
μ΄λ¬ν λ²λ€λ¬λ λͺ¨λ κ·Έλνλ₯Ό λΆμνμ¬ λͺ¨λμ λ²λ€λ§ν΄μΌ ν μμλ₯Ό κ²°μ νκ³ λ²λ€ ν¬κΈ°λ₯Ό μ΅μ νν©λλ€. μλ₯Ό λ€μ΄, Webpackμ λ΄λΆ λͺ¨λ κ·Έλν ννμ μ¬μ©νμ¬ μ½λ μ€ν리ν κ³Ό νΈλ¦¬ μμ΄νΉμ μνν©λλ€.
μ μ λΆμ λꡬ
μ μ λΆμ λꡬλ μ½λλ₯Ό μ€ννμ§ μκ³ λΆμν©λλ€. μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νκ³ , μ½λ© νμ€μ κ°μ νλ©°, μ ν리μΌμ΄μ ꡬ쑰μ λν ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€. μλ°μ€ν¬λ¦½νΈλ₯Ό μν μΈκΈ° μλ μ μ λΆμ λꡬλ λ€μκ³Ό κ°μ΅λλ€:
- ESLint: ECMAScript/μλ°μ€ν¬λ¦½νΈ μ½λμμ λ°κ²¬λ ν¨ν΄μ μλ³νκ³ λ³΄κ³ νλ λ¦°ν°μ λλ€.
- JSHint: μ½λ© νμ€μ κ°μ νκ³ μ μ¬μ μ€λ₯λ₯Ό μλ³νλ λ° λμμ΄ λλ λ λ€λ₯Έ μΈκΈ° μλ μλ°μ€ν¬λ¦½νΈ λ¦°ν°μ λλ€.
- TypeScript Compiler: νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ μ μ λΆμμ μννμ¬ νμ μ€λ₯ λ° κΈ°ν λ¬Έμ λ₯Ό μλ³ν μ μμ΅λλ€.
- Dependency-cruiser: μμ‘΄μ±μ μκ°ννκ³ κ²μ¦νλ 컀맨λ λΌμΈ λꡬ λ° λΌμ΄λΈλ¬λ¦¬μ λλ€ (νΉν μν μμ‘΄μ± κ°μ§μ μ μ©ν©λλ€).
μ΄λ¬ν λꡬλ λͺ¨λ κ·Έλν λΆμμ νμ©νμ¬ μ¬μ©νμ§ μλ μ½λλ₯Ό μλ³νκ³ , μν μμ‘΄μ±μ κ°μ§νλ©°, μμ‘΄μ± κ·μΉμ κ°μ ν μ μμ΅λλ€.
μκ°ν λꡬ
λͺ¨λ κ·Έλνλ₯Ό μκ°ννλ κ²μ μ ν리μΌμ΄μ μ ꡬ쑰λ₯Ό μ΄ν΄νλ λ° λ§€μ° λμμ΄ λ μ μμ΅λλ€. μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ·Έλνλ₯Ό μκ°ννκΈ° μν μ¬λ¬ λκ΅¬κ° μμ΅λλ€:
- Webpack Bundle Analyzer: λ²λ€μ ν¬ν¨λ κ° λͺ¨λμ ν¬κΈ°λ₯Ό μκ°ννλ Webpack νλ¬κ·ΈμΈμ λλ€.
- Rollup Visualizer: λͺ¨λ κ·Έλνμ λ²λ€ ν¬κΈ°λ₯Ό μκ°ννλ Rollup νλ¬κ·ΈμΈμ λλ€.
- Madge: μλ°μ€ν¬λ¦½νΈ, νμ μ€ν¬λ¦½νΈ, CSSμ λͺ¨λ μμ‘΄μ±μ λν μκ°μ λ€μ΄μ΄κ·Έλ¨μ μμ±νλ κ°λ°μ λꡬμ λλ€.
μ΄λ¬ν λꡬλ λͺ¨λ κ·Έλνμ μκ°μ ννμ μ 곡νμ¬ μμ‘΄μ±, μν μμ‘΄μ±, λ²λ€ ν¬κΈ°μ κΈ°μ¬νλ ν° λͺ¨λμ μ½κ² μλ³ν μ μκ² ν΄μ€λλ€.
λͺ¨λ κ·Έλν λΆμμ κ³ κΈ κΈ°μ
κΈ°λ³Έμ μΈ μμ‘΄μ± μΆμ μΈμλ, μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ ννκ³ κ°μ νλ λ° μ¬μ©ν μ μλ μ¬λ¬ κ³ κΈ κΈ°μ μ΄ μμ΅λλ€.
νΈλ¦¬ μμ΄νΉ (λ°λ μ½λ μ κ±°)
νΈλ¦¬ μμ΄νΉμ λ²λ€μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νλ κ³Όμ μ λλ€. λͺ¨λ λ²λ€λ¬λ λͺ¨λ κ·Έλνλ₯Ό λΆμνμ¬ μ ν리μΌμ΄μ μμ μ¬μ©λμ§ μλ λͺ¨λκ³Ό exportλ₯Ό μλ³νκ³ λ²λ€μμ μ κ±°ν μ μμ΅λλ€. μ΄λ λ²λ€ ν¬κΈ°λ₯Ό μ€μ΄κ³ μ ν리μΌμ΄μ μ λ‘λ© μκ°μ κ°μ ν©λλ€. 'νΈλ¦¬ μμ΄νΉ'μ΄λΌλ μ©μ΄λ μ¬μ©νμ§ μλ μ½λκ° λ무(μ ν리μΌμ΄μ μ½λλ² μ΄μ€)μμ νλ€μ΄ λ¨μ΄λ¨λ¦΄ μ μλ λ§λ₯Έ μκ³Ό κ°λ€λ μμ΄λμ΄μμ μ λνμ΅λλ€.
μλ₯Ό λ€μ΄, μλ°± κ°μ μ νΈλ¦¬ν° ν¨μλ₯Ό ν¬ν¨νλ Lodashμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μκ°ν΄ 보μΈμ. μ ν리μΌμ΄μ μμ μ΄ ν¨μλ€ μ€ λͺ κ°λ§ μ¬μ©νλ€λ©΄, νΈλ¦¬ μμ΄νΉμ μ¬μ©νμ§ μλ ν¨μλ€μ λ²λ€μμ μ κ±°νμ¬ ν¨μ¬ μμ λ²λ€ ν¬κΈ°λ₯Ό λ§λ€ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ 체 lodash λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ Έμ€λ λμ :
import _ from 'lodash'; _.map(array, func);
νμν νΉμ ν¨μλ§ κ°μ Έμ¬ μ μμ΅λλ€:
import map from 'lodash/map'; map(array, func);
μ΄ μ κ·Ό λ°©μμ νΈλ¦¬ μμ΄νΉκ³Ό κ²°ν©νμ¬ μ΅μ’ λ²λ€μ νμν μ½λλ§ ν¬ν¨λλλ‘ λ³΄μ₯ν©λλ€.
μ½λ μ€ν리ν
μ½λ μ€ν리ν μ μ ν리μΌμ΄μ μ νμμ λ°λΌ λ‘λν μ μλ λ μμ μ²ν¬λ‘ λλλ κ³Όμ μ λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν©λλ€. λͺ¨λ κ·Έλν λΆμμ μμ‘΄μ± κ΄κ³λ₯Ό κΈ°λ°μΌλ‘ μ ν리μΌμ΄μ μ μ²ν¬λ‘ λΆν νλ λ°©λ²μ κ²°μ νλ λ° μ¬μ©λ©λλ€. μΌλ°μ μΈ μ½λ μ€ν리ν μ λ΅μ λ€μκ³Ό κ°μ΅λλ€:
- κ²½λ‘ κΈ°λ° μ€ν리ν : λ€λ₯Έ κ²½λ‘ λλ νμ΄μ§λ₯Ό κΈ°μ€μΌλ‘ μ ν리μΌμ΄μ μ μ²ν¬λ‘ λΆν ν©λλ€.
- μ»΄ν¬λνΈ κΈ°λ° μ€ν리ν : λ€λ₯Έ μ»΄ν¬λνΈλ₯Ό κΈ°μ€μΌλ‘ μ ν리μΌμ΄μ μ μ²ν¬λ‘ λΆν ν©λλ€.
- λ²€λ μ€ν리ν : λ²€λ λΌμ΄λΈλ¬λ¦¬(μ: React, Angular, Vue)λ₯Ό μν λ³λμ μ²ν¬λ‘ μ ν리μΌμ΄μ μ λΆν ν©λλ€.
μλ₯Ό λ€μ΄, React μ ν리μΌμ΄μ μμλ ννμ΄μ§, μ 보 νμ΄μ§, μ°λ½μ² νμ΄μ§λ₯Ό μν μ²ν¬λ‘ μ ν리μΌμ΄μ μ λΆν ν μ μμ΅λλ€. μ¬μ©μκ° μ 보 νμ΄μ§λ‘ μ΄λνλ©΄ μ 보 νμ΄μ§μ λν μ½λλ§ λ‘λλ©λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν©λλ€.
μν μμ‘΄μ± κ°μ§ λ° ν΄κ²°
μν μμ‘΄μ±μ μμΈ‘ν μ μλ λμκ³Ό μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. λͺ¨λ κ·Έλν λΆμμ κ·Έλνμμ μνμ μλ³νμ¬ μν μμ‘΄μ±μ κ°μ§ν μ μμ΅λλ€. μΌλ¨ κ°μ§λλ©΄, μν μμ‘΄μ±μ μ½λλ₯Ό 리ν©ν λ§νμ¬ μνμ λμ΄μΌ ν©λλ€. μν μμ‘΄μ±μ ν΄κ²°νκΈ° μν μΌλ°μ μΈ μ λ΅μ λ€μκ³Ό κ°μ΅λλ€:
- μμ‘΄μ± μμ : λ λͺ¨λ κ°μ μμ‘΄μ± κ΄κ³λ₯Ό μμ μν΅λλ€.
- μΆμν λμ : λ λͺ¨λμ΄ λͺ¨λ μμ‘΄νλ μΈν°νμ΄μ€λ μΆμ ν΄λμ€λ₯Ό λ§λλλ€.
- 곡μ λ‘μ§ μ΄λ: 곡μ λ‘μ§μ μ΄λ λͺ¨λλ μμ‘΄νμ§ μλ λ³λμ λͺ¨λλ‘ μ΄λν©λλ€.
μλ₯Ό λ€μ΄, μλ‘ μμ‘΄νλ λ λͺ¨λ `moduleA`μ `moduleB`λ₯Ό μκ°ν΄ 보μΈμ:
// moduleA.js
import moduleB from './moduleB';
export function doSomething() {
moduleB.doSomethingElse();
}
// moduleB.js
import moduleA from './moduleA';
export function doSomethingElse() {
moduleA.doSomething();
}
μ΄λ μν μμ‘΄μ±μ μμ±ν©λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ κ³΅μ λ‘μ§μ ν¬ν¨νλ μλ‘μ΄ λͺ¨λ `moduleC`λ₯Ό λμ ν μ μμ΅λλ€:
// moduleC.js
export function sharedLogic() {
console.log('Shared logic!');
}
// moduleA.js
import moduleC from './moduleC';
export function doSomething() {
moduleC.sharedLogic();
}
// moduleB.js
import moduleC from './moduleC';
export function doSomethingElse() {
moduleC.sharedLogic();
}
μ΄λ κ² νλ©΄ μν μμ‘΄μ±μ΄ κΉ¨μ§κ³ μ½λκ° λ μ μ§λ³΄μνκΈ° μ¬μμ§λλ€.
λμ μν¬νΈ (Dynamic Imports)
λμ μν¬νΈλ λͺ¨λμ 미리 λ‘λνλ λμ νμν λ λ‘λν μ μκ² ν΄μ€λλ€. μ΄λ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ ν¬κ² κ°μ ν μ μμ΅λλ€. λμ μν¬νΈλ `import()` ν¨μλ₯Ό μ¬μ©νμ¬ κ΅¬νλλ©°, μ΄ ν¨μλ λͺ¨λλ‘ ν΄μλλ νλ‘λ―Έμ€λ₯Ό λ°νν©λλ€.
async function loadModule() {
const module = await import('./my-module');
module.default.doSomething();
}
λμ μν¬νΈλ μ½λ μ€ν리ν , μ§μ° λ‘λ© λ° κΈ°ν μ±λ₯ μ΅μ ν κΈ°μ μ ꡬννλ λ° μ¬μ©λ μ μμ΅λλ€.
μμ‘΄μ± μΆμ μ μν λͺ¨λ² μ¬λ‘
ν¨κ³Όμ μΈ μμ‘΄μ± μΆμ κ³Ό μ μ§λ³΄μ κ°λ₯ν μ½λλ₯Ό 보μ₯νκΈ° μν΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μΈμ:
- λͺ¨λ λ²λ€λ¬ μ¬μ©: Webpack, Rollup λλ Parcelκ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ₯Ό μ¬μ©νμ¬ μμ‘΄μ±μ κ΄λ¦¬νκ³ λ²λ€ ν¬κΈ°λ₯Ό μ΅μ ννμΈμ.
- μ½λ© νμ€ κ°μ : ESLintλ JSHintμ κ°μ λ¦°ν°λ₯Ό μ¬μ©νμ¬ μ½λ© νμ€μ κ°μ νκ³ μΌλ°μ μΈ μ€λ₯λ₯Ό λ°©μ§νμΈμ.
- μν μμ‘΄μ± νΌνκΈ°: μμΈ‘ν μ μλ λμκ³Ό μ±λ₯ λ¬Έμ λ₯Ό λ°©μ§νκΈ° μν΄ μν μμ‘΄μ±μ κ°μ§νκ³ ν΄κ²°νμΈμ.
- μν¬νΈ μ΅μ ν: νμν λͺ¨λκ³Ό exportλ§ μν¬νΈνκ³ , λͺ κ°μ ν¨μλ§ μ¬μ©νλλ° μ 체 λΌμ΄λΈλ¬λ¦¬λ₯Ό μν¬νΈνλ κ²μ νΌνμΈμ.
- λμ μν¬νΈ μ¬μ©: λμ μν¬νΈλ₯Ό μ¬μ©νμ¬ νμμ λ°λΌ λͺ¨λμ λ‘λνκ³ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ κ°μ νμΈμ.
- μ κΈ°μ μΈ λͺ¨λ κ·Έλν λΆμ: μκ°ν λꡬλ₯Ό μ¬μ©νμ¬ μ κΈ°μ μΌλ‘ λͺ¨λ κ·Έλνλ₯Ό λΆμνκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νμΈμ.
- μμ‘΄μ± μ΅μ μν μ μ§: λ²κ·Έ μμ , μ±λ₯ κ°μ , μλ‘μ΄ κΈ°λ₯μ νμ©νκΈ° μν΄ μμ‘΄μ±μ μ κΈ°μ μΌλ‘ μ λ°μ΄νΈνμΈμ.
- μμ‘΄μ± λ¬Έμν: μ½λλ₯Ό λ μ½κ² μ΄ν΄νκ³ μ μ§λ³΄μν μ μλλ‘ λͺ¨λ κ°μ μμ‘΄μ±μ λͺ ννκ² λ¬ΈμννμΈμ.
- μλνλ μμ‘΄μ± λΆμ: μμ‘΄μ± λΆμμ CI/CD νμ΄νλΌμΈμ ν΅ν©νμΈμ.
μ€μ μ¬λ‘
λͺ¨λ κ·Έλν λΆμμ΄ λ€μν λ§₯λ½μμ μ΄λ»κ² μ μ©λ μ μλμ§ λͺ κ°μ§ μ€μ μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
- μ μμκ±°λ μΉμ¬μ΄νΈ: μ μμκ±°λ μΉμ¬μ΄νΈλ μ½λ μ€ν리ν μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ νμμ λ°λΌ λ‘λν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μν λͺ©λ‘ νμ΄μ§, μν μμΈ νμ΄μ§, κ²°μ νμ΄μ§λ λ³λμ μ²ν¬λ‘ λ‘λλ μ μμ΅λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν©λλ€.
- λ¨μΌ νμ΄μ§ μ ν리μΌμ΄μ (SPA): λ¨μΌ νμ΄μ§ μ ν리μΌμ΄μ μ λμ μν¬νΈλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μ»΄ν¬λνΈλ₯Ό νμμ λ°λΌ λ‘λν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ‘κ·ΈμΈ νΌ, λμ보λ, μ€μ νμ΄μ§λ λ³λμ μ²ν¬λ‘ λ‘λλ μ μμ΅λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ¬μ©μ κ²½νμ κ°μ ν©λλ€.
- μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬: μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬λ νΈλ¦¬ μμ΄νΉμ μ¬μ©νμ¬ λ²λ€μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°ν μ μμ΅λλ€. μ΄λ λ²λ€ ν¬κΈ°λ₯Ό μ€μ΄κ³ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ κ°λ³κ² λ§λλλ€.
- λκ·λͺ¨ κΈ°μ μ ν리μΌμ΄μ : λκ·λͺ¨ κΈ°μ μ ν리μΌμ΄μ μ λͺ¨λ κ·Έλν λΆμμ νμ©νμ¬ μν μμ‘΄μ±μ μλ³ λ° ν΄κ²°νκ³ , μ½λ© νμ€μ κ°μ νλ©°, λ²λ€ ν¬κΈ°λ₯Ό μ΅μ νν μ μμ΅λλ€.
κΈλ‘λ² μ μμκ±°λ μμ: κΈλ‘λ² μ μμκ±°λ νλ«νΌμ λ€λ₯Έ ν΅ν, μΈμ΄, μ§μ μ€μ μ μ²λ¦¬νκΈ° μν΄ λ€λ₯Έ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ¬μ©ν μ μμ΅λλ€. λͺ¨λ κ·Έλν λΆμμ μ¬μ©μμ μμΉμ μ νΈλμ λ°λΌ μ΄λ¬ν λͺ¨λμ λ‘λ©μ μ΅μ ννμ¬ λΉ λ₯΄κ³ κ°μΈνλ κ²½νμ 보μ₯νλ λ° λμμ΄ λ μ μμ΅λλ€.
κ΅μ λ΄μ€ μΉμ¬μ΄νΈ: κ΅μ λ΄μ€ μΉμ¬μ΄νΈλ μ½λ μ€ν리ν μ μ¬μ©νμ¬ μΉμ¬μ΄νΈμ λ€λ₯Έ μΉμ (μ: μΈκ³ λ΄μ€, μ€ν¬μΈ , λΉμ¦λμ€)μ νμμ λ°λΌ λ‘λν μ μμ΅λλ€. λν, μ¬μ©μκ° λ€λ₯Έ μΈμ΄λ‘ μ νν λλ§ νΉμ μΈμ΄ ν©μ λ‘λνκΈ° μν΄ λμ μν¬νΈλ₯Ό μ¬μ©ν μ μμ΅λλ€.
λͺ¨λ κ·Έλν λΆμμ λ―Έλ
λͺ¨λ κ·Έλν λΆμμ μ§μμ μΈ μ°κ΅¬μ κ°λ°μ΄ μ§ν μ€μΈ μ§ννλ λΆμΌμ λλ€. λ―Έλμ νΈλ λλ λ€μκ³Ό κ°μ΅λλ€:
- μκ³ λ¦¬μ¦ κ°μ : μμ‘΄μ± μΆμ λ° λͺ¨λ κ·Έλν ꡬμ±μ μν λ ν¨μ¨μ μ΄κ³ μ νν μκ³ λ¦¬μ¦ κ°λ°.
- AIμμ ν΅ν©: μΈκ³΅μ§λ₯ λ° λ¨Έμ λ¬λμ ν΅ν©νμ¬ μ½λ μ΅μ νλ₯Ό μλννκ³ μ μ¬μ λ¬Έμ λ₯Ό μλ³.
- κ³ κΈ μκ°ν: μ ν리μΌμ΄μ ꡬ쑰μ λν λ κΉμ ν΅μ°°λ ₯μ μ 곡νλ λ μ κ΅ν μκ°ν λꡬ κ°λ°.
- μλ‘μ΄ λͺ¨λ μμ€ν μ§μ: μλ‘μ΄ λͺ¨λ μμ€ν κ³Ό μΈμ΄ κΈ°λ₯μ΄ λ±μ₯ν¨μ λ°λΌ μ΄μ λν μ§μ.
μλ°μ€ν¬λ¦½νΈκ° κ³μ λ°μ ν¨μ λ°λΌ, λͺ¨λ κ·Έλν λΆμμ νμ₯ κ°λ₯νκ³ ν¨μ¨μ μ΄λ©° μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ μ λ μ€μν μν μ ν κ²μ λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ·Έλν λΆμμ νμ₯ κ°λ₯νκ³ μ μ§λ³΄μ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν μ€μν κΈ°μ μ λλ€. λͺ¨λ κ·Έλνλ₯Ό μ΄ν΄νκ³ νμ©ν¨μΌλ‘μ¨ κ°λ°μλ ν¨κ³Όμ μΌλ‘ μμ‘΄μ±μ κ΄λ¦¬νκ³ , μ½λλ₯Ό μ΅μ ννλ©°, μν μμ‘΄μ±μ κ°μ§νκ³ , μ ν리μΌμ΄μ μ μ λ°μ μΈ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. μΉ μ ν리μΌμ΄μ μ 볡μ‘μ±μ΄ κ³μ μ¦κ°ν¨μ λ°λΌ λͺ¨λ κ·Έλν λΆμμ λ§μ€ν°νλ κ²μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ κ°λ°μμκ² νμμ μΈ κΈ°μ μ΄ λ κ²μ λλ€. μ΄ κΈμμ λ Όμλ λͺ¨λ² μ¬λ‘μ λꡬ λ° κΈ°μ μ μ±νν¨μΌλ‘μ¨, μ€λλ μ λμ§νΈ νκ²½μ μꡬλ₯Ό μΆ©μ‘±νλ κ²¬κ³ νκ³ ν¨μ¨μ μ΄λ©° μ¬μ©μ μΉνμ μΈ μΉ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.