React experimental_TracingMarker APIλ₯Ό νμνμ¬ μ¬μΈ΅μ μΈ μ±λ₯ λΆμμ μννμΈμ. λ°μ΄ν° κΈ°λ° ν΅μ°°λ ₯μΌλ‘ React μ ν리μΌμ΄μ μ μ±λ₯μ μ΄ν΄, μΈ‘μ λ° μ΅μ νν©λλ€.
React experimental_TracingMarker λΆμ μμ§: κΈλ‘λ² μ ν리μΌμ΄μ μ μν μ±λ₯ λ°μ΄ν° μΈν 리μ μ€
μ€λλ λΉ λ₯΄κ² λ³ννλ λμ§νΈ μΈμμμ μ¬μ©μ κ²½νμ κ°μ₯ μ€μν©λλ€. λ리거λ λ°μμ΄ μλ μ ν리μΌμ΄μ
μ μ¬μ©μμ λΆλ§κ³Ό λΉμ¦λμ€ μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€. Reactλ‘ κ΅¬μΆλ μ μΈκ³μ μΌλ‘ λΆμ°λ μ ν리μΌμ΄μ
μ κ²½μ°, μ±λ₯μ μ΄ν΄νκ³ μ΅μ ννλ κ²μ΄ λ§€μ° μ€μν©λλ€. Reactμ experimental_TracingMarker
APIλ μμΈν μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νλ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡νμ¬ κ°λ°μκ° λ³λͺ© νμμ μ νν μ°Ύμλ΄κ³ μ¬μ©μμ μμΉμ κ΄κ³μμ΄ μνν μ¬μ©μ κ²½νμ μ 곡ν μ μλλ‘ ν©λλ€.
experimental_TracingMarkerλ 무μμΈκ°?
React 18μ λμ
λ experimental_TracingMarker
APIλ React μ»΄ν¬λνΈμ μ±λ₯μ μΈ‘μ νκ³ λΆμνκΈ° μν΄ μ€κ³λ μ μμ€ APIμ
λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ μ½λμ νΉμ λΆλΆμ "μΆμ " μμμΌλ‘ μ μνμ¬ ν΄λΉ μμμ΄ μ€νλλ λ° κ±Έλ¦¬λ μκ°μ λν μ νν νμ΄λ° μ 보λ₯Ό μμ§ν μ μμ΅λλ€. μ΄ λ°μ΄ν°λ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ κ·Έμ λ°λΌ μ½λλ₯Ό μ΅μ ννλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄ APIλ μ€νμ μΈ κΈ°λ₯μ΄λ―λ‘ ν₯ν React λ²μ μμ λμμ΄λ μ¬μ© κ°λ₯ μ¬λΆκ° λ³κ²½λ μ μμ΅λλ€. νμ§λ§ μ΄λ React μ±λ₯ λΆμμ λ―Έλλ₯Ό μΏλ³Ό μ μκ² ν΄μ€λλ€.
experimental_TracingMarkerλ₯Ό μ¬μ©νλ μ΄μ
κΈ°μ‘΄μ μ±λ₯ λͺ¨λν°λ§ λꡬλ μ’
μ’
μ ν리μΌμ΄μ
μ±λ₯μ λν λμ μμ€μ κ°μλ₯Ό μ 곡νμ§λ§, React μ»΄ν¬λνΈ λ΄μ νΉμ λ¬Έμ λ₯Ό μλ³νλ λ° νμν μΈλΆνλ μ 보λ λΆμ‘±ν©λλ€. experimental_TracingMarker
λ λ€μμ μ 곡νμ¬ μ΄λ¬ν 격차λ₯Ό λ©μλλ€:
- μΈλΆνλ μ±λ₯ λ°μ΄ν°: νΉμ μ½λ λΈλ‘μ μ€ν μκ°μ μΈ‘μ νμ¬ μ±λ₯ λ³λͺ© νμμ μ ννκ² μλ³ν μ μμ΅λλ€.
- μ»΄ν¬λνΈ μμ€ λΆμ: κ°λ³ μ»΄ν¬λνΈκ° μ 체 μ ν리μΌμ΄μ μ±λ₯μ μ΄λ»κ² κΈ°μ¬νλμ§ μ΄ν΄ν μ μμ΅λλ€.
- λ°μ΄ν° κΈ°λ° μ΅μ ν: ꡬ체μ μΈ μ±λ₯ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ΅μ ν μ λ΅μ λν΄ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦΄ μ μμ΅λλ€.
- μ΄κΈ° μ±λ₯ λ¬Έμ κ°μ§: κ°λ° λ¨κ³μμ μ¬μ©μμκ² μν₯μ λ―ΈμΉκΈ° μ μ μ±λ₯ λ¬Έμ λ₯Ό μ¬μ μ μλ³νκ³ ν΄κ²°ν μ μμ΅λλ€.
- λ²€μΉλ§νΉ λ° νκ· ν μ€νΈ: μκ° κ²½κ³Όμ λ°λ₯Έ μ±λ₯ κ°μ μ μΆμ νκ³ μ±λ₯ μ νλ₯Ό λ°©μ§ν μ μμ΅λλ€.
experimental_TracingMarker ꡬν: μ€μ© κ°μ΄λ
λ€μμ React μ ν리μΌμ΄μ
μμ experimental_TracingMarker
λ₯Ό ꡬννκΈ° μν λ¨κ³λ³ κ°μ΄λμ
λλ€:
1. API κ°μ Έμ€κΈ°
λ¨Όμ , react
ν¨ν€μ§μμ experimental_TracingMarker
APIλ₯Ό κ°μ Έμ΅λλ€:
import { experimental_TracingMarker } from 'react';
2. μΆμ μμ μ μνκΈ°
μΈ‘μ νλ €λ μ½λ μΉμ
μ experimental_TracingMarker
μ»΄ν¬λνΈλ‘ κ°μλλ€. κ° experimental_TracingMarker
λ μμ§λ μ±λ₯ λ°μ΄ν°μμ μΆμ λ μμμ μλ³νλ λ° μ¬μ©λλ κ³ μ ν name
propμ΄ νμν©λλ€. μ νμ μΌλ‘ onIdentify
μ½λ°±μ μΆκ°νμ¬ λ°μ΄ν°λ₯Ό μΆμ λ§μ»€μ μ°κ²°ν μ μμ΅λλ€. λ€μκ³Ό κ°μ΄ μ ν리μΌμ΄μ
μ μ±λ₯μ λ―Όκ°ν λΆλΆμ κ°μΈλ κ²μ κ³ λ €ν΄ λ³΄μΈμ:
- 볡μ‘ν μ»΄ν¬λνΈ λ λλ§ λ‘μ§
- λ°μ΄ν° κ°μ Έμ€κΈ° μμ
- λΉμ©μ΄ λ§μ΄ λλ κ³μ°
- λκ·λͺ¨ λͺ©λ‘ λ λλ§
λ€μμ μμμ λλ€:
import { experimental_TracingMarker } from 'react';
function MyComponent() {
const data = useExpensiveCalculation();
return (
<experimental_TracingMarker name="ExpensiveCalculation" onIdentify={() => ({ calculationSize: data.length })}>
<div>{data.map(item => <div key={item.id}>{item.name}</div>)}</div>
</experimental_TracingMarker>
);
}
μ΄ μμμμλ ExpensiveCalculation
μμμ΄ μΆμ λ©λλ€. onIdentify
μ½λ°±μ κ³μ°λ λ°μ΄ν°μ ν¬κΈ°λ₯Ό μΊ‘μ²ν©λλ€. μ°Έκ³ : λ€λ₯Έ μ»΄ν¬λνΈλ₯Ό experimental_TracingMarker
λ‘ κ°μ μ μμ΅λλ€. μλ₯Ό λ€μ΄, λͺ©λ‘ νλͺ©μ ν¬ν¨νλ `<div>`λ₯Ό κ°μ μ μμ΅λλ€.
3. μ±λ₯ λ°μ΄ν° μμ§νκΈ°
experimental_TracingMarker
μ μν΄ μμ±λ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νλ €λ©΄ Reactμ μ±λ₯ μ΄λ²€νΈμ ꡬλ
ν΄μΌ ν©λλ€. Reactλ λ€μμ ν¬ν¨νμ¬ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νκΈ° μν μ¬λ¬ λ©μ»€λμ¦μ μ 곡ν©λλ€:
- React DevTools νλ‘νμΌλ¬: React DevTools νλ‘νμΌλ¬λ Reactκ° μμ§ν μ±λ₯ λ°μ΄ν°λ₯Ό λΆμνκΈ° μν μκ°μ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό κ²μ¬νκ³ , μ±λ₯ λ³λͺ© νμμ μλ³νλ©°, λ€μν μ½λ μΉμ μ μ€ν μκ°μ μκ°νν μ μμ΅λλ€. μ΄λ λ‘컬 κ°λ°μ λ§€μ° μ μ©ν©λλ€.
- PerformanceObserver API:
PerformanceObserver
APIλ₯Ό μ¬μ©νλ©΄ λΈλΌμ°μ μμ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§ν μ μμ΅λλ€. μ΄λ νλ‘λμ νκ²½μμ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νλ λ° μ μ©ν©λλ€. - μλνν° λΆμ λꡬ: μλνν° λΆμ λꡬμ ν΅ν©νμ¬ React μ ν리μΌμ΄μ μ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νκ³ λΆμν©λλ€. μ΄λ₯Ό ν΅ν΄ μ±λ₯ λ°μ΄ν°λ₯Ό λ€λ₯Έ μ ν리μΌμ΄μ λ©νΈλ¦κ³Ό μ°κ΄μμΌ μ ν리μΌμ΄μ μ±λ₯μ λν μ 체μ μΈ μκ°μ μ»μ μ μμ΅λλ€.
λ€μμ PerformanceObserver
APIλ₯Ό μ¬μ©νμ¬ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νλ μμμ
λλ€:
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
if (entry.entryType === 'measure') {
console.log(entry.name, entry.duration, entry.detail);
// Send the data to your analytics server
}
});
});
observer.observe({ entryTypes: ['measure'] });
PerformanceObserver
μ νΈνλλλ‘ μ¬μ©μ μ§μ μΈ‘μ μ μμ±νλ €λ©΄ performance.mark
μ performance.measure
λ₯Ό μ¬μ©ν΄μΌ ν©λλ€. μ΄κ²μ experimental_TracingMarker
μ ν¨κ» μ¬μ©λ μ μμ΅λλ€. μμΈν λ΄μ©μ μλλ₯Ό μ°Έμ‘°νμΈμ.
4. μ±λ₯ λ°μ΄ν° λΆμνκΈ°
μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νλ€λ©΄, μ΄λ₯Ό λΆμνμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ μ½λλ₯Ό μ΅μ νν΄μΌ ν©λλ€. React DevTools νλ‘νμΌλ¬λ λ€μμ ν¬ν¨νμ¬ μ±λ₯ λ°μ΄ν°λ₯Ό λΆμνκΈ° μν νλΆν κΈ°λ₯ μΈνΈλ₯Ό μ 곡ν©λλ€:
- νλ μ μ°¨νΈ: λ€μν μ½λ μΉμ μ μ€ν μκ°μ μκ°νν©λλ€.
- μ»΄ν¬λνΈ νμ΄λ°: λ λλ§μ κ°μ₯ μ€λ μκ°μ΄ 걸리λ μ»΄ν¬λνΈλ₯Ό μλ³ν©λλ€.
- μνΈμμ©: νΉμ μ¬μ©μ μνΈμμ©μ μ±λ₯μ λΆμν©λλ€.
- User Timing API:
experimental_TracingMarker
λ λ κ³ κΈ μ±λ₯ λΆμμ μν΄ User Timing API(performance.mark
λ°performance.measure
)μ ν¨κ» μ¬μ©ν μ μμ΅λλ€.performance.mark
λ₯Ό μ¬μ©νμ¬ μ½λμ νΉμ μ§μ μ νμνκ³performance.measure
λ₯Ό μ¬μ©νμ¬ ν΄λΉ μ§μ μ¬μ΄μ μκ°μ μΈ‘μ ν©λλ€.
μ±λ₯ λ°μ΄ν°λ₯Ό λΆμν¨μΌλ‘μ¨ μ½λμ λΉν¨μ¨μ μΈ λΆλΆμ μλ³νκ³ κ·Έμ λ°λΌ μ΅μ νν μ μμ΅λλ€.
κ³ κΈ μ¬μ©λ² λ° κ³ λ €μ¬ν
1. λμ νΈλ μ΄μ±
νκ²½ λ³μλ κΈ°λ₯ νλκ·Έμ λ°λΌ νΈλ μ΄μ±μ λμ μΌλ‘ νμ±ννκ±°λ λΉνμ±νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ° νκ²½μ μ±λ₯μ μν₯μ μ£Όμ§ μκ³ νλ‘λμ νκ²½μμ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§ν μ μμ΅λλ€.
const isTracingEnabled = process.env.NODE_ENV === 'production';
function MyComponent() {
// ...
return (
<>{
isTracingEnabled && (
<experimental_TracingMarker name="ExpensiveCalculation">
<div>{data.map(item => <div key={item.id}>{item.name}</div>)}</div>
</experimental_TracingMarker>
)
}</>
);
}
2. User Timing APIμμ ν΅ν©
νΈλ μ΄μ±μ λν λ μΈλ°ν μ μ΄λ₯Ό μν΄ experimental_TracingMarker
λ₯Ό User Timing API(performance.mark
λ° performance.measure
)μ ν΅ν©ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μ μ§μ μ±λ₯ λ©νΈλ¦μ μ μνκ³ μκ° κ²½κ³Όμ λ°λΌ μΆμ ν μ μμ΅λλ€.
import { experimental_TracingMarker } from 'react';
function MyComponent() {
performance.mark('startCalculation');
const data = useExpensiveCalculation();
performance.mark('endCalculation');
performance.measure('ExpensiveCalculation', 'startCalculation', 'endCalculation');
return (
<experimental_TracingMarker name="RenderList">
<div>{data.map(item => <div key={item.id}>{item.name}</div>)}</div>
</experimental_TracingMarker>
);
}
μ΄ μμμμλ performance.mark
λ₯Ό μ¬μ©νμ¬ λΉμ©μ΄ λ§μ΄ λλ κ³μ°μ μμκ³Ό λμ νμνκ³ performance.measure
λ₯Ό μ¬μ©νμ¬ ν΄λΉ μ§μ μ¬μ΄μ μκ°μ μΈ‘μ ν©λλ€. experimental_TracingMarker
λ λͺ©λ‘μ λ λλ§μ μΈ‘μ νλ λ° μ¬μ©λ©λλ€.
3. μ€λ₯ μ²λ¦¬
νΈλ μ΄μ± μ€μ λ°μν μ μλ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν΄ νΈλ μ΄μ± μ½λλ₯Ό try-catch λΈλ‘μΌλ‘ κ°μλλ€. μ΄λ κ² νλ©΄ μ€λ₯λ‘ μΈν΄ μ ν리μΌμ΄μ μ΄ μ€λ¨λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
import { experimental_TracingMarker } from 'react';
function MyComponent() {
try {
const data = useExpensiveCalculation();
return (
<experimental_TracingMarker name="ExpensiveCalculation">
<div>{data.map(item => <div key={item.id}>{item.name}</div>)}</div>
</experimental_TracingMarker>
);
} catch (error) {
console.error('Error during tracing:', error);
return <div>Error</div>;
}
}
4. κΈλ‘λ² κ΄μ κ³Ό μ§λ¦¬μ μμΉ
κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ μ ν리μΌμ΄μ μ μ΅μ νν λ, λ€νΈμν¬ μ§μ° μκ°κ³Ό μ§λ¦¬μ κ±°λ¦¬κ° μ±λ₯μ λ―ΈμΉλ μν₯μ κ³ λ €ν΄μΌ ν©λλ€. μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)μ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ μ μμ°μ μ¬μ©μμκ² λ κ°κΉμ΄ κ³³μ μΊμνμΈμ. λΆμμ μ§λ¦¬μ μμΉ μ 보λ₯Ό ν΅ν©νμ¬ μ§μλ³λ‘ μ±λ₯μ΄ μ΄λ»κ² λ€λ₯Έμ§ μ΄ν΄νμΈμ. μλ₯Ό λ€μ΄, ipinfo.ioμ κ°μ μλΉμ€λ₯Ό μ¬μ©νμ¬ μ¬μ©μμ IP μ£Όμλ₯Ό κΈ°λ°μΌλ‘ μμΉλ₯Ό νμ ν λ€μ μ΄ λ°μ΄ν°λ₯Ό μ±λ₯ λ©νΈλ¦κ³Ό μ°κ΄μν¬ μ μμ΅λλ€. μμΉ λ°μ΄ν°λ₯Ό μμ§ν λλ GDPRκ³Ό κ°μ κ°μΈ μ 보 λ³΄νΈ κ·μ μ μ μν΄μΌ ν©λλ€.
5. A/B ν μ€νΈμ μ±λ₯
μλ‘μ΄ κΈ°λ₯μ΄λ μ΅μ νλ₯Ό λμ ν λ A/B ν μ€νΈλ₯Ό μ¬μ©νμ¬ μ±λ₯μ λ―ΈμΉλ μν₯μ μΈ‘μ νμΈμ. λμ‘°κ΅°κ³Ό μ€νκ΅° λͺ¨λμ λν΄ νμ΄μ§ λ‘λ μκ°, μνΈμμ©κΉμ§μ μκ°, λ λλ§ μκ°κ³Ό κ°μ μ£Όμ μ±λ₯ λ©νΈλ¦μ μΆμ νμΈμ. μ΄κ²μ λ³κ²½ μ¬νμ΄ μ€μ λ‘ μ±λ₯μ κ°μ νκ³ νκ·λ₯Ό μ λ°νμ§ μλμ§ νμΈνλ λ° λμμ΄ λ©λλ€. Google Optimize λ° Optimizelyμ κ°μ λꡬλ₯Ό A/B ν μ€νΈμ μ¬μ©ν μ μμ΅λλ€.
6. μ€μ μ¬μ©μ νλ¦ λͺ¨λν°λ§
μ ν리μΌμ΄μ
μ μ€μ μ¬μ©μ νλ¦(μ: λ‘κ·ΈμΈ, κ²°μ , κ²μ)μ μλ³νκ³ ν΄λΉ νλ¦μ μ±λ₯ μ΅μ νμ μ§μ€νμΈμ. experimental_TracingMarker
λ₯Ό μ¬μ©νμ¬ μ΄λ¬ν νλ¦μ κ΄λ ¨λ μ£Όμ μ»΄ν¬λνΈμ μ±λ₯μ μΈ‘μ νμΈμ. λμ보λμ μλ¦Όμ μμ±νμ¬ μ΄λ¬ν νλ¦μ μ±λ₯μ λͺ¨λν°λ§νκ³ λ¬Έμ λ₯Ό μ¬μ μ μλ³νμΈμ.
κΈλ‘λ² μμ
λ€μμ experimental_TracingMarker
λ₯Ό μ¬μ©νμ¬ κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ React μ ν리μΌμ΄μ
μ μ΅μ ννλ λͺ κ°μ§ μμμ
λλ€:
- μ μμκ±°λ μΉμ¬μ΄νΈ: μν λͺ©λ‘ νμ΄μ§μ λ λλ§μ μΆμ νμ¬ νμ΄μ§ λ‘λ μκ°μ λ¦μΆλ μ»΄ν¬λνΈλ₯Ό μλ³ν©λλ€. λ€λ₯Έ μ§μμ μ¬μ©μλ₯Ό μν΄ μ΄λ―Έμ§ λ‘λ© λ° λ°μ΄ν° κ°μ Έμ€κΈ°λ₯Ό μ΅μ ννμ¬ μ±λ₯μ κ°μ ν©λλ€. CDNμ μ¬μ©νμ¬ μ¬μ©μμ μμΉμ λ κ°κΉμ΄ μλ²μμ μ΄λ―Έμ§ λ° κΈ°ν μ μ μμ°μ μ 곡ν©λλ€.
- μμ λ―Έλμ΄ μ ν리μΌμ΄μ : λ΄μ€ νΌλμ λ λλ§μ μΆμ νμ¬ μ§μ°μ΄λ λ²λ² κ±°λ¦Όμ μ λ°νλ μ»΄ν¬λνΈλ₯Ό μλ³ν©λλ€. λͺ¨λ°μΌ κΈ°κΈ° μ¬μ©μμ μ€ν¬λ‘€ κ²½νμ κ°μ νκΈ° μν΄ λ°μ΄ν° κ°μ Έμ€κΈ° λ° λ λλ§μ μ΅μ νν©λλ€.
- μ¨λΌμΈ κ²μ νλ«νΌ: κ²μ λ λλ§ λ° λ€νΈμν¬ ν΅μ μ μ±λ₯μ μΈ‘μ νμ¬ μ μΈκ³ νλ μ΄μ΄μκ² λΆλλ½κ³ λ°μμ΄ λΉ λ₯Έ κ²μ κ²½νμ 보μ₯ν©λλ€. μ§μ° μκ°μ μ΅μννκ³ λ€νΈμν¬ νΌμ‘μ μ€μ΄κΈ° μν΄ μλ² μΈνλΌλ₯Ό μ΅μ νν©λλ€.
- κΈμ΅ κ±°λ νλ«νΌ: μ€μκ° λ°μ΄ν° νμμ λ λλ§ μλλ₯Ό λΆμν©λλ€. μ΅μ νμλ λ λλ§ μ±λ₯μ ν₯μμν€κΈ° μν΄ λ©λͺ¨μ΄μ μ΄μ λ° κ°μν κΈ°μ μ¬μ©μ΄ ν¬ν¨λ μ μμ΅λλ€.
λͺ¨λ² μ¬λ‘
- μ€λͺ μ μΈ μ΄λ¦ μ¬μ©: μΆμ νλ μμμ 무μμ μΈ‘μ νλμ§ λͺ ννκ² λνλ΄λ μ€λͺ μ μΈ μ΄λ¦μ μ§μ νμΈμ.
- ν΅μ¬ μμ μΆμ : μ±λ₯μ κ°μ₯ ν° μν₯μ λ―ΈμΉ κ°λ₯μ±μ΄ μλ μμ μ μΆμ νλ λ° μ§μ€νμΈμ.
- νλ‘λμ μμ λ°μ΄ν° μμ§: μ ν리μΌμ΄μ μ±λ₯μ λν νμ€μ μΈ μκ°μ μ»κΈ° μν΄ νλ‘λμ νκ²½μμ μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νμΈμ.
- μ κΈ°μ μΈ λ°μ΄ν° λΆμ: μ±λ₯ λ°μ΄ν°λ₯Ό μ κΈ°μ μΌλ‘ λΆμνμ¬ μ±λ₯ λ¬Έμ λ₯Ό μ¬μ μ μλ³νκ³ ν΄κ²°νμΈμ.
- λ°λ³΅ λ° μ΅μ ν: μμ§νλ μ±λ₯ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ½λλ₯Ό μ§μμ μΌλ‘ λ°λ³΅νκ³ μ΅μ ννμΈμ.
- μ€νμ κΈ°λ₯μμ κΈ°μ΅νμΈμ: APIλ λ³κ²½λ μ μμ΅λλ€. React λ¦΄λ¦¬μ€ λ ΈνΈλ₯Ό ν΅ν΄ μ΅μ μ 보λ₯Ό νμΈνμΈμ.
experimental_TracingMarkerμ λμ
experimental_TracingMarker
λ κ·μ€ν ν΅μ°°λ ₯μ μ 곡νμ§λ§, λ€λ₯Έ λꡬλ€μ΄ μ±λ₯ λΆμμ 보μν μ μμ΅λλ€:
- React νλ‘νμΌλ¬ (DevTools): κ°λ° μ€μ λλ¦° μ»΄ν¬λνΈλ₯Ό μλ³νκΈ° μν νμ€ λꡬμ λλ€.
- μΉ λ°μ΄ν(Web Vitals): μΉ μ±λ₯ μ§ν(LCP, FID, CLS)λ₯Ό νμ€ννκΈ° μν Googleμ μ΄λμ ν°λΈμ λλ€.
- Lighthouse: μ±λ₯, μ κ·Όμ±, SEOλ₯Ό ν¬ν¨νμ¬ μΉ νμ΄μ§λ₯Ό κ°μ¬νλ μλνλ λꡬμ λλ€.
- μλνν° APM λꡬ (μ: New Relic, Datadog): μ 체 μ ν리μΌμ΄μ μ€νμ λν ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° κ²½κ³ λ₯Ό μ 곡ν©λλ€.
κ²°λ‘
React experimental_TracingMarker
APIλ μμΈν μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νκ³ κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ React μ ν리μΌμ΄μ
μ μ΅μ ννλ κ°λ ₯ν λꡬμ
λλ€. λ°μ΄ν° κΈ°λ° ν΅μ°°λ ₯μΌλ‘ μ ν리μΌμ΄μ
μ μ±λ₯μ μ΄ν΄, μΈ‘μ λ° μ΅μ νν¨μΌλ‘μ¨ μ¬μ©μμ μμΉμ κ΄κ³μμ΄ μνν μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. μ±λ₯ μ΅μ νλ₯Ό μμ©νλ κ²μ μ€λλ μ κ²½μμ μΈ λμ§νΈ νκ²½μμ μ±κ³΅μ μν΄ λ§€μ° μ€μν©λλ€. μ€νμ μΈ APIμ λν μ
λ°μ΄νΈ μ 보λ₯Ό κ³μ νμΈνκ³ μμ ν μ±λ₯ κ·Έλ¦Όμ μν΄ λ€λ₯Έ λꡬλ€λ κ³ λ €νλ κ²μ μμ§ λ§μΈμ.
μ΄ μ 보λ κ΅μ‘ λͺ©μ μΌλ‘λ§ μ 곡λ©λλ€. experimental_TracingMarker
λ μ€νμ μΈ APIμ΄λ―λ‘ κΈ°λ₯κ³Ό μ¬μ© κ°λ₯ μ¬λΆλ λ³κ²½λ μ μμ΅λλ€. μ΅μ μ 보λ 곡μ React λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ.