서비스가 다운됐는데 사용자보다 늦게 알게 되는 것만큼 창피한 일이 없습니다. 모니터링 시스템이 없으면 문제가 발생해도 사용자 민원이 들어올 때까지 모르고 있게 됩니다. 소규모 서비스라도 기본적인 모니터링은 필수입니다.
무엇을 모니터링해야 하는가
가용성(Uptime) 모니터링
서비스가 살아있는지 주기적으로 확인합니다. 5분마다 서비스에 HTTP 요청을 보내 응답이 없으면 즉시 알림을 보냅니다. 가장 기본적이고 중요한 모니터링입니다.
에러 모니터링
서버나 클라이언트에서 발생하는 예외(Exception)를 수집합니다. 에러의 종류, 발생 횟수, 영향받은 사용자 수를 추적합니다.
성능 모니터링
API 응답 시간, 데이터베이스 쿼리 시간, 페이지 로딩 속도를 추적합니다. 응답이 느려지는 것은 서비스 다운의 전조 증상인 경우가 많습니다.
인프라 모니터링
CPU 사용률, 메모리, 디스크 공간을 추적합니다. 특히 디스크 공간이 가득 차서 서비스가 다운되는 경우가 실제로 자주 발생합니다.
비즈니스 지표 모니터링
기술적 지표 외에 신규 가입 수, 결제 수, 핵심 기능 사용률도 모니터링합니다. 어느 날 갑자기 가입 수가 0이 되면 가입 플로우에 문제가 생긴 것입니다.
모니터링 도구
Uptime Robot (무료)
가장 간단한 업타임 모니터링 도구입니다. 무료로 50개 모니터, 5분 간격 체크를 지원합니다. 서비스가 다운되면 이메일, Slack, 카카오톡(웹훅) 등으로 알림을 보냅니다. 시작점으로 가장 적합합니다.
Better Uptime
업타임 모니터링 + 상태 페이지를 제공합니다. 상태 페이지(status.yourservice.com)를 만들어 사용자에게 서비스 상태를 공개할 수 있습니다. 무료 플랜으로도 기본 기능을 사용할 수 있습니다.
Sentry
에러 모니터링의 사실상 표준입니다. JavaScript, Python, Go 등 거의 모든 언어를 지원합니다. 에러가 발생하면 스택 트레이스, 브라우저 정보, 사용자 행동 컨텍스트를 함께 제공합니다. 소규모 프로젝트는 무료로 사용 가능합니다.
// Sentry 초기화 예시 (Next.js)
import * as Sentry from "@sentry/nextjs";
Sentry.init({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 1.0,
});
Datadog / New Relic
종합적인 APM(Application Performance Monitoring) 도구입니다. 강력하지만 비용이 높습니다. 서비스가 성장하고 복잡해졌을 때 고려할 도구입니다.
Grafana + Prometheus (오픈소스)
무료로 강력한 메트릭 수집과 시각화를 구축할 수 있습니다. 설정이 복잡하지만 자체 서버에서 운영할 수 있어 데이터 주권을 가집니다.
알림 설정 방법
모니터링 도구에서 알림 채널을 설정합니다.
이메일 알림
가장 기본적인 알림입니다. 하지만 이메일은 즉각적이지 않을 수 있습니다.
Slack/Discord 웹훅
팀 채널로 즉시 알림이 옵니다. 장애 발생과 복구를 팀 전체가 바로 알 수 있습니다.
PagerDuty / OpsGenie
온콜(On-call) 일정을 관리하고 심각도에 따라 담당자에게 전화나 SMS로 알림을 보냅니다. 서비스가 커지면 도입을 고려합니다.
알림 피로(Alert Fatigue) 방지
알림이 너무 많으면 오히려 중요한 알림을 놓치게 됩니다.
알림 최소화 원칙:
- 즉각 대응이 필요한 것만 알림 설정
- 임계치 조정: CPU 80% 이상 10분 이상 지속 시 알림 (일시적 급증은 무시)
- 알림 그루핑: 같은 종류의 에러는 1개로 묶어서 알림
상태 페이지(Status Page)
사용자에게 서비스 상태를 공개하는 페이지입니다.
장애가 발생했을 때 사용자에게 투명하게 알리는 것이 신뢰를 유지하는 방법입니다. 묵묵부답보다 "현재 서비스 장애가 발생했습니다. 복구 중입니다"가 훨씬 낫습니다.
상태 페이지 도구: Atlassian Statuspage, Better Uptime, Instatus, Cachet(오픈소스)
장애 대응 절차(Runbook)
반복되는 장애 유형에 대한 대응 절차를 문서화합니다.
예시 Runbook: 데이터베이스 연결 실패
- 데이터베이스 서버 상태 확인
- 연결 pool 설정 확인
- 최근 배포 내역 확인 (환경 변수 변경 여부)
- 데이터베이스 재시작 여부 결정
Runbook이 있으면 새벽에 장애가 발생해도 당황하지 않고 체계적으로 대응할 수 있습니다.
기본적인 모니터링만 갖춰도 장애 발견 시간을 몇 시간에서 몇 분으로 줄일 수 있습니다. Uptime Robot + Sentry를 설치하는 데 30분이면 충분합니다. 지금 바로 시작하세요.