실제로 작동하는 웹사이트 모니터링 설정 방법: 개발자 가이드
Source: Dev.to
귀하의 웹사이트가 다운되었습니다.
아직은 모르겠지만, 사용자들은 이미 알고 있습니다. 그들은 떠나고 있습니다. 일부는 이에 대해 트윗을 하고 있습니다.
SSL 인증서가 3일 전에 만료되었고, Chrome이 모든 사람에게 무서운 “Not Secure” 경고를 표시하고 있습니다.
도메인이 만료되었고 갱신을 잊어버리셨나요?
이러한 상황은 매일 수천 번 발생합니다. 답답한 점은? 완전히 예방할 수 있다는 것입니다.
대부분의 모니터링 설정이 실패하는 이유
문제 1: 단일 위치 모니터링
서버는 버지니아에 있습니다. 모니터링도 버지니아에서 핑을 보냅니다. 모든 것이 정상으로 보입니다.
한편, 유럽 사용자는 CDN 문제로 인해 5초 정도 로드 시간이 발생하고, 중동·북아프리카(MENA) 지역 사용자는 라우팅 문제로 전혀 연결할 수 없습니다.
해결책: 여러 지리적 위치에서 모니터링합니다.
문제 2: HTTP 200만 확인하기
# This is what most basic monitoring does
curl -s -o /dev/null -w "%{http_code}" https://yoursite.com
# Returns: 200
# You think: "Great, site is up!"
200 상태가 사이트가 정상 작동한다는 의미는 아닙니다. API가 오류를 반환하고 있거나 데이터베이스 연결에 문제가 있을 수 있습니다.
문제 3: SSL 인증서 관리 소홀
SSL 인증서는 만료됩니다. 만료되면 브라우저가 사이트 접근을 완전히 차단합니다.
문제 4: 도메인 만료
당황스러운 일이지만 생각보다 자주 발생합니다. 도메인이 만료되는 이유는 다음과 같습니다:
- 등록된 신용카드가 만료됨
- 갱신 이메일이 스팸으로 이동함
- 도메인을 등록한 사람이 회사를 떠남
도메인이 만료되면 전체 온라인 존재가 사라집니다. 더 나아가 도메인 스니퍼가 몇 시간 안에 도메인을 차지할 수 있습니다.
적절한 모니터링 전략 구축
레이어 1: 엔드포인트 상태 확인
전용 상태 엔드포인트를 생성합니다:
// Express.js health endpoint example
app.get('/api/health', async (req, res) => {
const health = {
status: 'healthy',
timestamp: new Date().toISOString(),
checks: {}
};
// Check database
try {
await db.query('SELECT 1');
health.checks.database = 'ok';
} catch (e) {
health.checks.database = 'failing';
health.status = 'unhealthy';
}
// Check Redis
try {
await redis.ping();
health.checks.cache = 'ok';
} catch (e) {
health.checks.cache = 'failing';
health.status = 'unhealthy';
}
const statusCode = health.status === 'healthy' ? 200 : 503;
res.status(statusCode).json(health);
});
레이어 2: SSL 인증서 모니터링
다중 임계값에 대한 알림을 설정합니다:
| 만료 전 일수 | 알림 수준 |
|---|---|
| 30일 | 알림 |
| 14일 | 경고 |
| 7일 | 심각 |
| 1일 | 긴급 |
레이어 3: 도메인 만료 모니터링
도메인은 모든 것의 기반입니다. SSL과 별도로 모니터링하세요:
- 모든 도메인의 만료 날짜를 추적합니다
- 만료 60 / 30 / 14 / 7일 전에 알림을 설정합니다
- 보유한 보조 도메인도 포함합니다
- 레지스트라 이메일에 의존하지 마세요—스팸으로 필터링되는 경우가 많습니다
레이어 4: 다중 지역 검사
최소 세 개의 지리적 지역에서 모니터링합니다:
- 아메리카 – 미국 동부 / 서부
- 유럽 – 프랑크푸르트 / 런던
- 아시아‑태평양 / MENA – 싱가포르, 두바이, 리야드
Uptime Chef 로 설정하기
전 세계 위치(중동·아프리카 지역인 리야드, 카이로, 두바이 포함)에서 모니터링을 제공하기 때문에 대부분의 서비스가 제공하지 않는 기능을 활용하고자 Uptime Chef을 사용하고 있습니다.
Step 1: 모니터 추가
회원 가입 후:
- 홈페이지 모니터 – 기본 가용성
- 헬스 엔드포인트 모니터 –
/api/health엔드포인트 - SSL 모니터 – 인증서 만료 확인
- 도메인 모니터 – 도메인 만료 추적
Step 2: 웹훅 알림 설정
Slack 연동
{
"webhook_url": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"payload_template": {
"text": "🚨 Alert: {{monitor_name}} is {{status}}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*{{monitor_name}}*\nStatus: {{status}}\nResponse Time: {{response_time}}ms"
}
}
]
}
}
Discord 연동
{
"webhook_url": "https://discord.com/api/webhooks/YOUR/WEBHOOK",
"payload_template": {
"embeds": [
{
"title": "{{monitor_name}} is {{status}}",
"color": 15158332,
"fields": [
{ "name": "Response Time", "value": "{{response_time}}ms" }
]
}
]
}
}
Step 3: 상태 페이지 만들기
SaaS 제품의 경우, 공개 상태 페이지(예: status.yourcompany.com)를 제공하면 신뢰를 구축하고 지원 티켓을 감소시킬 수 있습니다.
Step 4: API 연동
// Fetch monitor status via API
const response = await fetch('https://dashboard.uptimechef.com/v1/monitors', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const monitors = await response.json();
monitors.forEach(monitor => {
console.log(`${monitor.name}: ${monitor.status}`);
});
Monitoring Checklist
- 홈페이지 및 핵심 페이지 모니터링
- API 헬스 엔드포인트 모니터링
- SSL 인증서 모니터링 (30 / 14 / 7‑일 알림)
- 도메인 만료 모니터링 (60 / 30 / 14 / 7‑일 알림)
- 2‑3개의 지리적 지역에서 모니터링
- 알림 설정 (email + Slack/Discord)
- 상태 페이지 설정
모니터링을 하지 않을 경우의 비용
| 시나리오 | 비용 |
|---|---|
| 평균 전자상거래 매출 | $10,000/일 |
| 1시간 미감지 다운타임 | ≈ $417 손실 |
| 6시간 야간 다운타임 | ≈ $2,500 손실 |
Uptime Chef의 무료 티어 또는 $0.99 / 월부터 시작하는 유료 플랜과 비교해 보세요.
결론
좋은 모니터링은 더 많은 알림을 의미하는 것이 아니라 올바른 알림을, 여러 위치에서, 올바른 엔드포인트에 대해 제공하는 것입니다.
기본부터 시작하세요:
- 건강 엔드포인트를 모니터링하세요
- 다중 지역 검사를 추가하세요
- SSL 및 도메인 만료를 추적하세요
- 알림을 Slack/Discord에 연결하세요
- 상태 페이지를 게시하세요
지금 견고한 전략을 구현하면, 사용자가 조용히 떠나는 모습을 더 이상 보지 않게 될 것입니다.
int, 단순히 홈페이지가 아니라
- SSL 인증서 만료 추적
- 도메인 만료일 추적
- 국제 사용자가 있다면 여러 지역에서 모니터링
- 기존 도구와 통합하기 위해 웹훅 설정
Try it out: Uptime Chef는 사이드 프로젝트를 위한 무료 플랜을 제공합니다.
모니터링 설정은 어떻게 하시나요? 댓글에 전쟁 이야기를 공유해주세요!