νλ‘ νΈμλ μ€λ₯ μΆμ μ μν΄ μΌνΈλ¦¬λ₯Ό ꡬννκ³ , μ ν리μΌμ΄μ μμ μ±μ κ°μ νλ©°, μνν μ¬μ©μ κ²½νμ μ 곡νλ λ°©λ²μ μμ보μΈμ.
Frontend Sentry: A Comprehensive Guide to Error Tracking
μλμ μΈ μΉ κ°λ° μΈκ³μμ μννκ³ μμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νλ κ²μ΄ κ°μ₯ μ€μν©λλ€. νλ‘ νΈμλ μ ν리μΌμ΄μ μ 볡μ‘νλ©°, μλ§μ λΌμ΄λΈλ¬λ¦¬, API λ° μ¬μ©μ μνΈ μμ©μ μμ‘΄νλ κ²½μ°κ° λ§μ΅λλ€. μ΄λ¬ν 볡μ‘μ±μΌλ‘ μΈν΄ νμ°μ μΌλ‘ μ€λ₯κ° λ°μνλ©°, μ΄λ¬ν μ€λ₯λ₯Ό ν΄κ²°νμ§ μμΌλ©΄ μ¬μ©μ λ§μ‘±λμ λΉμ¦λμ€ κ²°κ³Όμ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. νλ‘ νΈμλ μ€λ₯ μΆμ μ΄ μ€μν μ΄μ μ΄λ©°, Sentryλ μ΄λ¬ν λ¬Έμ λ₯Ό ν¨κ³Όμ μΌλ‘ μΊ‘μ², λΆμ λ° ν΄κ²°νκΈ° μν μ£Όμ μ루μ μ λλ€.
What is Frontend Error Tracking and Why is it Important?
νλ‘ νΈμλ μ€λ₯ μΆμ μ μΉ μ ν리μΌμ΄μ μ ν΄λΌμ΄μΈνΈ μΈ‘ μ½λμμ λ°μνλ μ€λ₯λ₯Ό μλμΌλ‘ λͺ¨λν°λ§νκ³ κΈ°λ‘νλ νλ‘μΈμ€μ λλ€. μ΄λ¬ν μ€λ₯λ JavaScript μμΈλΆν° μ€ν¨ν λ€νΈμν¬ μμ² λ° μ±λ₯ λ³λͺ© νμμ μ΄λ₯΄κΈ°κΉμ§ λ€μν©λλ€. μ€λ₯ μΆμ λꡬλ μ¬μ©μ λ³΄κ³ μ(μ’ μ’ λΆμμ νκ³ μ¬ννκΈ° μ΄λ €μ)μλ§ μμ‘΄νλ λμ κ°λ°μμκ² λ¬Έμ μ κ·Όλ³Έ μμΈμ λν μμΈν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
νλ‘ νΈμλ μ€λ₯ μΆμ μ μ€μμ±μ μ무리 κ°μ‘°ν΄λ μ§λμΉμ§ μμ΅λλ€:
- Improved User Experience: μ€λ₯λ₯Ό μ μνκ² μλ³νκ³ ν΄κ²°ν¨μΌλ‘μ¨ μ€λ¨μ μ΅μννκ³ κΈμ μ μΈ μ¬μ©μ κ²½νμ μ μ§ν μ μμ΅λλ€. μ¬μ©μκ° μ μ μκ±°λ μ¬μ΄νΈμμ ꡬ맀λ₯Ό μλ£νλ €κ³ μλνμ§λ§ νΈλμμ μ μλ£νμ§ λͺ»νκ² νλ JavaScript μ€λ₯κ° λ°μνλ κ²μ μμν΄ λ³΄μμμ€. ν¨κ³Όμ μΈ μ€λ₯ μΆμ μ ν΅ν΄ λ§μ μ¬μ©μμκ² μν₯μ λ―ΈμΉκΈ° μ μ μ΄λ¬ν λ¬Έμ λ₯Ό ν¬μ°©νκ³ μμ ν μ μμ΅λλ€.
- Faster Debugging: μ€λ₯ μΆμ λꡬλ μ€ν μΆμ , μ¬μ©μ μ 보, λΈλΌμ°μ μΈλΆ μ 보 λ±μ ν¬ν¨νμ¬ μ€λ₯κ° λ°μν 컨ν μ€νΈμ λν μμΈν μ 보λ₯Ό μ 곡ν©λλ€. μ΄ λ°μ΄ν°λ₯Ό ν΅ν΄ λ¬Έμ λ₯Ό ν¨μ¬ μ½κ² μ¬ννκ³ λλ²κΉ ν μ μμΌλ―λ‘ κ°λ°μμ κ·μ€ν μκ°κ³Ό λ Έλ ₯μ μ μ½ν μ μμ΅λλ€. λ¨μΌ μ¬μ©μκ° λ³΄κ³ ν μ€λ₯λ₯Ό μ¬ννλ λ° μκ°μ λλΉνλ λμ λ¬Έμ λ₯Ό μ μνκ² μλ³νκ³ ν΄κ²°νλ λ° νμν λ°μ΄ν°μ μ‘μΈμ€ν μ μμ΅λλ€.
- Increased Application Stability: μ€λ₯λ₯Ό μ¬μ μ λͺ¨λν°λ§νκ³ ν΄κ²°ν¨μΌλ‘μ¨ μ ν리μΌμ΄μ μ μ λ°μ μΈ μμ μ±κ³Ό μ λ’°μ±μ ν₯μμν¬ μ μμ΅λλ€. μ κΈ°μ μΈ μ€λ₯ λͺ¨λν°λ§μ ν¨ν΄κ³Ό μΆμΈλ₯Ό μλ³νλ λ° λμμ΄ λλ―λ‘ κ΄λ²μν λ¬Έμ λ‘ μ΄μ΄μ§κΈ° μ μ κ·Όλ³Έμ μΈ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
- Data-Driven Decision Making: μ€λ₯ μΆμ λꡬλ μ ν리μΌμ΄μ μ μ±λ₯κ³Ό μνμ λν κ·μ€ν λ°μ΄ν°λ₯Ό μ 곡ν©λλ€. μ΄ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ½λ 리ν©ν°λ§, μ±λ₯ μ΅μ ν λ° λ¦¬μμ€ ν λΉμ λν μ 보μ μ κ°ν κ²°μ μ λ΄λ¦΄ μ μμ΅λλ€. μλ₯Ό λ€μ΄ νΉμ κΈ°λ₯κ³Ό κ΄λ ¨λ μ€λ₯κ° κΈμ¦νλ κ²μ λ°κ²¬νλ©΄ ν΄λΉ κΈ°λ₯μ μμ μ±μ κ°μ νκΈ° μν΄ ν΄λΉ κΈ°λ₯ 리ν©ν°λ§μ μ°μ μμλ₯Ό μ§μ ν μ μμ΅λλ€.
- Better Collaboration: μ€λ₯ μΆμ λꡬλ κ°λ°μ, ν μ€ν° λ° μ ν κ΄λ¦¬μ κ°μ νμ μ μ΄μ§ν©λλ€. μ΄λ¬ν λꡬλ μ€λ₯λ₯Ό μΆμ νκ³ ν΄κ²°νκΈ° μν μ€μ μ§μ€μ νλ«νΌμ μ 곡ν¨μΌλ‘μ¨ λͺ¨λ μ¬λμ΄ λμΌν νμ΄μ§μ μκ³ λμΌν λͺ©νλ₯Ό ν₯ν΄ λ Έλ ₯νλλ‘ λ³΄μ₯ν©λλ€.
Introducing Sentry: A Powerful Error Tracking Solution
Sentryλ νλ‘ νΈμλ, λ°±μλ λ° λͺ¨λ°μΌ μ ν리μΌμ΄μ μ λν ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° λλ²κΉ κΈ°λ₯μ μ 곡νλ μ£Όμ μ€λ₯ μΆμ νλ«νΌμ λλ€. κ°λ°μκ° μ€λ₯λ₯Ό μ μνκ² μλ³, μ§λ¨ λ° ν΄κ²°ν μ μλλ‘ μ€κ³λ κ΄λ²μν κΈ°λ₯μ μ 곡ν©λλ€.
Key Features of Sentry:
- Real-Time Error Monitoring: Sentryλ μ€λ₯κ° λ°μνλ©΄ μ€λ₯λ₯Ό μΊ‘μ²νκ³ μ€μκ° μλ¦Όμ μ 곡νμ¬ κ°λ°μμκ² μ€μν λ¬Έμ λ₯Ό μ립λλ€.
- Detailed Error Reports: Sentryλ μ€ν μΆμ , μ¬μ©μ 컨ν μ€νΈ, λΈλΌμ°μ μ 보 λ° νκ²½ λ³μλ₯Ό ν¬ν¨νμ¬ κ° μ€λ₯μ λν μμΈν μ 보λ₯Ό μ 곡ν©λλ€. μ€λ₯λ‘ μ΄μ΄μ§λ μ¬μ©μ μμ κΈ°λ‘μΈ breadcrumbμ μΊ‘μ²ν μλ μμ΅λλ€.
- Performance Monitoring: Sentryλ μ ν리μΌμ΄μ μ μ±λ₯μ λν ν΅μ°°λ ₯μ μ 곡νμ¬ λ³λͺ© νμμ μλ³νκ³ μ½λμ μλμ ν¨μ¨μ±μ μ΅μ νν μ μμ΅λλ€. νμ΄μ§ λ‘λ μκ°, API μλ΅ μκ° λ° λ°μ΄ν°λ² μ΄μ€ 쿼리 μ±λ₯κ³Ό κ°μ νλͺ©μ λͺ¨λν°λ§ν©λλ€.
- Release Tracking: Sentryλ₯Ό μ¬μ©νλ©΄ 릴리μ€λ³λ‘ μ€λ₯λ₯Ό μΆμ νμ¬ νκ·λ₯Ό μ½κ² μλ³νκ³ μλ‘μ΄ λ°°ν¬κ° μμ μ μΈμ§ νμΈν μ μμ΅λλ€.
- Source Maps Support: Sentryλ μμ€ λ§΅μ μ§μνλ―λ‘ μμ© νλ‘κ·Έλ¨μ΄ μΆμλκ±°λ λ²λ€λ‘ λ¬ΆμΈ κ²½μ°μλ μμ© νλ‘κ·Έλ¨μ μλ³Έ μμ€ μ½λλ₯Ό λ³Ό μ μμ΅λλ€. μ΄λ νλ‘λμ λ¬Έμ λ₯Ό λλ²κΉ νλ λ° μ€μν©λλ€.
- Integrations: Sentryλ React, Angular, Vue.js λ° Node.jsμ κ°μ λ리 μ¬μ©λλ νλ μμν¬λ₯Ό ν¬ν¨νμ¬ κ΄λ²μν κ°λ° λꡬ λ° νλ«νΌκ³Ό ν΅ν©λ©λλ€. λν Slack λ° Microsoft Teamsμ κ°μ μλ¦Ό νλ«νΌκ³Όλ ν΅ν©λ©λλ€.
- User Feedback: Sentryλ₯Ό μ¬μ©νλ©΄ μ¬μ©μκ° μμ© νλ‘κ·Έλ¨μμ μ§μ νΌλλ°±μ μ μΆνμ¬ κ²½νμ λν κ·μ€ν ν΅μ°°λ ₯μ μ»κ³ λ¬Έμ μ μ°μ μμλ₯Ό μ§μ νλ λ° λμμ μ€ μ μμ΅λλ€.
Integrating Sentry into Your Frontend Application
Sentryλ₯Ό νλ‘ νΈμλ μ ν리μΌμ΄μ μ ν΅ν©νλ κ²μ κ°λ¨ν νλ‘μΈμ€μ λλ€. λ€μμ λ¨κ³λ³ κ°μ΄λμ λλ€:
1. Create a Sentry Account:
μμ§ κ³μ μ΄ μμΌλ©΄ Sentry.ioμμ λ¬΄λ£ Sentry κ³μ μ λ§λμμμ€.
2. Create a New Project:
λ‘κ·ΈμΈν ν νλ‘ νΈμλ μ ν리μΌμ΄μ μ λν μ νλ‘μ νΈλ₯Ό λ§λμμμ€. Sentryλ μ μ ν νλ«νΌ(μ: JavaScript, React, Angular, Vue.js)μ μ ννλ νλ‘μΈμ€λ₯Ό μλ΄ν©λλ€. Sentryλ νλ‘μ νΈμ λν κ³ μ μλ³μμΈ DSN(Data Source Name)μ μ 곡ν©λλ€. μ΄ DSNμ μ€λ₯ λ°μ΄ν°λ₯Ό Sentryλ‘ λ³΄λ΄λ λ° μ€μν©λλ€.
3. Install the Sentry JavaScript SDK:
npm λλ yarnμ μ¬μ©νμ¬ Sentry JavaScript SDKλ₯Ό μ€μΉν©λλ€:
npm install @sentry/browser @sentry/tracing
yarn add @sentry/browser @sentry/tracing
4. Initialize Sentry:
μ ν리μΌμ΄μ μ κΈ°λ³Έ μ§μ μ (μ: `index.js` λλ `App.js`)μμ Sentryλ₯Ό μ΄κΈ°νν©λλ€. `YOUR_DSN`μ μ€μ DSNμΌλ‘ λ°κΏλλ€:
import * as Sentry from "@sentry/browser";
import { Integrations } from "@sentry/tracing";
Sentry.init({
dsn: "YOUR_DSN",
integrations: [
new Integrations.BrowserTracing(),
],
// Set tracesSampleRate to 1.0 to capture 100%
// of transactions for performance monitoring.
// We recommend adjusting this value in production
tracesSampleRate: 0.1,
});
Explanation:
- `dsn`: μ€λ₯ λ°μ΄ν°λ₯Ό λ³΄λΌ μμΉλ₯Ό Sentryμ μλ €μ£Όλ νλ‘μ νΈμ DSNμ λλ€.
- `integrations`: `BrowserTracing` ν΅ν©μ νμ΄μ§ λ‘λ μκ° λ° κ²½λ‘ λ³κ²½κ³Ό κ°μ μ±λ₯ λ°μ΄ν°λ₯Ό μλμΌλ‘ μΊ‘μ²ν©λλ€.
- `tracesSampleRate`: μ±λ₯ λͺ¨λν°λ§μ μν΄ μνλ§ν νΈλμμ μ λ°±λΆμ¨μ κ²°μ ν©λλ€. 1.0 κ°μ λͺ¨λ νΈλμμ μ μΊ‘μ²νκ³ 0.1 κ°μ 10%λ₯Ό μΊ‘μ²ν©λλ€. μ ν리μΌμ΄μ μ νΈλν½ λ° μ±λ₯ μꡬ μ¬νμ λ°λΌ μ΄ κ°μ μ‘°μ ν©λλ€.
5. Configure Error Handling:
Sentryλ μ‘νμ§ μμ μμΈ λ° μ²λ¦¬λμ§ μμ κ±°λΆλ₯Ό μλμΌλ‘ μΊ‘μ²ν©λλ€. κ·Έλ¬λ `Sentry.captureException()` λ©μλλ₯Ό μ¬μ©νμ¬ μ€λ₯λ₯Ό μλμΌλ‘ μΊ‘μ²ν μλ μμ΅λλ€:
try {
// Your code that might throw an error
throw new Error("This is a test error!");
} catch (e) {
Sentry.captureException(e);
}
`Sentry.captureMessage()` λ©μλλ₯Ό μ¬μ©νμ¬ λ©μμ§λ₯Ό μΊ‘μ²ν μλ μμ΅λλ€:
Sentry.captureMessage("This is a test message!");
6. Deploy Your Application:
μ ν리μΌμ΄μ μ νλ‘λμ νκ²½μ λ°°ν¬ν©λλ€. μ΄μ Sentryλ μ€λ₯ λ° μ±λ₯ λ°μ΄ν° μΊ‘μ²λ₯Ό μλμΌλ‘ μμν©λλ€.
Advanced Sentry Configuration
Sentryλ νΉμ μꡬ μ¬νμ λ§κ² λμμ μ¬μ©μ μ μνκΈ° μν κ΄λ²μν κ΅¬μ± μ΅μ μ μ 곡ν©λλ€. κ³ λ €ν΄μΌ ν λͺ κ°μ§ κ³ κΈ κ΅¬μ± μ΅μ μ λ€μκ³Ό κ°μ΅λλ€:
1. Setting User Context:
Sentryμ μ¬μ©μ 컨ν μ€νΈλ₯Ό μ 곡νλ©΄ μ€λ₯λ₯Ό λλ²κΉ νλ λ₯λ ₯μ΄ ν¬κ² ν₯μλ μ μμ΅λλ€. `Sentry.setUser()` λ©μλλ₯Ό μ¬μ©νμ¬ μ¬μ©μ 컨ν μ€νΈλ₯Ό μ€μ ν μ μμ΅λλ€:
Sentry.setUser({
id: "12345",
email: "user@example.com",
username: "johndoe",
});
μ΄ μ 보λ μ€λ₯ λ³΄κ³ μμ ν¬ν¨λμ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μλ μ¬μ©μλ₯Ό μλ³ν μ μμ΅λλ€.
2. Adding Tags and Extras:
νκ·Έμ μΆκ° μ 보λ μ€λ₯ λ³΄κ³ μμ μΆκ° 컨ν μ€νΈλ₯Ό μ 곡ν©λλ€. νκ·Έλ μ€λ₯λ₯Ό νν°λ§νκ³ κ·Έλ£Ήννλ λ° μ¬μ©ν μ μλ ν€-κ° μμ λλ€. μΆκ° μ 보λ μ€λ₯ λ³΄κ³ μμ ν¬ν¨ν μ μλ μμμ λ°μ΄ν°μ λλ€.
Sentry.setTag("environment", "production");
Sentry.setExtra("request_id", "abcdefg");
νκ·Έλ νκ²½, μ¬μ©μ μν λλ κΈ°λ₯λ³λ‘ μ€λ₯λ₯Ό νν°λ§νλ λ° μ μ©ν©λλ€. μΆκ° μ 보λ μμ² ID, μΈμ λ°μ΄ν° λλ κΈ°ν κ΄λ ¨ μ 보λ₯Ό ν¬ν¨νλ λ° μ¬μ©ν μ μμ΅λλ€.
3. Using Breadcrumbs:
Breadcrumbμ μ€λ₯λ‘ μ΄μ΄μ§λ μ¬μ©μ μμ κΈ°λ‘μ λλ€. μ€λ₯λ₯Ό νΈλ¦¬κ±°ν μ΄λ²€νΈμ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€. Sentryλ ν΄λ¦ λ° κ²½λ‘ λ³κ²½κ³Ό κ°μ μΌλΆ breadcrumbμ μλμΌλ‘ μΊ‘μ²ν©λλ€. `Sentry.addBreadcrumb()` λ©μλλ₯Ό μ¬μ©νμ¬ breadcrumbμ μλμΌλ‘ μΆκ°ν μλ μμ΅λλ€:
Sentry.addBreadcrumb({
category: "navigation",
message: "User navigated to the product page",
level: Sentry.Severity.Info,
});
4. Ignoring Errors:
κ²½μ°μ λ°λΌ κ΄λ ¨μ΄ μκ±°λ μ€ν κ°λ₯νμ§ μμ νΉμ μ€λ₯λ₯Ό 무μν μ μμ΅λλ€. λ©μμ§, μ ν λλ URLμ κΈ°λ°μΌλ‘ μ€λ₯λ₯Ό 무μνλλ‘ Sentryλ₯Ό ꡬμ±ν μ μμ΅λλ€. μ΄λ κ² νλ©΄ λ Έμ΄μ¦λ₯Ό μ€μ΄κ³ κ°μ₯ μ€μν λ¬Έμ μ μ§μ€νλ λ° λμμ΄ λ©λλ€.
`beforeSend` νν¬λ₯Ό μ¬μ©νμ¬ νΉμ μ€λ₯λ₯Ό νν°λ§ν μ μμ΅λλ€:
Sentry.init({
dsn: "YOUR_DSN",
beforeSend(event) {
if (event.message === "Ignored error message") {
return null; // Returning null will drop the event.
}
return event;
},
});
5. Source Maps Upload:
νλ‘λμ μ μν΄ μ½λκ° μΆμλκ±°λ λ²λ€λ‘ λ¬Άμ΄λ©΄ μ€ν μΆμ μ΄ μΆμλ μ½λλ₯Ό μ°Έμ‘°νλ―λ‘ μ€λ₯λ₯Ό λλ²κΉ νκΈ°κ° μ΄λ €μμ§λλ€. μμ€ λ§΅μ μ¬μ©νλ©΄ μΆμλ μ½λλ₯Ό μλ μμ€ μ½λλ‘ λ€μ λ§€νν μ μμΌλ―λ‘ μ€ν μΆμ μ ν¨μ¬ μ½κ² μ΄ν΄ν μ μμ΅λλ€.
Sentryλ μμ€ λ§΅ μ λ‘λλ₯Ό μ§μν©λλ€. λΉλ νλ‘μΈμ€μ μΌλΆλ‘ μμ€ λ§΅ μ λ‘λλ₯Ό ꡬμ±νλ €λ©΄ Sentry μ€λͺ μλ₯Ό λ°λ₯΄μμμ€.
Best Practices for Frontend Error Tracking with Sentry
Sentryλ₯Ό μ΅λν νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μμμ€:
- Monitor Errors Regularly: Sentryλ₯Ό μ€μ νκ³ μμ΄λ²λ¦¬μ§ λ§μμμ€. μλ‘μ΄ μ€λ₯ λ° μΆμΈμ λν΄ Sentry λμ보λλ₯Ό μ κΈ°μ μΌλ‘ λͺ¨λν°λ§νμμμ€.
- Prioritize Errors: λͺ¨λ μ€λ₯κ° λμΌνκ² μμ±λλ κ²μ μλλλ€. μ¬μ©μμκ² λ―ΈμΉλ μν₯κ³Ό λ°μνλ λΉλμ λ°λΌ μ€λ₯μ μ°μ μμλ₯Ό μ§μ νμμμ€.
- Resolve Errors Quickly: μ¬μ©μ μ€λ¨μ μ΅μννκΈ° μν΄ κ°λ₯ν ν 빨리 μ€λ₯λ₯Ό ν΄κ²°νλ κ²μ λͺ©νλ‘ νμμμ€.
- Use Detailed Error Reports: Sentry μ€λ₯ λ³΄κ³ μμ μ 곡λ μμΈν μ 보λ₯Ό νμ©νμ¬ μ€λ₯μ κ·Όλ³Έ μμΈμ μ΄ν΄νμμμ€.
- Add User Context: λ¬Έμ λ₯Ό κ²ͺκ³ μλ μ¬μ©μλ₯Ό μλ³νκΈ° μν΄ Sentryμ μ¬μ©μ 컨ν μ€νΈλ₯Ό μ 곡νμμμ€.
- Use Tags and Extras: μ€λ₯ λ³΄κ³ μμ μΆκ° 컨ν μ€νΈλ₯Ό μ 곡νκΈ° μν΄ νκ·Έμ μΆκ° μ 보λ₯Ό μΆκ°νμμμ€.
- Use Breadcrumbs: Breadcrumbμ μ¬μ©νμ¬ μ€λ₯λ‘ μ΄μ΄μ§ μ¬μ©μ μμ μ μ΄ν΄νμμμ€.
- Automate Error Resolution: κ°λ₯ν κ²½μ° λ¬Έμ μΆμ μμ€ν κ³Όμ Sentry ν΅ν©κ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ€λ₯ ν΄κ²°μ μλννμμμ€.
- Educate Your Team: νμ΄ Sentryλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλ λ°©λ²μ λν΄ κ΅μ‘μ λ°μλμ§ νμΈνμμμ€.
- Review Release Health: κ° λ°°ν¬ ν Sentry λ¦΄λ¦¬μ€ μν λμ보λλ₯Ό νμΈνμ¬ νκ· λλ μλ‘μ΄ λ¬Έμ λ₯Ό μλ³νμμμ€.
Examples of Real-World Error Scenarios and Sentry Solutions
Sentryκ° μΌλ°μ μΈ νλ‘ νΈμλ μ€λ₯λ₯Ό ν΄κ²°νλ λ° μ΄λ»κ² λμμ΄ λλμ§μ λν μ€μ μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
1. JavaScript Exception in a Third-Party Library:
Scenario: μ ν리μΌμ΄μ μ΄ νμ¬ JavaScript λΌμ΄λΈλ¬λ¦¬μ μμ‘΄ν©λλ€. λΌμ΄λΈλ¬λ¦¬μ μ΅κ·Ό μ λ°μ΄νΈλ‘ μΈν΄ νΉμ μν©μμ μμΈκ° λ°μνλ λ²κ·Έκ° λ°μν©λλ€. μ¬μ©μκ° μ€λ₯λ₯Ό λ³΄κ³ νκΈ° μμνμ§λ§ λ¬Έμ κ° μ΄λμ μλμ§ νμ ν μ μμ΅λλ€.
Sentry Solution: Sentryλ μμΈλ₯Ό μΊ‘μ²νκ³ μμΈν μ€ν μΆμ μ μ 곡ν©λλ€. μ€ν μΆμ μ μ€λ₯κ° νμ¬ λΌμ΄λΈλ¬λ¦¬μμ λ°μνμμ λνλ λλ€. κ·Έλ° λ€μ λΌμ΄λΈλ¬λ¦¬μ μ€λͺ μλ₯Ό μ‘°μ¬νκ±°λ λΌμ΄λΈλ¬λ¦¬μ κ°λ°μμκ² λ¬Έμνμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€. λ¬Έμ κ° ν΄κ²°λ λκΉμ§ λΌμ΄λΈλ¬λ¦¬μ μ΄μ λ²μ μΌλ‘ μΌμμ μΌλ‘ λ€μ΄κ·Έλ μ΄λνλ κ²μ κ³ λ €ν μλ μμ΅λλ€.
2. Failed API Request:
Scenario: μ ν리μΌμ΄μ μ΄ λ°±μλ μλ²μ API μμ²μ ν©λλ€. λ€νΈμν¬ μ€λ₯ λλ μλ² μΈ‘ λ¬Έμ λ‘ μΈν΄ API μμ²μ΄ μ€ν¨ν©λλ€. μ¬μ©μκ° λ°μ΄ν°λ₯Ό λ‘λνκ±°λ νΉμ μμ μ μνν μ μμ΅λλ€.
Sentry Solution: Sentryλ μ€ν¨ν API μμ²μ μΊ‘μ²νκ³ μμ² URL, HTTP μν μ½λ λ° μλ΅ λ³Έλ¬Έμ λν μ 보λ₯Ό μ 곡ν©λλ€. κ·Έλ° λ€μ λ°±μλ μλ² λ‘κ·Έλ₯Ό μ‘°μ¬νμ¬ μ€λ₯μ μμΈμ μλ³ν μ μμ΅λλ€. λν μΌμμ μΈ λ€νΈμν¬ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν΄ νλ‘ νΈμλ μ½λμ μ¬μλ λ‘μ§μ ꡬνν μλ μμ΅λλ€. Axios μΈν°μ ν°μ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν μ€λ₯λ₯Ό μλμΌλ‘ μΊ‘μ²νλ κ²μ κ³ λ €νμμμ€.
3. Performance Bottleneck:
Scenario: μ ν리μΌμ΄μ μ μ±λ₯μ΄ νΉν νΉμ νμ΄μ§ λλ νΉμ μ¬μ©μμ κ²½μ° λ립λλ€. νλ‘ νΈμλ μ½λμ μ±λ₯ λ³λͺ© νμμ΄ μλ€κ³ μμ¬λμ§λ§ μ΄λμλΆν° μμν΄μΌ ν μ§ νμ ν μ μμ΅λλ€.
Sentry Solution: Sentryμ μ±λ₯ λͺ¨λν°λ§ κΈ°λ₯μ μ¬μ©νλ©΄ λλ¦¬κ² λ‘λλλ νμ΄μ§μ μ€λ μ€νλλ JavaScript ν¨μλ₯Ό μλ³ν μ μμ΅λλ€. κ·Έλ° λ€μ νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν ν¨μμ μ±λ₯μ μ‘°μ¬νκ³ μ΅μ νν μμμ μλ³ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ νΉμ ν¨μκ° λΆνμν κ³μ°μ μννκ±°λ λ무 λ§μ API μμ²μ μννλ κ²μ μ μ μμ΅λλ€. Sentryμ μΆμ κΈ°λ₯μ μ¬μ©μ λΈλΌμ°μ μμ λ°±μλ μλ²μ μ΄λ₯΄κΈ°κΉμ§ μ 체 μμ² μλͺ μ£ΌκΈ°λ₯Ό μ΄ν΄νλ λ° λμμ΄ λ©λλ€.
4. Cross-Browser Compatibility Issue:
Scenario: μ ν리μΌμ΄μ μ΄ Chrome λ° Firefoxμμ μλ²½νκ² μλνμ§λ§ Internet Explorer λλ Safariμμ μ€λ₯κ° λ°μν©λλ€. μ΄λ¬ν κ΅μ°¨ λΈλΌμ°μ νΈνμ± λ¬Έμ λ₯Ό μλ³νκ³ μμ ν΄μΌ ν©λλ€.
Sentry Solution: Sentryλ μ€λ₯λ₯Ό μΊ‘μ²νκ³ μ¬μ©μμ λΈλΌμ°μ λ° μ΄μ 체μ μ λν μ 보λ₯Ό μ 곡ν©λλ€. μ΄ μ 보λ₯Ό ν΅ν΄ μν₯μ λ°λ λΈλΌμ°μ μμ μ€λ₯λ₯Ό μ¬ννκ³ νΈνμ± λ¬Έμ μ μμΈμ μλ³ν μ μμ΅λλ€. λΈλΌμ°μ κ°μ μ°¨μ΄μ μ ν΄κ²°νκΈ° μν΄ ν΄λ¦¬ν λλ μ‘°κ±΄λΆ μ½λλ₯Ό μ¬μ©ν΄μΌ ν μλ μμ΅λλ€. Sentryμ ν¨κ» BrowserStackκ³Ό κ°μ μλΉμ€λ₯Ό μ¬μ©νλ©΄ μ΄ νλ‘μΈμ€λ₯Ό ν¬κ² μ§μν μ μμ΅λλ€.
Sentry Alternatives
Sentryλ λ리 μ¬μ©λλ μ νμ΄μ§λ§ λ€λ₯Έ μ¬λ¬ μ€λ₯ μΆμ λꡬλ₯Ό μ¬μ©ν μ μμ΅λλ€. κ³ λ €ν΄μΌ ν λͺ κ°μ§ λμμ λ€μκ³Ό κ°μ΅λλ€:
- Bugsnag: Sentryμ μ μ¬ν κΈ°λ₯μ κ°μΆ λ λ€λ₯Έ ν¬κ΄μ μΈ μ€λ₯ μΆμ νλ«νΌμ λλ€.
- Rollbar: κ°λ°μ μν¬νλ‘μ μ€μ μ λ κ°λ ₯ν μ€λ₯ μΆμ λꡬμ λλ€.
- Raygun: μ¬μ©μ μΉνμ μΈ μΈν°νμ΄μ€λ‘ μ€λ₯ μΆμ λ° μ±λ₯ λͺ¨λν°λ§μ μ 곡ν©λλ€.
- LogRocket: μ€λ₯ μΆμ κ³Ό μΈμ κΈ°λ‘μ κ²°ν©νμ¬ μ€λ₯κ° λ°μνμ λ μ¬μ©μκ° κ²½νν λ΄μ©μ μ ννκ² λ³Ό μ μμ΅λλ€.
κ·νμ μꡬ μ¬νμ κ°μ₯ μ ν©ν μ€λ₯ μΆμ λꡬλ κ·νμ νΉμ μꡬ μ¬νκ³Ό μμ°μ λ°λΌ λ¬λΌμ§λλ€. κ²°μ μ λ΄λ¦¬κΈ° μ μ λͺ κ°μ§ λ€λ₯Έ λꡬλ₯Ό μ¬μ©ν΄ 보μμμ€.
Conclusion
νλ‘ νΈμλ μ€λ₯ μΆμ μ μμ μ μ΄κ³ μ λ’°ν μ μλ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° νμμ μΈ λ°©λ²μ λλ€. Sentryλ μ€λ₯λ₯Ό μ μνκ² μλ³, μ§λ¨ λ° ν΄κ²°νκ³ μ¬μ©μ κ²½νμ κ°μ νκ³ μ ν리μΌμ΄μ μμ μ±μ λμ΄λ λ° λμμ΄ λλ κ°λ ₯ν λꡬμ λλ€. μ΄ κ°μ΄λμ μ€λͺ λ λ¨κ³λ₯Ό λ°λ₯΄κ³ λͺ¨λ² μ¬λ‘λ₯Ό ν΅ν©ν¨μΌλ‘μ¨ Sentryλ₯Ό νμ©νμ¬ λ λμ μΉ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.
κ°λ ₯ν μ€λ₯ μΆμ μ λ΅μ ꡬννλ κ²μ λ¨μν λ²κ·Έλ₯Ό μμ νλ κ²μ΄ μλλΌ μ¬μ©μμ μ λ’°λ₯Ό ꡬμΆνκ³ μ ν리μΌμ΄μ μ΄ μ§μμ μΌλ‘ κΈμ μ μΈ κ²½νμ μ 곡νλλ‘ νλ κ²μ λλ€. μ€λλ μ κ²½μμ μΈ λμ§νΈ νκ²½μμ μννκ³ μ€λ₯ μλ μ¬μ©μ κ²½νμ μ 곡νλ κ²μ μ±κ³΅μ λ§€μ° μ€μν©λλ€. μ€λ₯ μΆμ μ μ°μ μνλ©΄ μ¬μ©μμ λΉμ¦λμ€ λͺ¨λκ° κ°μ¬ν κ²μ λλ€.