Dev-ops

๐Ÿšจ Sentry ์™„๋ฒฝ ๊ฐ€์ด

xeunnie 2025. 4. 1. 01:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿšจ Sentry ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์˜ค๋ฅ˜ ์ถ”์  & ๋ชจ๋‹ˆํ„ฐ๋ง ๐ŸŽฏ

 

“๋‚ด ์„œ๋น„์Šค์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ… ๋Œ€์ฒด ์–ด๋””์„œ ๋‚œ ๊ฑฐ์ง€?”

“์œ ์ €๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์ œ๋ณดํ–ˆ๋Š”๋ฐ, ๋‚ด ๋กœ์ปฌ์—์„œ๋Š” ์žฌํ˜„์ด ์•ˆ ๋ผ!”

 

์ด๋Ÿฐ ๊ณ ๋ฏผ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ Sentry!

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Sentry๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

๐Ÿ“Œ ๋ชฉ์ฐจ

 

1๏ธโƒฃ Sentry๋ž€? - ๊ฐœ๋… ๋ฐ ํŠน์ง•

2๏ธโƒฃ Sentry์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

3๏ธโƒฃ Sentry์˜ ๋™์ž‘ ์›๋ฆฌ

4๏ธโƒฃ Sentry ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์„ค์ • (React & Next.js ์˜ˆ์ œ ํฌํ•จ)

5๏ธโƒฃ Sentry์—์„œ ์˜ค๋ฅ˜ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•

6๏ธโƒฃ Sentry์˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ

7๏ธโƒฃ Sentry๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ ์‚ฌ๋ก€

8๏ธโƒฃ ๊ฒฐ๋ก 

1๏ธโƒฃ Sentry๋ž€? - ๊ฐœ๋… ๋ฐ ํŠน์ง• ๐ŸŽฏ

 

๐Ÿ”น Sentry๋ž€?

 

Sentry๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ ์˜ค๋ฅ˜ ์ถ”์  ๋ฐ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋กœ,

ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, ๋ชจ๋ฐ”์ผ ์•ฑ๊นŒ์ง€ ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ๊ฐ„ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ Sentry์˜ ์ฃผ์š” ํŠน์ง•

โœ… ์‹ค์‹œ๊ฐ„ ์˜ค๋ฅ˜ ์ถ”์  (๋ฒ„๊ทธ ๋ฐœ์ƒ ์ฆ‰์‹œ ์•Œ๋ฆผ)

โœ… ์˜ค๋ฅ˜ ์žฌํ˜„ ๊ฐ€๋Šฅ (Stack Trace ์ œ๊ณต)

โœ… ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง (์‘๋‹ต ์†๋„, ๋ Œ๋”๋ง ์‹œ๊ฐ„ ๋ถ„์„)

โœ… ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์ง€์› (JavaScript, React, Vue, Node.js, Python, Java ๋“ฑ)

โœ… ๊นƒํ—ˆ๋ธŒ, ์Šฌ๋ž™ ๋“ฑ๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅ

 

๐Ÿ’ก Sentry๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์ œ๋ณดํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ฐ์ง€ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค! ๐Ÿš€

2๏ธโƒฃ Sentry์˜ ์ฃผ์š” ๊ธฐ๋Šฅ โš™๏ธ

๊ธฐ๋Šฅ์„ค๋ช…

์—๋Ÿฌ ์ถ”์  (Error Tracking) ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๋ถ„์„
Stack Trace ์ œ๊ณต ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ฝ”๋“œ์˜ ํ˜ธ์ถœ ์Šคํƒ์„ ํ™•์ธ ๊ฐ€๋Šฅ
์ด์Šˆ ๊ทธ๋ฃนํ•‘ (Issue Grouping) ๋™์ผํ•œ ์œ ํ˜•์˜ ์˜ค๋ฅ˜๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ด€๋ฆฌ
๋ฆด๋ฆฌ์ฆˆ ์ถ”์  (Release Tracking) ๋ฐฐํฌ ๋ฒ„์ „๋ณ„๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง
์œ ์ € ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฝํ—˜ํ•œ ์˜ค๋ฅ˜๋ฅผ ์ง์ ‘ ๋ณด๊ณ  ๊ฐ€๋Šฅ
์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง (Performance Monitoring) API ์‘๋‹ต ์‹œ๊ฐ„, ๋ Œ๋”๋ง ์†๋„ ๋ถ„์„

