Sentry 연동으로 실시간 에러 추적 및 알림 받기
Django DRF 프로젝트에 Sentry를 연동하여 운영 환경에서 발생하는 에러를 실시간으로 추적하고 개발자에게 즉시 알림을 보내는 시스템 구축
Sentry가 필요한 이유
에러 발생 즉시 실시간 알림 (Slack, Email 등)
에러 발생 컨텍스트 (Request 정보, User 정보 등) 자동 수집
에러 발생 빈도, 영향받는 사용자 수 등 통계 제공
동일 에러 그룹핑 관리, 릴리즈 버전별 추적
Sentry 프로젝트 생성 및 기본 연동
Sentry 프로젝트 생성
Sentry.io 가입 후 Django 플랫폼 선택
DSN(Data Source Name) 발급 받기
환경 변수로 DSN 관리 필수
SDK 설치 및 설정
pip install sentry-sdk# settings.py
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
SENTRY_DSN = ENV.str("SENTRY_DSN", default=None)
if SENTRY_DSN:
sentry_sdk.init(
dsn=SENTRY_DSN,
integrations=[DjangoIntegration()],
traces_sample_rate=1.0 if ENV.str("DJANGO_SETTINGS_MODULE") == "config.settings.production" else 0.0,
release=ENV.str("APP_VERSION", default="dev"),
environment=ENV.str("DJANGO_SETTINGS_MODULE").split(".")[-1],
send_default_pii=False,
)컨텍스트 및 태그 추가
사용자 정보 자동 수집
Django 인증 시스템과 자동 통합
로그인된 사용자의 id, email, username 자동 수집
커스텀 미들웨어로 태그 및 컨텍스트 추가
# middleware.py
import sentry_sdk
class SentryContextMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
sentry_sdk.set_tag("user_level", request.user.level)
sentry_sdk.set_context("user_info", {
"name": request.user.get_full_name(),
"company": request.user.company.name if request.user.company else "N/A",
})
response = self.get_response(request)
return response성능 모니터링
성능 추적 활성화
traces_sample_rate설정으로 성능 모니터링 활성화가장 느린 API 엔드포인트 확인
N+1 쿼리 문제 탐지
운영 환경에서만 적절한 샘플링 비율 설정
실시간 알림 설정
Slack 연동
Sentry와 Slack 워크스페이스 연동
알림 규칙 생성: 운영 환경 에러 발생 시 특정 채널로 알림
조건별 알림 설정 (에러 빈도, 특정 태그 등)
고급 설정 및 주의사항
민감 정보 필터링
def before_send(event, hint):
if 'exc_info' in hint:
exc_type, exc_value, tb = hint['exc_info']
if isinstance(exc_value, (PermissionDenied, SuspiciousOperation)):
return None
if 'request' in event and 'data' in event['request']:
if 'password' in event['request']['data']:
event['request']['data']['password'] = "[FILTERED]"
return event수동 에러 보고
# 비즈니스 로직 실패 케이스 보고
sentry_sdk.capture_message("결제 실패", level="warning")
# 예외를 처리했지만 Sentry에 보고
sentry_sdk.capture_exception(e)릴리즈 추적
CI/CD 파이프라인에서 Git Commit 해시나 버전 태그를 release 값으로 설정
버전별 에러 발생 패턴 추적
Last updated
