Resource Timing APIλ₯Ό μ¬μ©νμ¬ νλ°νΈμλ μ±λ₯μ λν κΉμ΄ μλ ν΅μ°°λ ₯μ μ»μΌμΈμ. μ΅μ νλ λ‘λ μ±λ₯μ μν΄ λ¦¬μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μ§κ³νκ³ λΆμνλ λ°©λ²μ μμ보μΈμ.
νλ°νΈμλ μ±λ₯ API 리μμ€ νμ΄λ° μ§κ³: λ‘λ μ±λ₯ λΆμ
νμν μ¬μ©μ κ²½νμ μ 곡νκΈ° μν λ Έλ ₯μμ νλ°νΈμλ μ±λ₯ μ΅μ νλ κ°μ₯ μ€μν©λλ€. μ΄λ¬ν μ΅μ νμ ν΅μ¬μ μΈ μΈ‘λ©΄μ μΉμ¬μ΄νΈλ μ ν리μΌμ΄μ μμ 리μμ€κ° μ΄λ»κ² λ‘λλλμ§ μ΄ν΄νλ λ° μμ΅λλ€. κ΄λ²μν Performance API μ νκ΅°μ μΌλΆμΈ Resource Timing APIλ λΈλΌμ°μ κ° κ°μ Έμ€λ κ° λ¦¬μμ€μ νμ΄λ°μ λν μμΈν ν΅μ°°λ ₯μ μ 곡ν©λλ€. μ΄ μ 보λ λ³λͺ© νμμ μλ³νκ³ μ λ°μ μΈ λ‘λ μ±λ₯μ κ°μ νλ λ° λ§€μ° μ€μν©λλ€. μ΄ μ’ ν© κ°μ΄λμμλ Resource Timing APIλ₯Ό νμ©νκ³ , λ°μ΄ν°λ₯Ό μ§κ³νλ©°, μ΄λ₯Ό λ‘λ μ±λ₯ λΆμμ μ¬μ©νλ λ°©λ²μ νꡬν©λλ€.
Resource Timing API μ΄ν΄νκΈ°
Resource Timing APIλ μΉ νμ΄μ§μμ λ‘λλλ μ΄λ―Έμ§, μ€ν¬λ¦½νΈ, μ€νμΌμνΈ λ° κΈ°ν μμ°κ³Ό κ°μ 리μμ€μ λν μμΈν νμ΄λ° μ 보λ₯Ό μ 곡ν©λλ€. μ¬κΈ°μλ λ€μκ³Ό κ°μ μ§νκ° ν¬ν¨λ©λλ€:
- Initiator Type: μμ²μ μμν μμμ μ ν (μ: 'img', 'script', 'link').
- Name: 리μμ€μ URL.
- Start Time: λΈλΌμ°μ κ° λ¦¬μμ€ κ°μ Έμ€κΈ°λ₯Ό μμν λμ νμμ€ν¬ν.
- Fetch Start: λΈλΌμ°μ κ° λμ€ν¬ μΊμ λλ λ€νΈμν¬μμ 리μμ€λ₯Ό κ°μ Έμ€κΈ° μ§μ μ νμμ€ν¬ν.
- Domain Lookup Start/End: DNS μ‘°ν νλ‘μΈμ€κ° μμλκ³ λλλ μμ μ λνλ΄λ νμμ€ν¬ν.
- Connect Start/End: μλ²μ λν TCP μ°κ²°μ΄ μμλκ³ λλλ μμ μ λνλ΄λ νμμ€ν¬ν.
- Request Start/End: HTTP μμ²μ΄ μμλκ³ λλλ μμ μ λνλ΄λ νμμ€ν¬ν.
- Response Start/End: HTTP μλ΅μ΄ μμλκ³ λλλ μμ μ λνλ΄λ νμμ€ν¬ν.
- Transfer Size: μ μ‘λ 리μμ€μ ν¬κΈ° (λ°μ΄νΈ λ¨μ).
- Encoded Body Size: μΈμ½λ©λ (μ: GZIP μμΆ) 리μμ€ λ³Έλ¬Έμ ν¬κΈ°.
- Decoded Body Size: λμ½λ©λ 리μμ€ λ³Έλ¬Έμ ν¬κΈ°.
- Duration: 리μμ€λ₯Ό κ°μ Έμ€λ λ° μμλ μ΄ μκ° (responseEnd - startTime).
μ΄λ¬ν μ§νλ₯Ό ν΅ν΄ κ°λ°μλ μ±λ₯ κ°μ μ΄ κ°λ₯ν νΉμ μμμ μ νν μ°ΎμλΌ μ μμ΅λλ€. μλ₯Ό λ€μ΄, κΈ΄ DNS μ‘°ν μκ°μ λ λΉ λ₯Έ DNS μ 곡μ μ²΄λ‘ μ ννκ±°λ CDNμ νμ©ν΄μΌ ν¨μ μμ¬ν μ μμ΅λλ€. λλ¦° μ°κ²° μκ°μ λ€νΈμν¬ νΌμ‘μ΄λ μλ² μΈ‘ λ¬Έμ λ₯Ό λνλΌ μ μμ΅λλ€. ν° μ μ‘ ν¬κΈ°λ μ΄λ―Έμ§ μ΅μ νλ μ½λ μΆμμ κΈ°νλ₯Ό 보μ¬μ€ μ μμ΅λλ€.
리μμ€ νμ΄λ° λ°μ΄ν° μ κ·ΌνκΈ°
Resource Timing APIλ μλ°μ€ν¬λ¦½νΈμ performance
κ°μ²΄λ₯Ό ν΅ν΄ μ κ·Όν©λλ€:
const resourceTimingEntries = performance.getEntriesByType("resource");
resourceTimingEntries.forEach(entry => {
console.log(entry.name, entry.duration);
});
μ΄ μ½λ μ€λν«μ λͺ¨λ 리μμ€ νμ΄λ° νλͺ©μ κ²μνκ³ κ° λ¦¬μμ€μ μ΄λ¦κ³Ό μ§μ μκ°μ μ½μμ κΈ°λ‘ν©λλ€. 보μμμ μ΄μ λ‘ λΈλΌμ°μ λ Resource Timing APIκ° μ 곡νλ μΈλΆ μ 보 μμ€μ μ νν μ μμ΅λλ€. μ΄λ μ’
μ’
timingAllowOrigin
ν€λμ μν΄ μ μ΄λλ©°, μ΄ ν€λλ κ΅μ°¨ μΆμ² 리μμ€κ° νμ΄λ° μ 보λ₯Ό λ
ΈμΆνλλ‘ νμ©ν©λλ€.
리μμ€ νμ΄λ° λ°μ΄ν° μ§κ³νκΈ°
μλ³Έ 리μμ€ νμ΄λ° λ°μ΄ν°λ μ μ©νμ§λ§, μ€ν κ°λ₯ν ν΅μ°°λ ₯μ μ»μΌλ €λ©΄ μ§κ³νκ³ λΆμν΄μΌ ν©λλ€. μ§κ³λ λ°μ΄ν°λ₯Ό κ·Έλ£Ήννκ³ μμ½νμ¬ μΆμΈμ ν¨ν΄μ μλ³νλ κ³Όμ μ ν¬ν¨ν©λλ€. μ΄λ μ¬λ¬ κ°μ§ λ°©λ²μΌλ‘ μνν μ μμ΅λλ€:
리μμ€ μ νλ³
리μμ€λ₯Ό μ ν(μ: μ΄λ―Έμ§, μ€ν¬λ¦½νΈ, μ€νμΌμνΈ)λ³λ‘ κ·Έλ£Ήννλ©΄ κ° μΉ΄ν κ³ λ¦¬μ νκ· λ‘λ μκ°μ λΉκ΅ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νΉμ μ νμ 리μμ€κ° λ€λ₯Έ 리μμ€λ³΄λ€ μ§μμ μΌλ‘ λλ¦°μ§ μ¬λΆλ₯Ό νμ ν μ μμ΅λλ€.
const resourceTypes = {};
resourceTimingEntries.forEach(entry => {
const initiatorType = entry.initiatorType;
if (!resourceTypes[initiatorType]) {
resourceTypes[initiatorType] = {
count: 0,
totalDuration: 0,
averageDuration: 0
};
}
resourceTypes[initiatorType].count++;
resourceTypes[initiatorType].totalDuration += entry.duration;
});
for (const type in resourceTypes) {
resourceTypes[type].averageDuration = resourceTypes[type].totalDuration / resourceTypes[type].count;
console.log(type, resourceTypes[type].averageDuration);
}
μ΄ μ½λλ κ° λ¦¬μμ€ μ νμ νκ· λ‘λ μκ°μ κ³μ°νμ¬ μ½μμ κΈ°λ‘ν©λλ€. μλ₯Ό λ€μ΄, μ΄λ―Έμ§μ νκ· λ‘λ μκ°μ΄ μ€ν¬λ¦½νΈλ³΄λ€ νμ ν λλ€λ κ²μ λ°κ²¬νλ©΄ μ΄λ―Έμ§ μ΅μ νκ° νμν¨μ λνλΌ μ μμ΅λλ€.
λλ©μΈλ³
리μμ€λ₯Ό λλ©μΈλ³λ‘ κ·Έλ£Ήννλ©΄ λ€μν μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN) λλ νμ¬ μλΉμ€μ μ±λ₯μ νκ°ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ±λ₯μ΄ λλ¦° λλ©μΈμ μλ³νκ³ λ체 곡κΈμλ₯Ό κ³ λ €νλ λ° λμμ΄ λ μ μμ΅λλ€.
const resourceDomains = {};
resourceTimingEntries.forEach(entry => {
const domain = new URL(entry.name).hostname;
if (!resourceDomains[domain]) {
resourceDomains[domain] = {
count: 0,
totalDuration: 0,
averageDuration: 0
};
}
resourceDomains[domain].count++;
resourceDomains[domain].totalDuration += entry.duration;
});
for (const domain in resourceDomains) {
resourceDomains[domain].averageDuration = resourceDomains[domain].totalDuration / resourceDomains[domain].count;
console.log(domain, resourceDomains[domain].averageDuration);
}
μ΄ μ½λλ κ° λλ©μΈμ νκ· λ‘λ μκ°μ κ³μ°νμ¬ μ½μμ κΈ°λ‘ν©λλ€. νΉμ CDNμ΄ μ§μμ μΌλ‘ λ리λ€λ κ²μ λ°κ²¬νλ©΄ ν΄λΉ μ±λ₯μ μ‘°μ¬νκ±°λ λ€λ₯Έ 곡κΈμλ‘ μ ννλ κ²μ κ³ λ €ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, Cloudflareμ Akamaiλ₯Ό λͺ¨λ μ¬μ©νλ μλ리μ€λ₯Ό μκ°ν΄λ³΄μΈμ. μ΄ μ§κ³λ₯Ό ν΅ν΄ νΉμ 컨ν μ€νΈμμ λ μλΉμ€μ μ±λ₯μ μ§μ λΉκ΅ν μ μμ΅λλ€.
νμ΄μ§λ³
νμ΄μ§(λλ λΌμ°νΈ)λ³λ‘ λ°μ΄ν°λ₯Ό μ§κ³νλ©΄ μ±λ₯μ΄ νΉν μ μ‘°ν νμ΄μ§λ₯Ό μλ³ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ΅μ ν λ Έλ ₯μ μ°μ μμλ₯Ό μ νκ³ μ¬μ©μ κ²½νμ κ°μ₯ ν° μν₯μ λ―ΈμΉλ νμ΄μ§μ μ§μ€ν μ μμ΅λλ€.
μ΄λ μ’ μ’ μ ν리μΌμ΄μ μ λΌμ°ν μμ€ν κ³Όμ ν΅ν©μ΄ νμν©λλ€. κ° λ¦¬μμ€ νμ΄λ° νλͺ©μ νμ¬ νμ΄μ§ URL λλ λΌμ°νΈμ μ°κ΄μμΌμΌ ν©λλ€. ꡬνμ μ¬μ© μ€μΈ νλ μμν¬(μ: React, Angular, Vue.js)μ λ°λΌ λ¬λΌμ§λλ€.
μ¬μ©μ μ§μ μ§ν μμ±νκΈ°
Resource Timing APIμμ μ 곡νλ νμ€ μ§ν μΈμλ, μ ν리μΌμ΄μ μ±λ₯μ νΉμ μΈ‘λ©΄μ μΆμ νκΈ° μν μ¬μ©μ μ§μ μ§νλ₯Ό μμ±ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, νΉμ μ»΄ν¬λνΈλ₯Ό λ‘λνκ±°λ νΉμ μμλ₯Ό λ λλ§νλ λ° κ±Έλ¦¬λ μκ°μ μΈ‘μ νκ³ μΆμ μ μμ΅λλ€.
μ΄λ performance.mark()
λ° performance.measure()
λ©μλλ₯Ό μ¬μ©νμ¬ λ¬μ±ν μ μμ΅λλ€:
performance.mark('component-start');
// Load the component
performance.mark('component-end');
performance.measure('component-load', 'component-start', 'component-end');
const componentLoadTime = performance.getEntriesByName('component-load')[0].duration;
console.log('Component load time:', componentLoadTime);
μ΄ μ½λ μ€λν«μ μ»΄ν¬λνΈλ₯Ό λ‘λνλ λ° κ±Έλ¦¬λ μκ°μ μΈ‘μ νμ¬ μ½μμ κΈ°λ‘ν©λλ€. κ·Έλ° λ€μ νμ€ Resource Timing API μ§νμ λμΌν λ°©μμΌλ‘ μ΄λ¬ν μ¬μ©μ μ§μ μ§νλ₯Ό μ§κ³ν μ μμ΅λλ€.
μ±λ₯ ν΅μ°°λ ₯μ μν 리μμ€ νμ΄λ° λ°μ΄ν° λΆμ
리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μ§κ³ν νμλ μ΄λ₯Ό μ¬μ©νμ¬ μ±λ₯ κ°μ μ μν νΉμ μμμ μλ³ν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ μλ리μ€μ μ μ¬μ μΈ ν΄κ²°μ± μ λλ€:
κΈ΄ DNS μ‘°ν μκ°
- μμΈ: λλ¦° DNS μλ², μ거리μ μλ DNS μλ², λλ¬Έ DNS μ‘°ν.
- ν΄κ²°μ± : λ λΉ λ₯Έ DNS μ 곡μ 체(μ: Cloudflare, Google Public DNS)λ‘ μ ν, CDNμ νμ©νμ¬ DNS λ μ½λλ₯Ό μ¬μ©μμ λ κ°κΉμ΄ κ³³μ μΊμ, DNS ν리νμΉ κ΅¬ν.
- μμ: μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ νλ μΉμ¬μ΄νΈκ° νΉμ μ§μμμ λλ¦° λ‘λ μκ°μ κ²½ννμ΅λλ€. 리μμ€ νμ΄λ° λ°μ΄ν° λΆμ κ²°κ³Ό ν΄λΉ μ§μμμ κΈ΄ DNS μ‘°ν μκ°μ΄ λ°νμ‘μ΅λλ€. κΈλ‘λ² DNS μλ²λ₯Ό κ°μΆ CDNμΌλ‘ μ ννμ DNS μ‘°ν μκ°μ΄ ν¬κ² λ¨μΆλκ³ μ λ°μ μΈ μ±λ₯μ΄ ν₯μλμμ΅λλ€.
λλ¦° μ°κ²° μκ°
- μμΈ: λ€νΈμν¬ νΌμ‘, μλ² μΈ‘ λ¬Έμ , λ°©νλ²½ κ°μ.
- ν΄κ²°μ± : μλ² μΈνλΌ μ΅μ ν, CDNμ μ¬μ©νμ¬ μ½ν μΈ λ₯Ό μ¬μ©μμ λ κ°κΉμ΄ κ³³μ λ°°ν¬, ν¨μ¨μ μΈ ν΅μ μ νμ©νλλ‘ λ°©νλ²½ ꡬμ±.
- μμ: ν μ μμκ±°λ μΉμ¬μ΄νΈκ° μΌν νΌν¬ μκ°λμ λλ¦° μ°κ²° μκ°μ κ²½ννμ΅λλ€. 리μμ€ νμ΄λ° λ°μ΄ν° λΆμ κ²°κ³Ό μλ² κ³ΌλΆνκ° μ£Όλ μμΈμΌλ‘ μ§λͺ©λμμ΅λλ€. μλ² νλμ¨μ΄λ₯Ό μ κ·Έλ μ΄λνκ³ λ°μ΄ν°λ² μ΄μ€ 쿼리λ₯Ό μ΅μ ννμ μ°κ²° μκ°μ΄ κ°μ λκ³ νΌν¬ νΈλν½ μ€ μ±λ₯ μ νλ₯Ό λ°©μ§ν μ μμμ΅λλ€.
ν° μ μ‘ ν¬κΈ°
- μμΈ: μ΅μ νλμ§ μμ μ΄λ―Έμ§, μΆμλμ§ μμ μ½λ, λΆνμν μμ°.
- ν΄κ²°μ± : μ΄λ―Έμ§ μ΅μ ν(μ: μμΆ, ν¬κΈ° μ‘°μ , WebPμ κ°μ μ΅μ νμ μ¬μ©), μλ°μ€ν¬λ¦½νΈ λ° CSS μ½λ μΆμ, μ¬μ©νμ§ μλ μ½λ λ° μμ° μ κ±°, GZIP λλ Brotli μμΆ νμ±ν.
- μμ: ν λ΄μ€ μΉμ¬μ΄νΈκ° ν¬κ³ μ΅μ νλμ§ μμ μ΄λ―Έμ§λ₯Ό μ¬μ©νμ¬ νμ΄μ§ λ‘λ μκ°μ ν¬κ² μ¦κ°μμΌ°μ΅λλ€. ImageOptimκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό μ΅μ ννκ³ μ§μ° λ‘λ©μ ꡬννμ μ΄λ―Έμ§ μ μ‘ ν¬κΈ°κ° μ€μ΄λ€κ³ νμ΄μ§ λ‘λ μ±λ₯μ΄ ν₯μλμμ΅λλ€.
- κ΅μ ν κ³ λ €μ¬ν: μ΄λ―Έμ§ μ΅μ ν μ λ€μν μ§μμμ μΌλ°μ μΈ μ¬λ¬ νλ©΄ ν¬κΈ°μ ν΄μλλ₯Ό κ³ λ €ν΄μΌ ν©λλ€.
λλ¦° μλ² μλ΅ μκ°
- μμΈ: λΉν¨μ¨μ μΈ μλ² μΈ‘ μ½λ, λ°μ΄ν°λ² μ΄μ€ λ³λͺ© νμ, λ€νΈμν¬ μ§μ°.
- ν΄κ²°μ± : μλ² μΈ‘ μ½λ μ΅μ ν, λ°μ΄ν°λ² μ΄μ€ μ±λ₯ κ°μ , CDNμ μ¬μ©νμ¬ μ½ν μΈ λ₯Ό μ¬μ©μμ λ κ°κΉμ΄ κ³³μ μΊμ, HTTP μΊμ± ꡬν.
- μμ: ν μμ λ―Έλμ΄ νλ«νΌμ΄ λΉν¨μ¨μ μΈ λ°μ΄ν°λ² μ΄μ€ μΏΌλ¦¬λ‘ μΈν΄ λλ¦° μλ² μλ΅ μκ°μ κ²½ννμ΅λλ€. λ°μ΄ν°λ² μ΄μ€ 쿼리λ₯Ό μ΅μ ννκ³ μΊμ± λ©μ»€λμ¦μ ꡬννμ μλ² μλ΅ μκ°μ΄ ν¬κ² λ¨μΆλκ³ μ λ°μ μΈ μ±λ₯μ΄ ν₯μλμμ΅λλ€.
λ λλ§ μ°¨λ¨ λ¦¬μμ€
- μμΈ: νμ΄μ§ λ λλ§μ μ°¨λ¨νλ λκΈ°μ μλ°μ€ν¬λ¦½νΈ λ° CSS.
- ν΄κ²°μ± : μ€μνμ§ μμ μλ°μ€ν¬λ¦½νΈ λ‘λ© μ§μ°, μ€μν CSS μΈλΌμΈ μ²λ¦¬, μ€ν¬λ¦½νΈμ λΉλκΈ° λ‘λ© μ¬μ©, μ¬μ©νμ§ μλ CSS μ κ±°.
- μμ: ν λΈλ‘κ·Έ μΉμ¬μ΄νΈκ° ν¬κ³ λ λλ§μ μ°¨λ¨νλ CSS νμΌμ μ¬μ©νμ¬ νμ΄μ§μ μ΄κΈ° λ λλ§μ μ§μ°μμΌ°μ΅λλ€. μ€μν CSSλ₯Ό μΈλΌμΈμΌλ‘ μ²λ¦¬νκ³ μ€μνμ§ μμ CSS λ‘λ©μ μ§μ°μν€μ μΉμ¬μ΄νΈμ μ²΄κ° μ±λ₯μ΄ ν₯μλμμ΅λλ€.
μ±λ₯ λͺ¨λν°λ§ λꡬμ 리μμ€ νμ΄λ° λ°μ΄ν° ν΅ν©νκΈ°
리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μλμΌλ‘ μμ§νκ³ λΆμνλ κ²μ μκ°μ΄ λ§μ΄ μμλ μ μμ΅λλ€. λ€ννλ, μ¬λ¬ μ±λ₯ λͺ¨λν°λ§ λκ΅¬κ° μ΄ νλ‘μΈμ€λ₯Ό μλννκ³ μΉμ¬μ΄νΈ μ±λ₯μ λν μ€μκ° ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€. μ΄λ¬ν λꡬλ μΌλ°μ μΌλ‘ λ°±κ·ΈλΌμ΄λμμ 리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μμ§νμ¬ μ¬μ©μ μΉνμ μΈ λμ보λμ νμν©λλ€.
리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μ§μνλ μΈκΈ° μλ μ±λ₯ λͺ¨λν°λ§ λꡬλ λ€μκ³Ό κ°μ΅λλ€:
- Google PageSpeed Insights: 리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό ν¬ν¨ν λ€μν μ±λ₯ μ§νλ₯Ό κΈ°λ°μΌλ‘ νμ΄μ§ μλ κ°μ μ μν κΆμ₯ μ¬νμ μ 곡ν©λλ€.
- WebPageTest: λ€μν μμΉμ λΈλΌμ°μ μμ μΉμ¬μ΄νΈμ μ±λ₯μ ν μ€νΈν μ μμΌλ©°, μμΈν 리μμ€ νμ΄λ° μ 보λ₯Ό μ 곡ν©λλ€.
- New Relic: μ€μκ° λ¦¬μμ€ νμ΄λ° λ°μ΄ν° λ° μκ°νλ₯Ό ν¬ν¨ν ν¬κ΄μ μΈ μ±λ₯ λͺ¨λν°λ§ κΈ°λ₯μ μ 곡ν©λλ€.
- Datadog: κ΄λ²μν μΈνλΌ λ° μ ν리μΌμ΄μ λͺ¨λν°λ§κ³Ό ν¨κ» μμΈν 리μμ€ νμ΄λ° μ§νλ₯Ό μ 곡νμ¬ μ±λ₯μ λν μ 체μ μΈ μκ°μ μ 곡ν©λλ€.
- Sentry: μ£Όλ‘ μ€λ₯ μΆμ μ μ€μ μ λμ§λ§, νΉμ μ€λ₯μ μ±λ₯ λ¬Έμ λ₯Ό μ°κ΄μν€κΈ° μν 리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό ν¬ν¨ν μ±λ₯ λͺ¨λν°λ§ κΈ°λ₯λ μ 곡ν©λλ€.
- Lighthouse: μΉ νμ΄μ§μ νμ§μ κ°μ νκΈ° μν μ€ν μμ€ μλν λꡬμ λλ€. μ±λ₯, μ κ·Όμ±, νλ‘κ·Έλ μλΈ μΉ μ±, SEO λ±μ λν κ°μ¬λ₯Ό μ 곡ν©λλ€. Chrome DevTools, λͺ λ Ήμ€ λλ Node λͺ¨λλ‘ μ€νν μ μμ΅λλ€.
μ΄λ¬ν λꡬμ 리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό ν΅ν©ν¨μΌλ‘μ¨ μΉμ¬μ΄νΈ μ±λ₯μ λν λ κΉμ μ΄ν΄λ₯Ό μ»κ³ κ°μ μμμ λ ν¨κ³Όμ μΌλ‘ μλ³ν μ μμ΅λλ€.
μ€λ¦¬μ κ³ λ €μ¬ν λ° μ¬μ©μ κ°μΈμ 보 보νΈ
리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μμ§νκ³ λΆμν λλ μ€λ¦¬μ μν₯κ³Ό μ¬μ©μ κ°μΈμ 보 보νΈλ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μμ§νλ λ°μ΄ν°μ κ·Έ μ¬μ© λ°©λ²μ λν΄ μ¬μ©μμκ² ν¬λͺ νκ² κ³΅κ°νμΈμ. GDPR λ° CCPAμ κ°μ κ΄λ ¨ κ°μΈμ 보 λ³΄νΈ κ·μ μ μ€μν΄μΌ ν©λλ€.
κ°μΈ μλ³ μ 보(PII) μμ§μ νΌνκ³ κ°λ₯ν κ²½μ° λ°μ΄ν°λ₯Ό μ΅λͺ ννκ±°λ κ°λͺ μ²λ¦¬νμΈμ. λ¬΄λ¨ μ κ·Όμ΄λ 곡κ°λ‘λΆν° λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ μ μ ν 보μ μ‘°μΉλ₯Ό ꡬννμΈμ. μ¬μ©μμκ² μ±λ₯ λͺ¨λν°λ§μ κ±°λΆν μ μλ μ΅μ μ μ 곡νλ κ²μ κ³ λ €νμΈμ.
κ³ κΈ κΈ°μ λ° λ―Έλ λν₯
Resource Timing APIλ μ§μμ μΌλ‘ λ°μ νκ³ μμΌλ©°, νλ°νΈμλ μ±λ₯ λΆμμ λμ± ν₯μμν€κΈ° μν μλ‘μ΄ κΈ°λ₯κ³Ό κΈ°μ μ΄ λ±μ₯νκ³ μμ΅λλ€. μ£Όλͺ©ν΄μΌ ν λͺ κ°μ§ κ³ κΈ κΈ°μ κ³Ό λ―Έλ λν₯μ λ€μκ³Ό κ°μ΅λλ€:
Server Timing API
Server Timing APIλ₯Ό μ¬μ©νλ©΄ μλ²κ° μμ²μ λν μ²λ¦¬ μκ°μ λν νμ΄λ° μ 보λ₯Ό λ ΈμΆν μ μμ΅λλ€. μ΄ μ 보λ 리μμ€ νμ΄λ° λ°μ΄ν°μ κ²°ν©νμ¬ μλν¬μλ μ±λ₯μ λν λ μμ ν κ·Έλ¦Όμ μ 곡ν μ μμ΅λλ€.
Long Tasks API
Long Tasks APIλ μ₯μκ° λμ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ¬ UI λ²λ² κ±°λ¦Όκ³Ό λ°μμ± λ¬Έμ λ₯Ό μΌμΌν€λ μμ μ μλ³ν©λλ€. μ΄ μ 보λ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ΅μ ννκ³ μ¬μ©μ κ²½νμ κ°μ νλ λ° μ¬μ©λ μ μμ΅λλ€.
WebAssembly (Wasm)
WebAssemblyλ κ°μ λ¨Έμ μ μν μ΄μ§ λͺ λ Ήμ΄ νμμΌλ‘, λΈλΌμ°μ μμ λ€μ΄ν°λΈμ κ°κΉμ΄ μ±λ₯μ κ°λ₯νκ² ν©λλ€. μ±λ₯μ΄ μ€μν μμ μ Wasmμ μ¬μ©νλ©΄ λ‘λ μκ°κ³Ό μ λ°μ μΈ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
HTTP/3
HTTP/3λ QUIC μ μ‘ νλ‘ν μ½μ μ¬μ©νμ¬ μ±λ₯κ³Ό μμ μ±μ ν₯μμν¨ HTTP νλ‘ν μ½μ μ΅μ λ²μ μ λλ€. HTTP/3λ μ§μ° μκ° κ°μ λ° μ°κ²° κ΄λ¦¬ κ°μ λ± HTTP/2μ λΉν΄ μ¬λ¬ κ°μ§ μ΄μ μ μ 곡ν©λλ€.
κ²°λ‘
Resource Timing APIλ νλ°νΈμλ μ±λ₯μ μ΄ν΄νκ³ μ΅μ ννλ λ° κ°λ ₯ν λꡬμ λλ€. 리μμ€ νμ΄λ° λ°μ΄ν°λ₯Ό μ§κ³νκ³ λΆμν¨μΌλ‘μ¨ λ³λͺ© νμμ μλ³νκ³ , λ‘λ μκ°μ κ°μ νλ©°, λ λμ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. μλ ¨λ νλ°νΈμλ κ°λ°μμ΄λ μ΄μ λ§ μμνλ μ¬λμ΄λ , Resource Timing APIλ₯Ό λ§μ€ν°νλ κ²μ κ³ μ±λ₯ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° νμμ μ λλ€. λ°μ΄ν° κΈ°λ° μ΅μ νμ νμ λ°μλ€μ¬ μΉμ¬μ΄νΈλ μ ν리μΌμ΄μ μ μ μ¬λ ₯μ μ΅λν λ°ννμΈμ. μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νκ³ λΆμν λλ μ¬μ©μ κ°μΈμ 보 보νΈμ μ€λ¦¬μ κ³ λ €μ¬νμ μ°μ μνλ κ²μ μμ§ λ§μΈμ. μ΅μ λν₯κ³Ό κΈ°μ μ λν μ 보λ₯Ό μ§μμ μΌλ‘ νμΈν¨μΌλ‘μ¨ μΉμ¬μ΄νΈκ° μμΌλ‘λ λΉ λ₯΄κ³ λ°μμ±μ΄ λ°μ΄λλ©° μ¬μ©μ μΉνμ μΌλ‘ μ μ§λλλ‘ ν μ μμ΅λλ€. μ΄λ¬ν κΈ°μ κ³Ό λꡬλ₯Ό νμ©νλ κ²μ λ μ±λ₯μ΄ μ’κ³ μ μΈκ³μ μΌλ‘ μ κ·Ό κ°λ₯ν μΉμ κΈ°μ¬ν κ²μ λλ€.
μ€ν κ°λ₯ν ν΅μ°°λ ₯: λ¨Όμ 리μμ€ μ ν λ° λλ©μΈλ³λ‘ κΈ°λ³Έμ μΈ λ¦¬μμ€ νμ΄λ° μ§κ³λ₯Ό ꡬννμ¬ μμνμΈμ. μ΄λ₯Ό ν΅ν΄ μ±λ₯ λ³λͺ© νμμ΄ μ΄λμ μλμ§ μ¦κ°μ μΈ ν΅μ°°λ ₯μ μ»μ μ μμ΅λλ€. κ·Έλ° λ€μ Google PageSpeed Insightsλ WebPageTestμ κ°μ μ±λ₯ λͺ¨λν°λ§ λꡬμ ν΅ν©νμ¬ λ°μ΄ν° μμ§ λ° λΆμμ μλννμΈμ.