๐Ÿ’ก ๋‹จ์ˆœํ•œ ์˜ค๋ฅ˜ ๊ฐ์ง€ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ฝ”๋“œ์˜ ์„ฑ๋Šฅ๊นŒ์ง€ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค!

3๏ธโƒฃ Sentry์˜ ๋™์ž‘ ์›๋ฆฌ ๐Ÿ—๏ธ

 

Sentry๋Š” ํฌ๊ฒŒ ์—๋Ÿฌ ์ˆ˜์ง‘ → ๋ถ„์„ → ์•Œ๋ฆผ → ํ•ด๊ฒฐ์˜ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

โœ… 1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

์˜ˆ์ œ: ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋Š”๋ฐ, TypeError๊ฐ€ ๋ฐœ์ƒ

Sentry SDK๊ฐ€ ์ž๋™์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€

 

โœ… 2. Sentry ์„œ๋ฒ„๋กœ ์˜ค๋ฅ˜ ์ „์†ก

์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ™˜๊ฒฝ (๋ธŒ๋ผ์šฐ์ €, OS, ๋ฒ„์ „ ์ •๋ณด ๋“ฑ) ํฌํ•จ

Stack Trace์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…

 

โœ… 3. ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์˜ค๋ฅ˜ ํ™•์ธ

์˜ค๋ฅ˜๊ฐ€ ์–ธ์ œ, ์–ด๋””์„œ, ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋ถ„์„ ๊ฐ€๋Šฅ

 

โœ… 4. ์•Œ๋ฆผ ์ „์†ก (Slack, Email, Discord ๋“ฑ)

ํŠน์ • ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐœ๋ฐœํŒ€์—๊ฒŒ ์ฆ‰์‹œ ์•Œ๋ฆผ

 

โœ… 5. ํ•ด๊ฒฐ ๋ฐ ๋ฐฐํฌ

์˜ค๋ฅ˜ ์ˆ˜์ • ํ›„ ๋ฆด๋ฆฌ์ฆˆ ์ถ”์  ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐฐํฌ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง

 

๐Ÿ’ก ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ , ์›์ธ์„ ๋ถ„์„ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ!

4๏ธโƒฃ Sentry ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์„ค์ • (React & Next.js ์˜ˆ์ œ ํฌํ•จ) ๐Ÿ› ๏ธ

 

๐Ÿ”น (1) Sentry ๊ณ„์ • ์ƒ์„ฑ

 

๐Ÿ‘‰ Sentry ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ํšŒ์›๊ฐ€์ž… ํ›„ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

 

๐Ÿ”น (2) React ํ”„๋กœ์ ํŠธ์— Sentry ์„ค์น˜

npm install --save @sentry/react @sentry/browser

๐Ÿ’ก Next.js์˜ ๊ฒฝ์šฐ @sentry/nextjs ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉ!

npm install --save @sentry/nextjs

๐Ÿ”น (3) Sentry ๊ธฐ๋ณธ ์„ค์ • (React)

import * as Sentry from "@sentry/react";

Sentry.init({
  dsn: "https://YOUR_SENTRY_DSN",
  integrations: [new Sentry.BrowserTracing()],
  tracesSampleRate: 1.0, // 100% ํŠธ๋ž˜ํ”ฝ ๋ชจ๋‹ˆํ„ฐ๋ง
});

๐Ÿ’ก ์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ Sentry๊ฐ€ ๊ฐ์ง€ํ•œ๋‹ค!

 

๐Ÿ”น (4) Next.js์—์„œ Sentry ์„ค์ •

 

๐Ÿ‘‰ next.config.js์— ์ถ”๊ฐ€

const { withSentryConfig } = require("@sentry/nextjs");

module.exports = withSentryConfig(
  {
    // ๊ธฐ์กด Next.js ์„ค์ •
  },
  {
    silent: true, // ๋นŒ๋“œ ์ค‘ ๋ถˆํ•„์š”ํ•œ ๋กœ๊ทธ ๋ฐฉ์ง€
  }
);

๐Ÿ’ก ์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด, Next.js ํ”„๋กœ์ ํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ž๋™์œผ๋กœ Sentry๋กœ ์ „์†ก๋œ๋‹ค!

5๏ธโƒฃ Sentry์—์„œ ์˜ค๋ฅ˜ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿ”

 

