๐จ 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๋ฅผ ํ์ฉํ๋ฉด, ์๋น์ค์ ํ์ง์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค! ๐
๐ฅ “์ด์ ๋ฒ๊ทธ๋ ๋ ์ด์ ๋ฏธ์คํฐ๋ฆฌ๊ฐ ์๋๋ค!”
๐ท ์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ด ์๋น! ๐ท
'Dev-ops' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ข ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes) ๊ตฌ์กฐ ์๋ฒฝ ๊ฐ์ด๋ โ (0) | 2025.04.02 |
---|---|
๐ดโโ ๏ธ Bitbucket ์๋ฒฝ ๊ฐ์ด๋ (0) | 2025.03.31 |
๐ Heroku ์๋ฒฝ ๊ฐ์ด๋ (0) | 2025.03.30 |
๐ GCP (Google Cloud Platform) (0) | 2025.03.29 |
๐ GitLab ์๋ฒฝ ๊ฐ์ด๋ (0) | 2025.03.28 |