JavaScript λͺ¨λ λ‘λ©μ μ΅μ ννκ³ μν°ν΄μ μ κ±°νμ¬ κΈλ‘λ² μΉ μ±λ₯μ ν₯μμν€μΈμ. λ³λ ¬ λ‘λ©, μ½λ λΆν λ° μ’ μμ± κ΄λ¦¬ κΈ°λ²μ μμ보μΈμ.
JavaScript λͺ¨λ λ‘λ© μν°ν΄: κΈλ‘λ² μΉ μ±λ₯μ μν μ’ μμ± λ‘λ© μ΅μ ν
νλ μΉ κ°λ° νκ²½μμ JavaScriptλ μΈν°λν°λΈνκ³ μλμ μΈ μ¬μ©μ κ²½νμ λ§λλ λ° μ€μν μν μ ν©λλ€. μΉ μ ν리μΌμ΄μ μ΄ λ³΅μ‘ν΄μ§μ λ°λΌ JavaScript μ½λλ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ κ²μ΄ κ°μ₯ μ€μν©λλ€. μ£Όμ κ³Όμ μ€ νλλ "λͺ¨λ λ‘λ© μν°ν΄"μ λλ€. μ΄λ νΉν λ€μν λ€νΈμν¬ νκ²½μ κ°μ§ μ¬λ¬ μ§μμ μ¬μ©μμκ² μΉ μ¬μ΄νΈ λ‘λ© μκ°μ μλΉν μν₯μ λ―ΈμΉ μ μλ μ±λ₯ λ³λͺ© νμμ λλ€. μ΄ κΈ°μ¬μμλ JavaScript λͺ¨λ λ‘λ© μν°ν΄μ κ°λ , κΈλ‘λ² μΉ μ±λ₯μ λ―ΈμΉλ μν₯ λ° λ€μν μ΅μ ν μ λ΅μ λν΄ μμΈν μ€λͺ ν©λλ€.
JavaScript λͺ¨λ λ‘λ© μν°ν΄ μ΄ν΄
JavaScript λͺ¨λ λ‘λ© μν°ν΄μ λͺ¨λμ΄ μμ°¨μ μΌλ‘ λ‘λλ λ λ°μνλ©°, κ° λͺ¨λμ μ€νλκΈ° μ μ μ’ μμ±μ΄ λ‘λλκΈ°λ₯Ό κΈ°λ€λ¦½λλ€. μ΄λ‘ μΈν΄ λΈλΌμ°μ κ° λ€μ λͺ¨λλ‘ μ΄λνκΈ° μ μ κ° λͺ¨λμ λ€μ΄λ‘λνκ³ κ΅¬λ¬Έ λΆμν΄μΌ νλ μ°μ λ°μμ΄ λ°μν©λλ€. μ΄ μμ°¨μ λ‘λ© νλ‘μΈμ€λ μΉ νμ΄μ§κ° μΈν°λν°λΈν΄μ§λ λ° κ±Έλ¦¬λ μκ°μ ν¬κ² λλ € μ¬μ©μ κ²½ν μ ν, μ΄νλ₯ μ¦κ° λ° μ μ¬μ μΌλ‘ λΉμ¦λμ€ μ§νμ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μΉ μ¬μ΄νΈμ JavaScript μ½λκ° λ€μκ³Ό κ°μ΄ ꡬμ±λμ΄ μλ€κ³ μμν΄ λ³΄μΈμ.
app.jsλmoduleA.jsμ μ’ μλ¨moduleA.jsλmoduleB.jsμ μ’ μλ¨moduleB.jsλmoduleC.jsμ μ’ μλ¨
μ΅μ ννμ§ μμΌλ©΄ λΈλΌμ°μ λ λ€μ μμλλ‘ μ΄λ¬ν λͺ¨λμ νλμ© μ°¨λ‘λ‘ λ‘λν©λλ€.
app.js(moduleA.jsκ° νμν κ²μ νμΈ)moduleA.js(moduleB.jsκ° νμν κ²μ νμΈ)moduleB.js(moduleC.jsκ° νμν κ²μ νμΈ)moduleC.js
μ΄κ²μ κ° μμ²μ΄ μλ£λμ΄μΌ λ€μ μμ²μ΄ μμλ μ μλ "μν°ν΄" ν¨κ³Όλ₯Ό λ§λλλ€. μν₯μ λλ¦° λ€νΈμν¬ λλ JavaScript νμΌμ νΈμ€ν νλ μλ²μμ μ§λ¦¬μ μΌλ‘ λ©λ¦¬ λ¨μ΄μ§ μ¬μ©μμκ²μ μ¦νλ©λλ€. μλ₯Ό λ€μ΄, λ΄μμ μλ²μ μ‘μΈμ€νλ λμΏμ μ¬μ©μλ λ€νΈμν¬ λκΈ° μκ°μΌλ‘ μΈν΄ λ‘λ© μκ°μ΄ ν¨μ¬ λ κΈΈμ΄μ Έ μν°ν΄ ν¨κ³Όκ° μ νλ©λλ€.
κΈλ‘λ² μΉ μ±λ₯μ λ―ΈμΉλ μν₯
λͺ¨λ λ‘λ© μν°ν΄μ νΉν μΈν°λ· μ°κ²° μλκ° λ리거λ λκΈ° μκ°μ΄ λμ μ§μμ μ¬μ©μμκ² κΈλ‘λ² μΉ μ±λ₯μ ν° μν₯μ λ―ΈμΉ©λλ€. κ°λ ₯ν μΈνλΌλ₯Ό κ°μΆ κ΅κ°μ μ¬μ©μμκ²λ λΉ λ₯΄κ² λ‘λλλ μΉ μ¬μ΄νΈκ° λμνμ΄ μ νμ μ΄κ±°λ λΆμμ ν λ€νΈμν¬λ₯Ό κ°μ§ κ΅κ°μ μ¬μ©μμκ²λ μ±λ₯μ΄ μ νλ μ μμ΅λλ€. μ΄λ‘ μΈν΄ λ€μκ³Ό κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
- λ‘λ© μκ° μ¦κ°: λͺ¨λμ μμ°¨μ λ‘λ©μ νΉν λκ·λͺ¨ μ½λλ² μ΄μ€ λλ 볡μ‘ν μ’ μμ± κ·Έλνλ₯Ό μ²λ¦¬ν λ μλΉν μ€λ²ν€λλ₯Ό μΆκ°ν©λλ€. μ΄λ λμνμ΄ μ νμ μ΄κ±°λ λκΈ° μκ°μ΄ λμ μ§μμμ νΉν λ¬Έμ κ° λ©λλ€. μλ₯Ό λ€μ΄, μΈλ μ골μ μ¬μ©μκ° λκ·λͺ¨ JavaScript λ²λ€μ΄ μλ μΉ μ¬μ΄νΈμ μ‘μΈμ€νλ €κ³ μλνλ€κ³ μμν΄ λ³΄μΈμ. μν°ν΄ ν¨κ³Όλ λλ¦° λ€νΈμν¬ μλλ‘ μΈν΄ νλλ©λλ€.
- μ¬μ©μ κ²½ν μ ν: λ‘λ© μκ°μ΄ λ리면 μ¬μ©μκ° λΆλ§μ λλΌκ³ μΉ μ¬μ΄νΈ λλ μ ν리μΌμ΄μ μ λν λΆμ μ μΈ μΈμμ κ°κ² λ μ μμ΅λλ€. μ¬μ©μλ λ‘λ©νλ λ° λ무 μ€λ 걸리면 μΉ μ¬μ΄νΈλ₯Ό ν¬κΈ°ν κ°λ₯μ±μ΄ λμΌλ©°, μ΄λ μ°Έμ¬λμ μ νμ¨μ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€.
- SEO μμ κ°μ: Googleκ³Ό κ°μ κ²μ μμ§μ νμ΄μ§ λ‘λ μλλ₯Ό μμ μμλ‘ κ°μ£Όν©λλ€. λ‘λ© μκ°μ΄ λλ¦° μΉ μ¬μ΄νΈλ κ²μ κ²°κ³Όμμ λΆμ΄μ΅μ λ°μ κ°μμ±κ³Ό μμ° νΈλν½μ΄ κ°μν μ μμ΅λλ€.
- μ΄νλ₯ μ¦κ°: λ‘λ© μλκ° λλ¦° μΉ μ¬μ΄νΈλ₯Ό μ νλ μ¬μ©μλ λΉ λ₯΄κ² λ λ κ°λ₯μ±μ΄ λμ΅λλ€(μ΄ν). λμ μ΄νλ₯ μ μ¬μ©μ κ²½νμ΄ μ’μ§ μλ€λ κ²μ λνλ΄λ©° SEOμ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- μμ΅ μμ€: μ μ μκ±°λ μΉ μ¬μ΄νΈμ κ²½μ° λ‘λ© μκ°μ΄ λ리면 μ§μ μ μΌλ‘ λ§€μΆ μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ¬μ©μλ κ²°μ νλ‘μΈμ€ μ€μ μ§μ°μ΄λ λΆλ§μ λλΌλ©΄ ꡬ맀λ₯Ό μλ£ν κ°λ₯μ±μ΄ μ€μ΄λλλ€.
JavaScript λͺ¨λ λ‘λ© μ΅μ νλ₯Ό μν μ λ΅
λ€νν JavaScript λͺ¨λ λ‘λ©μ μ΅μ ννκ³ μν°ν΄ ν¨κ³Όλ₯Ό μννλ λ° μ¬μ©ν μ μλ λͺ κ°μ§ μ λ΅μ΄ μμ΅λλ€. μ΄λ¬ν κΈ°μ μ λ‘λ©μ λ³λ ¬ννκ³ , νμΌ ν¬κΈ°λ₯Ό μ€μ΄κ³ , μ’ μμ±μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ λ° μ€μ μ λ‘λλ€.
1. Async λ° Deferλ₯Ό μ¬μ©ν λ³λ ¬ λ‘λ©
<script> νκ·Έμ λν async λ° defer μμ±μ μ¬μ©νλ©΄ λΈλΌμ°μ κ° HTML λ¬Έμμ ꡬ문 λΆμμ μ°¨λ¨νμ§ μκ³ JavaScript νμΌμ λ€μ΄λ‘λν μ μμ΅λλ€. μ΄λ κ² νλ©΄ μ¬λ¬ λͺ¨λμ λ³λ ¬ λ‘λ©μ΄ κ°λ₯νμ¬ μ 체 λ‘λ© μκ°μ΄ ν¬κ² μ€μ΄λλλ€.
async: HTML ꡬ문 λΆμμ μ°¨λ¨νμ§ μκ³ μ€ν¬λ¦½νΈλ₯Ό λΉλκΈ°μ μΌλ‘ λ€μ΄λ‘λνκ³ μ¬μ©ν μ μκ² λλ μ¦μ μ€νν©λλ€.asyncκ° μλ μ€ν¬λ¦½νΈλ HTMLμ λνλλ μμλλ‘ μ€νλλ€λ 보μ₯μ΄ μμ΅λλ€. λ€λ₯Έ μ€ν¬λ¦½νΈμ μμ‘΄νμ§ μλ λ 립μ μΈ μ€ν¬λ¦½νΈμ μ¬μ©νμΈμ.defer: μ€ν¬λ¦½νΈλ₯Ό λΉλκΈ°μ μΌλ‘ λ€μ΄λ‘λνμ§λ§ HTML ꡬ문 λΆμμ΄ μλ£λ νμλ§ μ€νν©λλ€.deferκ° μλ μ€ν¬λ¦½νΈλ HTMLμ λνλλ μμλλ‘ μ€νλλ€λ 보μ₯μ΄ μμ΅λλ€. DOMμ΄ μμ ν λ‘λλ νμ μ€νλμ΄μΌ νλ μ€ν¬λ¦½νΈμ μ¬μ©νμΈμ.
μ:
<script src="moduleA.js" async></script>
<script src="moduleB.js" async></script>
<script src="app.js" defer></script>
μ΄ μμ μμλ moduleA.jsμ moduleB.jsκ° λ³λ ¬λ‘ λ€μ΄λ‘λλ©λλ€. DOMμ μμ‘΄ν κ°λ₯μ±μ΄ λμ app.jsλ λΉλκΈ°μ μΌλ‘ λ€μ΄λ‘λλμ§λ§ HTMLμ΄ κ΅¬λ¬Έ λΆμλ νμλ§ μ€νλ©λλ€.
2. μ½λ λΆν
μ½λ λΆν μ JavaScript μ½λλ² μ΄μ€λ₯Ό μμ² μ λ‘λν μ μλ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ²ν¬λ‘ λλλ κ²μ μλ―Έν©λλ€. μ΄λ κ² νλ©΄ νμ¬ νμ΄μ§ λλ μνΈ μμ©μ νμν μ½λλ§ λ‘λνμ¬ μΉ μ¬μ΄νΈμ μ΄κΈ° λ‘λ© μκ°μ΄ μ€μ΄λλλ€.
μ£Όλ‘ λ κ°μ§ μ νμ μ½λ λΆν μ΄ μμ΅λλ€.
- κ²½λ‘ κΈ°λ° λΆν : μ ν리μΌμ΄μ μ μλ‘ λ€λ₯Έ κ²½λ‘ λλ νμ΄μ§λ₯Ό κΈ°λ°μΌλ‘ μ½λλ₯Ό λΆν ν©λλ€. μλ₯Ό λ€μ΄, "λ¬ΈμνκΈ°" νμ΄μ§μ λν μ½λλ μ¬μ©μκ° ν΄λΉ νμ΄μ§λ‘ μ΄λν λλ§ λ‘λλ©λλ€.
- μ»΄ν¬λνΈ κΈ°λ° λΆν : μ¬μ©μ μΈν°νμ΄μ€μ κ°λ³ μ»΄ν¬λνΈλ₯Ό κΈ°λ°μΌλ‘ μ½λλ₯Ό λΆν ν©λλ€. μλ₯Ό λ€μ΄, ν° μ΄λ―Έμ§ κ°€λ¬λ¦¬ μ»΄ν¬λνΈλ μ¬μ©μκ° νμ΄μ§μ ν΄λΉ λΆλΆκ³Ό μνΈ μμ©ν λλ§ λ‘λν μ μμ΅λλ€.
Webpack, Rollup λ° Parcelκ³Ό κ°μ λꡬλ μ½λ λΆν μ λν νλ₯ν μ§μμ μ 곡ν©λλ€. μ΄λ¬ν λꡬλ μ½λλ² μ΄μ€λ₯Ό μλμΌλ‘ λΆμνκ³ μμ² μ λ‘λν μ μλ μ΅μ νλ λ²λ€μ μμ±ν μ μμ΅λλ€.
μ(Webpack ꡬμ±):
module.exports = {
entry: {
main: './src/index.js',
contact: './src/contact.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
μ΄ κ΅¬μ±μ main.bundle.jsμ contact.bundle.jsλΌλ λ κ°μ κ°λ³ λ²λ€μ μμ±ν©λλ€. contact.bundle.jsλ μ¬μ©μκ° μ°λ½μ² νμ΄μ§λ‘ μ΄λν λλ§ λ‘λλ©λλ€.
3. μ’ μμ± κ΄λ¦¬
ν¨κ³Όμ μΈ μ’ μμ± κ΄λ¦¬λ λͺ¨λ λ‘λ©μ μ΅μ ννλ λ° λ§€μ° μ€μν©λλ€. μ¬κΈ°μλ μ½λλ² μ΄μ€λ₯Ό μ μ€νκ² λΆμνκ³ μ κ±°, μ΅μ ν λλ λΉλκΈ°μ μΌλ‘ λ‘λν μ μλ μ’ μμ±μ μλ³νλ κ²μ΄ ν¬ν¨λ©λλ€.
- μ¬μ©νμ§ μλ μ’
μμ± μ κ±°: μ½λλ² μ΄μ€λ₯Ό μ κΈ°μ μΌλ‘ κ²ν νκ³ λ μ΄μ μ¬μ©λμ§ μλ μ’
μμ±μ μ κ±°ν©λλ€.
npm pruneλ°yarn autocleanκ³Ό κ°μ λꡬλ μ¬μ©νμ§ μλ ν¨ν€μ§λ₯Ό μλ³νκ³ μ κ±°νλ λ° λμμ΄ λ μ μμ΅λλ€. - μ’ μμ± μ΅μ ν: ν° μ’ μμ±μ λ μκ³ ν¨μ¨μ μΈ λμμΌλ‘ λ체ν μ μλ κΈ°νλ₯Ό μ°ΎμΌμΈμ. μλ₯Ό λ€μ΄, ν° μ°¨νΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ μκ³ κ°λ²Όμ΄ λΌμ΄λΈλ¬λ¦¬λ‘ λ체ν μ μμ΅λλ€.
- μ’
μμ±μ λΉλκΈ° λ‘λ©: λμ
import()λ¬Έμ μ¬μ©νμ¬ μ’ μμ±μ΄ νμν λλ§ λΉλκΈ°μ μΌλ‘ λ‘λν©λλ€. μ΄λ κ² νλ©΄ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ© μκ°μ΄ ν¬κ² μ€μ΄λ€ μ μμ΅λλ€.
μ(λμ Import):
async function loadComponent() {
const { default: MyComponent } = await import('./MyComponent.js');
// Use MyComponent here
}
μ΄ μμ μμλ loadComponent ν¨μκ° νΈμΆλ λλ§ MyComponent.jsκ° λ‘λλ©λλ€. μ΄λ νμ΄μ§μμ μ¦μ λ³Ό μ μκ±°λ νΉμ μλ리μ€μμλ§ μ¬μ©λλ μ»΄ν¬λνΈμ νΉν μ μ©ν©λλ€.
4. λͺ¨λ λ²λ€λ¬(Webpack, Rollup, Parcel)
Webpack, Rollup λ° Parcelκ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ νλ JavaScript κ°λ°μ νμμ μΈ λꡬμ λλ€. μ΄λ¬ν λꡬλ λͺ¨λ λ° ν΄λΉ μ’ μμ±μ λΈλΌμ°μ μμ ν¨μ¨μ μΌλ‘ λ‘λν μ μλ μ΅μ νλ λ²λ€λ‘ λ¬Άλ νλ‘μΈμ€λ₯Ό μλνν©λλ€.
μ΄λ¬ν λꡬλ λ€μκ³Ό κ°μ κ΄λ²μν κΈ°λ₯μ μ 곡ν©λλ€.
- μ½λ λΆν : μμ μΈκΈνλ―μ΄ μ΄λ¬ν λꡬλ μ½λλ₯Ό μμ² μ λ‘λν μ μλ λ μμ μ²ν¬λ‘ μλμΌλ‘ λΆν ν μ μμ΅λλ€.
- νΈλ¦¬ μμ΄νΉ: λ²λ€μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νμ¬ ν¬κΈ°λ₯Ό λμ± μ€μ λλ€. ES λͺ¨λμ μ¬μ©ν λ νΉν ν¨κ³Όμ μ λλ€.
- μ΅μν λ° μμΆ: 곡백, μ£Όμ λ° κΈ°ν λΆνμν λ¬Έμλ₯Ό μ κ±°νμ¬ μ½λ ν¬κΈ°λ₯Ό μ€μ λλ€.
- μμ° μ΅μ ν: μ΄λ―Έμ§, CSS λ° κΈ°ν μμ°μ μ΅μ ννμ¬ λ‘λ© μκ°μ κ°μ ν©λλ€.
- ν« λͺ¨λ κ΅μ²΄(HMR): μ 체 νμ΄μ§λ₯Ό λ€μ λ‘λνμ§ μκ³ λΈλΌμ°μ μμ μ½λλ₯Ό μ λ°μ΄νΈν μ μλλ‘ νμ¬ κ°λ° κ²½νμ κ°μ ν©λλ€.
μ¬λ°λ₯Έ λͺ¨λ λ²λ€λ¬λ₯Ό μ ννλ κ²μ νλ‘μ νΈμ νΉμ μꡬ μ¬νμ λ°λΌ λ€λ¦ λλ€. Webpackμ κ΅¬μ± κ°λ₯μ±μ΄ λκ³ κ΄λ²μν κΈ°λ₯μ μ 곡νλ―λ‘ λ³΅μ‘ν νλ‘μ νΈμ μ ν©ν©λλ€. Rollupμ λ°μ΄λ νΈλ¦¬ μμ΄νΉ κΈ°λ₯μΌλ‘ μ λͺ νμ¬ λΌμ΄λΈλ¬λ¦¬ λ° μκ·λͺ¨ μ ν리μΌμ΄μ μ μ΄μμ μ λλ€. Parcelμ μ¬μ©νκΈ° μ½κ³ μ¦μ λ°μ΄λ μ±λ₯μ μ 곡νλ μ λ‘ κ΅¬μ± λ²λ€λ¬μ λλ€.
5. HTTP/2 λ° μλ² νΈμ
HTTP/2λ HTTP νλ‘ν μ½μ μ΅μ λ²μ μΌλ‘, λ€μκ³Ό κ°μ HTTP/1.1μ λΉν΄ μ¬λ¬ κ°μ§ μ±λ₯ κ°μ μ¬νμ μ 곡ν©λλ€.
- λ©ν°νλ μ±: λ¨μΌ μ°κ²°μ ν΅ν΄ μ¬λ¬ μμ²μ λ³΄λΌ μ μλλ‘ νμ¬ μ¬λ¬ μ°κ²°μ μ€μ νλ μ€λ²ν€λλ₯Ό μ€μ λλ€.
- ν€λ μμΆ: HTTP ν€λλ₯Ό μμΆνμ¬ ν¬κΈ°λ₯Ό μ€μ λλ€.
- μλ² νΈμ: μλ²κ° ν΄λΌμ΄μΈνΈμμ λͺ μμ μΌλ‘ μμ²νκΈ° μ μ ν΄λΌμ΄μΈνΈμ 리μμ€λ₯Ό μ¬μ μ λ³΄λΌ μ μλλ‘ ν©λλ€.
μλ² νΈμλ λͺ¨λ λ‘λ©μ μ΅μ ννλ λ° νΉν ν¨κ³Όμ μΌ μ μμ΅λλ€. μλ²λ HTML λ¬Έμλ₯Ό λΆμνμ¬ ν΄λΌμ΄μΈνΈκ° νμλ‘ νλ JavaScript λͺ¨λμ μλ³νκ³ μμ²νκΈ° μ μ ν΄λΌμ΄μΈνΈμ μ¬μ μ νΈμν μ μμ΅λλ€. μ΄λ κ² νλ©΄ λͺ¨λμ λ‘λνλ λ° κ±Έλ¦¬λ μκ°μ ν¬κ² μ€μΌ μ μμ΅λλ€.
μλ² νΈμλ₯Ό ꡬννλ €λ©΄ μΉ μλ²κ° μ μ ν Link ν€λλ₯Ό 보λ΄λλ‘ κ΅¬μ±ν΄μΌ ν©λλ€. ꡬ체μ μΈ κ΅¬μ±μ μ¬μ© μ€μΈ μΉ μλ²μ λ°λΌ λ€λ¦
λλ€.
μ(Apache ꡬμ±):
<FilesMatch "index.html">
<IfModule mod_headers.c>
Header set Link "</moduleA.js>; rel=preload; as=script, </moduleB.js>; rel=preload; as=script"
</IfModule>
</FilesMatch>
6. μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)
μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)λ μΉ μ¬μ΄νΈ μ½ν μΈ λ₯Ό μΊμ±νκ³ μ¬μ©μμκ² κ°μ₯ κ°κΉμ΄ μλ²μμ μ½ν μΈ λ₯Ό μ μ‘νλ μ§λ¦¬μ μΌλ‘ λΆμ°λ μλ² λ€νΈμν¬μ λλ€. μ΄λ κ² νλ©΄ λκΈ° μκ°μ΄ μ€μ΄λ€κ³ νΉν μ¬λ¬ μ§μμ μ¬μ©μμ κ²½μ° λ‘λ© μκ°μ΄ κ°μ λ©λλ€.
CDNμ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ λ°©μμΌλ‘ JavaScript λͺ¨λμ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
- λκΈ° μκ° κ°μ: μ¬μ©μμκ² λ κ°κΉμ΄ μλ²μμ μ½ν μΈ λ₯Ό μ μ‘ν©λλ€.
- νΈλν½ μ€νλ‘λ: μ€λ¦¬μ§ μλ²μ λΆνλ₯Ό μ€μ λλ€.
- κ°μ©μ± ν₯μ: μ€λ¦¬μ§ μλ²μ λ¬Έμ κ° λ°μνλλΌλ μ½ν μΈ λ₯Ό νμ μ¬μ©ν μ μλλ‘ λ³΄μ₯ν©λλ€.
μΌλ°μ μΈ CDN μ 곡μ 체λ λ€μκ³Ό κ°μ΅λλ€.
- Cloudflare
- Amazon CloudFront
- Akamai
- Google Cloud CDN
CDNμ μ νν λλ κ°κ²©, μ±λ₯, κΈ°λ₯ λ° μ§λ¦¬μ μ μ© λ²μμ κ°μ μμλ₯Ό κ³ λ €νμΈμ. μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ νλ κ²½μ° μ¬λ¬ μ§μμ κ΄λ²μν μλ² λ€νΈμν¬λ₯Ό κ°μΆ CDNμ μ ννλ κ²μ΄ μ€μν©λλ€.
7. λΈλΌμ°μ μΊμ±
λΈλΌμ°μ μΊμ±μ μ¬μ©νλ©΄ λΈλΌμ°μ κ° JavaScript λͺ¨λκ³Ό κ°μ μ μ μμ°μ λ‘컬μ μ μ₯ν μ μμ΅λλ€. μ¬μ©μκ° μΉ μ¬μ΄νΈλ₯Ό λ€μ λ°©λ¬Ένλ©΄ λΈλΌμ°μ λ μλ²μμ λ€μ΄λ‘λνλ λμ μΊμμμ μ΄λ¬ν μμ°μ κ²μν μ μμ΅λλ€. μ΄λ κ² νλ©΄ λ‘λ© μκ°μ΄ ν¬κ² μ€μ΄λ€κ³ μ λ°μ μΈ μ¬μ©μ κ²½νμ΄ κ°μ λ©λλ€.
λΈλΌμ°μ μΊμ±μ νμ±ννλ €λ©΄ μΉ μλ²κ° Cache-Control λ° Expiresμ κ°μ μ μ ν HTTP μΊμ ν€λλ₯Ό μ€μ νλλ‘ κ΅¬μ±ν΄μΌ ν©λλ€. μ΄λ¬ν ν€λλ λΈλΌμ°μ μ μμ°μ μΊμνλ κΈ°κ°μ μλ €μ€λλ€.
μ(Apache ꡬμ±):
<FilesMatch "\.js$">
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 year"
</IfModule>
<IfModule mod_headers.c>
Header set Cache-Control "public, max-age=31536000"
</IfModule>
</FilesMatch>
μ΄ κ΅¬μ±μ λΈλΌμ°μ μ JavaScript νμΌμ 1λ λμ μΊμνλλ‘ μ§μν©λλ€.
8. μ±λ₯ μΈ‘μ λ° λͺ¨λν°λ§
JavaScript λͺ¨λ λ‘λ© μ΅μ νλ μ§μμ μΈ νλ‘μΈμ€μ λλ€. κ°μ ν μμμ μλ³νκΈ° μν΄ μΉ μ¬μ΄νΈμ μ±λ₯μ μ κΈ°μ μΌλ‘ μΈ‘μ νκ³ λͺ¨λν°λ§νλ κ²μ΄ νμμ μ λλ€.
λ€μκ³Ό κ°μ λꡬ:
- Google PageSpeed Insights: μΉ μ¬μ΄νΈμ μ±λ₯μ λν ν΅μ°°λ ₯μ μ 곡νκ³ μ΅μ νλ₯Ό μν μ μμ μ 곡ν©λλ€.
- WebPageTest: μμΈν μν°ν΄ μ°¨νΈλ₯Ό ν¬ν¨νμ¬ μΉ μ¬μ΄νΈ μ±λ₯μ λΆμνλ κ°λ ₯ν λꡬμ λλ€.
- Lighthouse: μΉ νμ΄μ§μ νμ§μ κ°μ νκΈ° μν μ€ν μμ€ μλν λꡬμ λλ€. μ±λ₯, μ κ·Όμ±, νλ‘κ·Έλ μλΈ μΉ μ±, SEO λ±μ λν κ°μ¬λ₯Ό μ 곡ν©λλ€. Chrome DevToolsμμ μ¬μ©ν μ μμ΅λλ€.
- New Relic: μ ν리μΌμ΄μ λ° μΈνλΌ μ±λ₯μ λν μ€μκ° ν΅μ°°λ ₯μ μ 곡νλ ν¬κ΄μ μΈ λͺ¨λν°λ§ νλ«νΌμ λλ€.
- Datadog: ν΄λΌμ°λ κ·λͺ¨ μ ν리μΌμ΄μ μ μν λͺ¨λν°λ§ λ° λΆμ νλ«νΌμΌλ‘, μ±λ₯ λ©νΈλ¦, λ‘κ·Έ λ° μ΄λ²€νΈμ λν κ°μμ±μ μ 곡ν©λλ€.
μ΄λ¬ν λꡬλ λͺ¨λ λ‘λ© νλ‘μΈμ€μ λ³λͺ© νμμ μλ³νκ³ μ΅μ ν λ Έλ ₯μ μν₯μ μΆμ νλ λ° λμμ΄ λ μ μμ΅λλ€. λ€μκ³Ό κ°μ λ©νΈλ¦μ μ£Όμλ₯Ό κΈ°μΈμ΄μΈμ.
- 첫 μ½ν μΈ λ λλ§ μκ°(FCP): νμ΄μ§μ 첫 λ²μ§Έ μμκ° λ λλ§λλ λ° κ±Έλ¦¬λ μκ°μ λλ€.
- μ΅λ μ½ν μΈ λ λλ§ μκ°(LCP): κ°μ₯ ν° μ½ν μΈ μμ(μ΄λ―Έμ§ λλ ν μ€νΈ λΈλ‘)κ° λ³΄μ΄λ λ° κ±Έλ¦¬λ μκ°μ λλ€. μ’μ LCPλ 2.5μ΄ λ―Έλ§μ λλ€.
- μνΈ μμ© μκ°(TTI): νμ΄μ§κ° μμ ν μνΈ μμ©νκ² λλ λ° κ±Έλ¦¬λ μκ°μ λλ€.
- μ΄ μ°¨λ¨ μκ°(TBT): νμ΄μ§κ° λ‘λλλ λμ μ€ν¬λ¦½νΈμ μν΄ μ°¨λ¨λλ μ΄ μκ°μ μΈ‘μ ν©λλ€.
- 첫 λ²μ§Έ μ λ ₯ μ§μ°(FID): μ¬μ©μκ° νμ΄μ§μ μ²μ μνΈ μμ©νλ μμ (μ: λ§ν¬λ₯Ό ν΄λ¦νκ±°λ, λ²νΌμ λλ₯΄κ±°λ, μ¬μ©μ μ§μ JavaScript κΈ°λ° μ»¨νΈλ‘€μ μ¬μ©νλ κ²½μ°)λΆν° λΈλΌμ°μ κ° μ€μ λ‘ ν΄λΉ μνΈ μμ© μ²λ¦¬λ₯Ό μμν μ μλ μμ κΉμ§μ μκ°μ μΈ‘μ ν©λλ€. μ’μ FIDλ 100λ°λ¦¬μ΄ λ―Έλ§μ λλ€.
κ²°λ‘
JavaScript λͺ¨λ λ‘λ© μν°ν΄μ νΉν μ μΈκ³ μ¬μ©μμ κ²½μ° μΉ μ±λ₯μ ν° μν₯μ λ―ΈμΉ μ μμ΅λλ€. μ΄ κΈ°μ¬μ μ€λͺ λ μ λ΅μ ꡬννλ©΄ λͺ¨λ λ‘λ© νλ‘μΈμ€λ₯Ό μ΅μ ννκ³ , λ‘λ© μκ°μ μ€μ΄κ³ , μ μΈκ³ μ¬μ©μμ μ¬μ©μ κ²½νμ κ°μ ν μ μμ΅λλ€. λ³λ ¬ λ‘λ©, μ½λ λΆν , ν¨κ³Όμ μΈ μ’ μμ± κ΄λ¦¬ λ° λͺ¨λ λ²λ€λ¬ λ° CDNκ³Ό κ°μ λꡬ νμ©μ μ°μ μμλ₯Ό λλ κ²μ μμ§ λ§μΈμ. μΉ μ¬μ΄νΈμ μ±λ₯μ μ§μμ μΌλ‘ μΈ‘μ νκ³ λͺ¨λν°λ§νμ¬ μΆκ° μ΅μ νλ₯Ό μν μμμ μλ³νκ³ μμΉλ λ€νΈμν¬ μ‘°κ±΄μ κ΄κ³μμ΄ λͺ¨λ μ¬μ©μμκ² λΉ λ₯΄κ³ λ§€λ ₯μ μΈ κ²½νμ 보μ₯νμΈμ.
κΆκ·Ήμ μΌλ‘ JavaScript λͺ¨λ λ‘λ©μ μ΅μ ννλ κ²μ λ¨μν κΈ°μ μ μ±λ₯μ κ΄ν κ²μ΄ μλλΌ λ λμ μ¬μ©μ κ²½νμ λ§λ€κ³ , SEOλ₯Ό κ°μ νκ³ , μ μΈκ³μ μΌλ‘ λΉμ¦λμ€ μ±κ³΅μ μ΄λλ κ²μ κ΄ν κ²μ λλ€. μ΄λ¬ν μ λ΅μ μ§μ€νλ©΄ λΉ λ₯΄κ³ μμ μ μ΄λ©° λͺ¨λ μ¬λμ΄ μ‘μΈμ€ν μ μλ μΉ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.