โœ… 1. ๊ธฐ๋ณธ์ ์ธ ์˜ค๋ฅ˜ ๋กœ๊น…

try {
  throw new Error("Something went wrong!");
} catch (error) {
  Sentry.captureException(error);
}

๐Ÿ’ก ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Sentry ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ!

 

โœ… 2. ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ํ•จ๊ป˜ ๋กœ๊น…

Sentry.setUser({
  id: "1234",
  email: "user@example.com",
  username: "johndoe",
});

Sentry.captureException(new Error("User action error"));

๐Ÿ’ก ์–ด๋–ค ์œ ์ €๊ฐ€, ์–ด๋–ค ์˜ค๋ฅ˜๋ฅผ ๊ฒช์—ˆ๋Š”์ง€ ์ถ”์  ๊ฐ€๋Šฅ!

 

โœ… 3. ํŠน์ • ์ด๋ฒคํŠธ ๊ฐ์ง€

Sentry.captureMessage("Custom log message", "info");

๐Ÿ’ก ์—๋Ÿฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํŠน์ • ์ด๋ฒคํŠธ๋„ ๊ธฐ๋ก ๊ฐ€๋Šฅ!

6๏ธโƒฃ Sentry์˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ ๐Ÿš€

 

Sentry๋Š” ๋‹จ์ˆœํ•œ ์˜ค๋ฅ˜ ์ถ”์ ์„ ๋„˜์–ด ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง๋„ ์ œ๊ณตํ•œ๋‹ค.

 

๐Ÿ”น (1) ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„ ์ธก์ •

Sentry.startTransaction({ name: "Load Dashboard" });

๐Ÿ’ก ์›น ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์‹œ๊ฐ„์„ ์ถ”์ ํ•˜์—ฌ ์ตœ์ ํ™” ๊ฐ€๋Šฅ!

 

๐Ÿ”น (2) API ์‘๋‹ต ์‹œ๊ฐ„ ๋ถ„์„

const transaction = Sentry.startTransaction({ name: "Fetch User Data" });

fetch("/api/user")
  .then((res) => res.json())
  .then((data) => {
    transaction.finish();
  });

๐Ÿ’ก API ์‘๋‹ต์ด ๋А๋ฆด ๊ฒฝ์šฐ ์–ด๋””์„œ ๋ณ‘๋ชฉ์ด ์ƒ๊ธฐ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ!

7๏ธโƒฃ Sentry๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ ์‚ฌ๋ก€ ๐ŸŽฏ

 

โœ… ์‚ฌ๋ก€ 1: ์‹ค์‹œ๊ฐ„ ์˜ค๋ฅ˜ ๊ฐ์ง€ ๋ฐ ๋น ๋ฅธ ๋Œ€์‘

๋ฌธ์ œ: ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

ํ•ด๊ฒฐ: Sentry์˜ Stack Trace์™€ ์œ ์ € ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ ์ƒํ™ฉ์„ ์žฌํ˜„

 

โœ… ์‚ฌ๋ก€ 2: ์„ฑ๋Šฅ ์ €ํ•˜ ์›์ธ ๋ถ„์„

๋ฌธ์ œ: ํŠน์ • ํŽ˜์ด์ง€์—์„œ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ฆผ

ํ•ด๊ฒฐ: Sentry์˜ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”

8๏ธโƒฃ ๊ฒฐ๋ก : Sentry๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ  ๐Ÿค”

 

โœ… ์‹ค์‹œ๊ฐ„ ์˜ค๋ฅ˜ ๊ฐ์ง€ ๋ฐ ์ถ”์ 

โœ… ์ž๋™ ์˜ค๋ฅ˜ ๋กœ๊น… ๋ฐ ์ด์Šˆ ๊ทธ๋ฃนํ•‘

โœ… Slack, GitHub ๋“ฑ ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ์—ฐ๋™ ๊ฐ€๋Šฅ

โœ… ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€ ์ œ๊ณตํ•˜์—ฌ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

 

๐Ÿ’ก Sentry๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ์„œ๋น„์Šค์˜ ํ’ˆ์งˆ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค! ๐Ÿš€

๐Ÿ”ฅ “์ด์ œ ๋ฒ„๊ทธ๋Š” ๋” ์ด์ƒ ๋ฏธ์Šคํ„ฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค!”

๐ŸŒท ์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น! ๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•