현대 애플리케이션 개발에서 오류 추적 및 성능 모니터링은 사용자 경험을 향상시키는 데 중요한 요소입니다. 이번 글에서는 Node.js 애플리케이션에 Sentry를 통합하여 실시간으로 오류를 추적하고 성능을 모니터링하는 방법에 대해 자세히 알아보겠습니다.
Sentry란?
Sentry는 애플리케이션의 오류 추적 및 성능 모니터링을 위한 강력한 도구입니다. 개발자들이 애플리케이션의 에러를 실시간으로 감지하고, 추적하며, 분석할 수 있게 도와줍니다. 이를 통해 빠르게 문제를 해결하고 사용자 경험을 향상시킬 수 있습니다.
Sentry의 주요 기능
- 에러 추적: 코드에서 발생하는 예외와 오류를 자동으로 감지하여 보고합니다.
- 성능 모니터링: 애플리케이션의 성능을 실시간으로 모니터링하고, 지연 시간이나 성능 저하의 원인을 분석할 수 있습니다.
- 통합: 다양한 프로그래밍 언어와 프레임워크를 지원하며, GitHub, Slack, Jira 등과 같은 도구들과 쉽게 통합할 수 있습니다.
- [알림: 에러나 성능 문제 발생 시 즉시 알림을 받을 수 있습니다.
- Release Tracking: 특정 릴리즈에서 발생한 문제를 추적할 수 있습니다.
Node.js 애플리케이션에 Sentry 통합하기
이번에는 Node.js 애플리케이션에 Sentry를 통합하는 방법을 단계별로 알아보겠습니다.
1. Sentry SDK 설치
먼저 `@sentry/node` 패키지를 설치해야 합니다. 터미널에서 다음 명령어를 실행하세요:
npm install @sentry/node
2. Sentry 설정
애플리케이션의 시작 파일(예: `app.js` 또는 `index.js`)에서 Sentry를 설정합니다. Sentry DSN(데이터 소스 네임)은 Sentry 프로젝트 설정에서 찾을 수 있습니다.
const Sentry = require('@sentry/node');
const express = require('express');
const app = express();
// Sentry 초기화
Sentry.init({ dsn: 'YOUR_SENTRY_DSN' });
// Sentry 요청 핸들러를 모든 요청의 첫 번째 미들웨어로 사용합니다.
app.use(Sentry.Handlers.requestHandler());
// 예제 라우트
app.get('/', function mainHandler(req, res) {
throw new Error('Broke!');
});
// Sentry 에러 핸들러를 오류 미들웨어로 사용합니다.
app.use(Sentry.Handlers.errorHandler());
// 포트 설정 및 서버 시작
app.listen(3000, () => {
console.log('Server running on port 3000');
});
3. 에러 핸들러 추가
Sentry의 에러 핸들러를 Express.js 애플리케이션의 마지막 에러 핸들러로 추가합니다. 이 핸들러는 오류를 Sentry에 자동으로 보고합니다.
// 모든 에러를 Sentry로 전송한 후 사용자에게 응답
app.use(Sentry.Handlers.errorHandler());
// 일반 오류 핸들러
app.use(function onError(err, req, res, next) {
// 오류 처리 로직 추가
res.statusCode = 500;
res.end(res.sentry + "\n");
});
추가적인 구성 옵션
Sentry는 다양한 설정 옵션을 제공합니다. 몇 가지 유용한 옵션을 소개합니다.
환경(environment)
애플리케이션이 실행되는 환경(예: production, staging)을 설정할 수 있습니다.
Sentry.init({
dsn: 'YOUR_SENTRY_DSN',
environment: 'production'
});
릴리즈(release)
릴리즈 버전을 설정하여 특정 릴리즈에서 발생한 문제를 추적할 수 있습니다.
Sentry.init({
dsn: 'YOUR_SENTRY_DSN',
release: 'my-project-name@2.3.12'
});
샘플링 비율(tracesSampleRate)
성능 데이터를 샘플링할 비율을 설정할 수 있습니다.
Sentry.init({
dsn: 'YOUR_SENTRY_DSN',
tracesSampleRate: 1.0 // 100% 샘플링
});
실제 예시
아래는 Sentry가 통합된 간단한 Express.js 애플리케이션의 예시입니다.
const Sentry = require('@sentry/node');
const express = require('express');
const app = express();
// Sentry 초기화
Sentry.init({ dsn: 'YOUR_SENTRY_DSN' });
// 모든 요청에 대해 Sentry 요청 핸들러를 사용
app.use(Sentry.Handlers.requestHandler());
// 예제 라우트
app.get('/', (req, res) => {
res.send('Hello, world!');
});
// 의도적으로 오류를 발생시키는 라우트
app.get('/error', (req, res) => {
throw new Error('This is a test error!');
});
// Sentry 에러 핸들러 사용
app.use(Sentry.Handlers.errorHandler());
// 포트 설정 및 서버 시작
app.listen(3000, () => {
console.log('Server running on port 3000');
});
위 예제에서 `/error` 라우트는 의도적으로 오류를 발생시키며, 이 오류는 Sentry로 자동 보고됩니다.
결론
Sentry를 사용하면 Node.js 애플리케이션의 오류를 실시간으로 추적하고 성능을 모니터링할 수 있습니다. 이를 통해 사용자 경험을 향상시키고, 문제를 빠르게 해결할 수 있습니다. 이 가이드를 참고하여 Sentry를 쉽게 통합하고 애플리케이션의 안정성과 성능을 높여보세요.