** π7-1λ¨κ³: νλ‘ νΈμλ μ±λ₯ μΈ‘μ μ§ν μμ μ 볡 **
μΉμ¬μ΄νΈκ° βλλ €μβλΌλ λ§ λμ
μ νν μ«μμ μ§νλ‘ λ¬Έμ λ₯Ό μ°Ύκ³ κ°μ ν μ μκ² λ§λλ κΈ°μ μ λλ€.
β 1. μ μ±λ₯ μΈ‘μ μ§νκ° νμν κΉ?
μλͺ»λ νν | μ νν μ§ν |
---|---|
βλ‘λ© λλ €μβ | β λ무 λͺ¨νΈν¨ |
β3μ΄ λ§μ λ²νΌ ν΄λ¦ κ°λ₯β | β μ νν μμΉ (TTI) |
βμ΄λ―Έμ§ λ‘λ© μ€λ κ±Έλ €μβ | β LCP κΈ°μ€ μ΄κ³Ό |
μ±λ₯ μ§νλ λ¬Έμ λ₯Ό κ³λννκ³ κ°κ΄νν΄μ μ§μ§ λ¬Έμ λ₯Ό μ°Ύκ² ν΄μ€μ.
β 2. μ£Όμ μ±λ₯ μ§νλ€
1οΈβ£ TTI (Time To Interactive)
π¬ βμ¬μ©μκ° ν΄λ¦, μ λ ₯ λ± μΈν°λμ μ ν μ μκ² λ μμ κΉμ§ κ±Έλ¦° μκ°β
π¦π» μ¬μ΄ μ
λ²νΌμ΄ 보μμ§λ§ λλ¬λ μ λλ μν© β
β JavaScriptκ° μμ§ μ΄κΈ°ν μ€μ΄λΌ λμ μ ν¨
β TTI μΈ‘μ =
- νμ΄μ§κ° κ·Έλ €μ§
- JS λ‘λ© + μ΄κΈ°ν μλ£
- UI μ΄λ²€νΈκ° λ°μ κ°λ₯ μν
β±οΈ κΈ°μ€
TTI κ° | UX νκ° |
---|---|
0 ~ 3μ΄ | β λ§€μ° μ’μ |
3 ~ 6μ΄ | β οΈ λ³΄ν΅ |
6μ΄ μ΄μ | π₯ μ±λ₯ κ°μ νμ |
λꡬ: Lighthouse, Web Vitals
2οΈβ£ LCP (Largest Contentful Paint)
π¬ βκ°μ₯ ν° μ½ν μΈ (μ: ν° μ΄λ―Έμ§, μ λͺ© λ±)κ° νλ©΄μ μμ ν νμλ μκ°β
π¦π» μ¬μ΄ μ
νμ΄μ§κ° λ΄λλ° κΈμλ³΄λ€ ν° λ°°λ μ΄λ―Έμ§κ° λ¦κ² λ¨λ©΄ β LCP μ§μ°!
β±οΈ κΈ°μ€
LCP κ° | UX νκ° |
---|---|
0 ~ 2.5μ΄ | β μ’μ |
2.5 ~ 4μ΄ | β οΈ λ³΄ν΅ |
4μ΄ μ΄μ | π₯ λλ¦Ό |
μ΅μ ν ν
- μ΄λ―Έμ§
lazy-loading
- μ΄λ―Έμ§ μμΆ
- critical CSS λΆλ¦¬
3οΈβ£ FID (First Input Delay)
π¬ βμ¬μ©μκ° ν΄λ¦, μ λ ₯, ν λ± μ²« λ²μ§Έ μνΈμμ©μ μλνμ λ,
λΈλΌμ°μ κ° λ°μνκΈ°κΉμ§ κ±Έλ¦° μκ°β
π¦π» μ¬μ΄ μ
ν΄λ¦νλλ° λ°μμ΄ λ¦μ = FIDβ
β±οΈ κΈ°μ€
FID κ° | UX νκ° |
---|---|
0 ~ 100ms | β νλ₯ |
100 ~ 300ms | β οΈ λ³΄ν΅ |
300ms μ΄μ | π₯ λ¬Έμ μμ |
μμΈ
- JS μ΄κΈ°ν μ€ ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬ λͺ»ν¨
- 무거μ΄
for
,while
λΈλ‘ - μ΄λ²€νΈ λ°μΈλ© μ§μ°
β 3. Ajax κ΄λ ¨ μ±λ₯ μ§ν
1οΈβ£ Ajax μλ΅ μκ°
Ajax μμ²μ΄ μμλΌμ μλ΅ μλ£λκΈ°κΉμ§ κ±Έλ¦° μκ°
β
Network ν¨λμμ νμΈ κ°λ₯ (Timing νμμ TTFB
, Download
ꡬκ°)
2οΈβ£ JS Heap Size
λΈλΌμ°μ κ° JavaScript λ°μ΄ν°λ₯Ό μ μ₯ν΄ λμ λ©λͺ¨λ¦¬ μμ ν¬κΈ°
π¦π» μ¬μ΄ μ€λͺ
πΎ μλ°μ€ν¬λ¦½νΈμ© μμ κ³΅κ° β λ무 컀μ§λ©΄ λλ €μ§!
π νμΈ λꡬ
- Chrome DevTools β
Memory
ν β Heap Snapshot
3οΈβ£ Paint Time
νλ©΄ μμκ° μ€μ λμ λ³΄μΌ λκΉμ§ 걸리λ μκ°
νλͺ© | μ€λͺ |
---|---|
First Paint (FP) | μ²μ μ무κ²λ μλ ν° νλ©΄μ΄ μ¬λΌμ§λ μμ |
First Contentful Paint (FCP) | ν μ€νΈλ μ΄λ―Έμ§κ° μ²μ νλ©΄μ 보μ΄λ μμ |
Render Blocking | CSS/JS λ‘λ©μΌλ‘ μΈν΄ νλ©΄ 그리기 μ§μ° λ°μ |
β 4. μ±λ₯ μΈ‘μ λꡬ μμ½
λꡬ | μ¬μ© λͺ©μ |
---|---|
Lighthouse | μ 체 νμ΄μ§ μ±λ₯ νκ° (TTI, LCP, FID λ±) |
Chrome DevTools | Network + JS Heap + Frame λΆμ |
Web Vitals JS | μ€μκ° μ¬μ©μ μΈ‘μ (FID, LCP λ±) |
Performance ν | μμΈ JS μ€ν νμ΄λ° νμΈ |
β 5. λ©΄μ μ§λ¬Έ μμ + ν΄μ€
β Q. νλ‘ νΈμλ μ±λ₯μ μΈ‘μ ν μ μλ μ£Όμ μ§νλ₯Ό 3κ°μ§ λ§ν΄λ³΄μΈμ.
β A.
- TTI: μ¬μ©μκ° μΈν°λμ κ°λ₯ν μνκΉμ§ κ±Έλ¦° μκ°
- LCP: κ°μ₯ ν° μ½ν μΈ κ° νλ©΄μ λνλλ μμ
- FID: μ¬μ©μμ 첫 μ λ ₯μ λν λΈλΌμ°μ λ°μ μκ°
-
보쑰 μ§νλ‘ Ajax μλ΅ μκ°, JS Heap μ¬μ©λ, Paint Time λ±μ μΈ‘μ νμ¬
μ 체 λ λλ§ μ±λ₯κ³Ό μ¬μ©μ λ°μ μλκΉμ§ λΆμν©λλ€.
β μ 체 μμ½ μΉ΄λ
μ§ν | μ€λͺ | κΈ°μ€κ° |
---|---|---|
TTI | ν΄λ¦ λ± UI λ°μ κ°λ₯ μμ | β€ 5μ΄ |
LCP | ν° μ΄λ―Έμ§/ν μ€νΈκ° 보μ΄λ μμ | β€ 2.5μ΄ |
FID | μ¬μ©μ 첫 μ λ ₯ β λΈλΌμ°μ λ°μ μκ° | β€ 100ms |
Ajax μλ΅ | λ€νΈμν¬ β μλ΅ μλ£κΉμ§ | β€ 1μ΄ |
Heap Size | JS λ©λͺ¨λ¦¬ μ¬μ©λ | λ무 컀μ§λ©΄ λμ μμ¬ |
Paint | 첫 νλ©΄ 그리기 | FP, FCP, LCPλ‘ λλ |
β 7-2λ¨κ³: Ajax μμ²μ νΈλνΉ / λ‘κΉ μμ€ν μμ μ 볡
μ€μλΉμ€μμ Ajax μμ²μ΄ μ€ν¨νκ±°λ λλ €μ§λ λ¬Έμ κ° μκΉλλ€.
μ΄λ κ°λ°μκ° μ§μ λΈλΌμ°μ λ₯Ό μΌλ³Ό μ μμ£ .
π κ·Έλμ βμμ²μ΄ μΈμ , λꡬμκ²μ, μ΄λ»κ² μ€ν¨νλμ§ μλμΌλ‘ μΆμ νλ μμ€ν βμ΄ νμν©λλ€.
β 1. μ Ajax μμ²μ μΆμ νκ³ λ‘κΉ ν΄μΌ ν κΉ?
λ¬Έμ | μΆμ μμΌλ©΄? | μΆμ μμΌλ©΄? |
---|---|---|
Ajax μ€ν¨ | βμμ? μ μ λ μβ¦β | μ νν μ€λ₯ μμΉ, μκ°, μ¬μ©μ νμΈ κ°λ₯ |
λλ¦° μλ΅ | βλλ¦° κ² κ°μμβ | TTFB, URL, μ¬μ©μ λΈλΌμ°μ μλ κΈ°λ‘ |
κ³ κ° λΆλ§ | μμΈ λΆμ μ΄λ €μ | μ¬μ©μκ° λ¬΄μμ νλμ§ μΆμ κ°λ₯ |
β μλ² λ‘κ·Έλ§μΌλ‘λ μ¬μ©μμ μ€μ νλ©΄μμ μΌμ΄λ μΌμ μ μ μμ
β λΈλΌμ°μ μμμ μ€λ₯/λ³λͺ©μ μΆμ νλ λκ΅¬κ° νμν¨
β 2. λνμ μΈ νΈλνΉ/λ‘κΉ λꡬ
β Sentry (μΌνΈλ¦¬)
νλͺ© | μ€λͺ |
---|---|
μν | μλ°μ€ν¬λ¦½νΈ μ€λ₯ μ€μκ° μΆμ |
νΉμ§ | μ€λ₯ λ°μ μ μ¦μ μλ¦Ό + μ½λ μμΉ μΆμ + Ajax μ€λ₯ μΊ‘μ² κ°λ₯ |
λ¬΄λ£ λ²μ | μμ (κΈ°λ³Έ νΈλν½ μ ν μμ) |
β Datadog
νλͺ© | μ€λͺ |
---|---|
μν | μ±λ₯ λΆμ + λ‘κ·Έ μΆμ + Ajax μλ΅ μκ° μΆμ |
νΉμ§ | λΈλΌμ°μ β API νΈμΆ β DBκΉμ§ μ 체 νλ¦ μΆμ κ°λ₯ |
μ¬μ© λͺ©μ | κΈ°μ μ€μκ° λͺ¨λν°λ§ |
β NewRelic
νλͺ© | μ€λͺ |
---|---|
μν | μ¬μ©μ λΈλΌμ°μ μμ λ°μν μ€μ μ±λ₯ λ°μ΄ν° μμ§ |
νΉμ§ | JS μ€λ₯ + Ajax νμ΄λ° + λ€νΈμν¬ λ³λͺ©μ μΈμ λ³λ‘ κΈ°λ‘ |
κ³ κΈ κΈ°λ₯ | μ 체 νΌλ, μ¬μ©μ νλ λΆμ |
β 3. μ€μ Ajax μμ² μΆμ λ°©μ (Sentry κΈ°μ€)
π¦ μ€μΉ
npm install @sentry/browser
π¦ μ€μ μ½λ
import * as Sentry from "@sentry/browser";
Sentry.init({
dsn: "https://YOUR_PROJECT_ID@sentry.io/YOUR_ID",
tracesSampleRate: 1.0 // Ajax μλ μΆμ λ ν¬ν¨
});
π¦ Ajax μμ² μλ μΆμ
Sentryλ fetch, XHR μμ²μμ μλ μ 보 μΆμ :
νλͺ© | μ€λͺ |
---|---|
μμ² URL | μ΄λμ 보λλμ§ |
μλ΅ μ½λ | 500, 404, 200 λ± |
μλ΅ μκ° | μΌλ§λ κ±Έλ Έλμ§ |
μ€ν¨ μ¬λΆ | μ€ν¨νλ©΄ μ¦μ μλ¦Ό μ μ‘ |
μ¬μ©μ μΈμ | λκ° μμ²νλμ§ (IP, λΈλΌμ°μ μ 보 λ±) |
β 4. μ¬μ©μ μΈμ λ³ Ajax λ³λͺ© λΆμ
π¦π» μ¬μ΄ μ€λͺ
βνκΈΈλμ΄λΌλ μ¬μ©μκ° μ΄λ€ νμ΄μ§μμ Ajax μμ²μ 보λκ³ , κ·Έκ² μ λλ Έλμ§βλ₯Ό μ€μκ°μΌλ‘ λ³Ό μ μμ΄μ.
Datadog/NewRelic μμ
- μ¬μ©μκ°
/products
νμ΄μ§ μ§μ GET /api/products
μμ² λ³΄λ β TTFB 3000ms- μλ΅ λλ¦Ό β μλ λ‘κ·Έ μ μ₯ + κ²½κ³ λ°μ
- κ°λ°μλ βμ΄λ μ¬μ©μ, μ΄λ μμ², μ΄λ μμ βμμ λ¬Έμ κ° μμλμ§ μ νν νμΈ κ°λ₯
β λ‘κΉ ν¬ν¨ νλͺ©
νλͺ© | μ€λͺ |
---|---|
sessionId | μ¬μ©μ κ΅¬λΆ |
pagePath | μ΄λ νμ΄μ§μμ λ°μνλκ° |
fetchUrl | μ΄λ€ APIλ₯Ό νΈμΆνλκ° |
method | GET, POST λ± |
status | 200, 500 λ± |
duration | μλ΅ μκ° (ms) |
errorMessage | μ€ν¨ μ λ©μμ§ |
timestamp | λ°μ μκ° (ISO) |
β 5. μ§μ 컀μ€ν λ‘κΉ λ κ°λ₯
function logAjaxError(info) {
fetch("/log", {
method: "POST",
body: JSON.stringify({
sessionId: getSessionId(),
url: info.url,
status: info.status,
time: new Date().toISOString(),
error: info.message
}),
headers: { "Content-Type": "application/json" }
});
}
β 6. λ©΄μ μ§λ¬Έ μμ + ν΄μ€
β Q. νλ‘ νΈμλμμ Ajax μμ² μ€λ₯λ λ³λͺ©μ μ΄λ»κ² μΆμ νμλμ?
β A.
- Sentryλ₯Ό μ°λνμ¬ λΈλΌμ°μ μμ λ°μνλ JS μ€λ₯μ Ajax μ€ν¨λ₯Ό μ€μκ° μΆμ νκ³ ,
- μμ² URL, μλ΅ μ½λ, TTFB λ±μ μλ κΈ°λ‘ν©λλ€.
- μ¬μ©μ μΈμ IDμ ν¨κ» λ‘κ·Έλ₯Ό μμ§νμ¬ λκ° μΈμ μ΄λ€ μμ²μμ μ€λ₯λ₯Ό λ§λ¬λμ§ νμ ν μ μμ΅λλ€.
- νμ μ Datadog/NewRelicκ³Ό μ°λνμ¬ μ 체 μμ² νλ¦ λ° μλ΅ μ§μ° ꡬκ°μ μκ°μ μΌλ‘ λΆμν©λλ€.
β μ 체 μμ½ μΉ΄λ
νλͺ© | μ€λͺ |
---|---|
Sentry | Ajax μ€λ₯ μ€μκ° μΆμ + JS μ€λ₯ |
Datadog | λΈλΌμ°μ ~ μλ² ~ DB μ 체 μ±λ₯ μΆμ |
NewRelic | μ¬μ©μ νλ/μΈμ λ³ μ€μκ° μΆμ |
μ£Όμ μΆμ μ§ν | URL, μλ΅ μ½λ, TTFB, μ€ν¨ λ©μμ§ |
μΈμ κΈ°λ° λΆμ | μ¬μ©μ λ³ μμ² νλ¦ + λ³λͺ© κ΅¬κ° μκ°ν |