---
title: "Uptime Kuma 전화 알림: 장애가 나면 휴대폰이 울리게 만들기"
description: "Uptime Kuma는 90가지가 넘는 알림 제공자를 지원하지만 전화를 걸어 주는 것은 없습니다. Webhook 하나로 장애 발생 시 전화 알림을 추가하는 방법을 소개합니다."
date: 2026-08-28
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Uptime Kuma
  - 셀프 호스팅 모니터링
  - 전화 알림
  - Webhook 알림
  - 가동 시간 모니터링
  - 온콜
---

# Uptime Kuma 전화 알림: 장애가 나면 휴대폰이 울리게 만들기

Uptime Kuma는 90가지가 넘는 알림 제공자를 지원하지만, 그중 어느 것도 휴대폰을 울리게 하지는 못합니다. 모니터가 다운됐을 때 전화를 받으려면 Uptime Kuma의 **Webhook** 알림을 알림 유형이 **전화**로 설정된 Echobell 채널로 보내면 됩니다. 이 가이드에서는 사용할 커스텀 본문의 정확한 내용, 다운 알림과 복구 알림을 분리하는 방법, 그리고 이 구성을 조용히 망가뜨리는 두 가지 실수를 다룹니다.

[Uptime Kuma](https://github.com/louislam/uptime-kuma)는 현존하는 셀프 호스팅 가동 시간 모니터링 도구 중 가장 널리 쓰입니다. GitHub 스타는 약 9만 개이며, 2.5.0 버전이 2026년 8월에 나왔습니다. HTTP 엔드포인트, TCP 포트, DNS 레코드, Docker 컨테이너 등을 검사하고, 장애를 감지하는 능력은 정말로 뛰어납니다.

빈틈은 마지막 구간에 있습니다. 잠들어 있는 사람에게 알림을 전달하는 일입니다.

## Uptime Kuma가 스스로 전화를 걸 수 없는 이유

Uptime Kuma의 알림 목록은 깁니다. Telegram, Discord, Slack, 이메일, Gotify, ntfy를 비롯해 수십 가지가 있습니다. 하지만 모두 *메시지*를 전달합니다. 메시지는 휴대폰의 벨소리 스위치, 방해 금지 모드, iOS 집중 모드의 영향을 받습니다. 새벽 3시라면 알림은 도착하지만 아무 일도 일어나지 않는다는 뜻입니다.

"전화를 걸어 준다"는 공식 제공자는 없습니다. 보통은 다음과 같은 선택지로 귀결됩니다.

- **Twilio** — 이를 기반으로 음성 통화를 직접 만들 수는 있지만, Uptime Kuma의 Twilio 제공자는 SMS를 보냅니다. 음성 통화를 하려면 브리지 서비스를 작성하고, 번호를 구매하고, 통화당 요금을 내야 합니다.
- **PagerDuty, Zenduty, Spike.sh, Splunk On-Call** — 이들은 실제로 전화를 겁니다. 다만 그에 걸맞은 사용자당 과금이 붙는 본격적인 인시던트 관리 플랫폼입니다. 교대 일정과 에스컬레이션 정책이 필요하다면 올바른 선택이지만, 휴대폰이 울리기만 하면 되는 경우에는 과합니다.
- **SMS 게이트웨이** — SMS도 결국 메시지로 도착하고, iOS에서는 발신자가 허용 목록에 있지 않는 한 문자 메시지가 집중 모드를 뚫지 못합니다.

Uptime Kuma 저장소에는 [VoIP 통화 알림에 대한 기능 요청](https://github.com/louislam/uptime-kuma/issues/3812)이 한동안 열려 있습니다. 그때까지는 범용 **Webhook** 제공자가 우회로입니다. 원하는 데이터를 원하는 URL로 보낼 수 있고, 필요한 것은 그게 전부입니다.

## 준비물

- 실행 중인 Uptime Kuma 인스턴스(이 가이드는 2.x 기준이며, 웹훅 커스텀 본문은 1.23 이상에서도 동작합니다)
- Echobell 설치([App Store](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-uptime-kuma-phone-call-alerts-ko&mt=8) / [Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid))
- 5분의 시간

Uptime Kuma 인스턴스에서 `hook.echobell.one`으로 나가는 HTTPS 연결이 필요합니다. 인터넷에서 접근할 수 있어야 할 필요는 **없습니다**. 아웃바운드 웹훅이므로 홈 서버나 사설 네트워크 안에서 도는 모니터도 문제없이 동작합니다.

## 1단계 — 전화를 걸어 주는 채널 만들기

Echobell에서 `Production Down` 같은 이름으로 채널을 만드세요. 구독의 알림 유형은 **전화**로 설정합니다. 바로 이 설정이 핵심입니다. 전화 알림은 수신 전화 화면으로 도착해 iOS 집중 모드와 방해 금지 모드를 뚫고 울리지만, 푸시 알림은 그러지 못합니다.

템플릿은 다음과 같이 설정합니다.

```
제목: 🔴 {{monitor}} 다운
본문: {{message}}
대상: {{target}}
```

그런 다음 채널의 **Webhook URL**을 복사합니다. 형식은 다음과 같습니다.

```
https://hook.echobell.one/t/<channel-token>
```

이 URL은 비밀로 다뤄야 합니다. URL을 가진 사람은 누구나 휴대폰을 울리게 할 수 있습니다.

## 2단계 — Echobell을 Webhook 알림으로 등록하기

Uptime Kuma에서 **Settings → Notifications → Setup Notification**으로 이동해 다음과 같이 입력합니다.

| 항목 | 값 |
| --- | --- |
| Notification Type | `Webhook` |
| Friendly Name | `Echobell — Down` |
| Post URL | Echobell 웹훅 URL |
| Request Body | `Custom Body` |

**Additional Headers**는 비워 둡니다.

## 3단계 — 필터링할 수 있는 페이로드 보내기

대부분의 가이드가 건너뛰는 단계이며, 알림 시스템과 소음 기계를 가르는 지점이기도 합니다.

**Custom Body**에 다음을 붙여 넣으세요.

```json
{
  "monitor": "{{name}}",
  "target": "{{hostnameOrURL}}",
  "message": "{{ msg | strip_newlines }}",
  "up": "{{ heartbeatJSON['status'] }}"
}
```

Uptime Kuma는 커스텀 본문을 Liquid로 렌더링하며 다음 변수를 제공합니다.

| 변수 | 담고 있는 값 |
| --- | --- |
| `{{name}}` | 모니터의 표시 이름 |
| `{{hostnameOrURL}}` | 검사 대상 호스트명 또는 URL |
| `{{status}}` | `🔴 Down`, `✅ Up`, `⚠️ Test` 중 하나 |
| `{{msg}}` | 사람이 읽을 수 있는 원인, 예: `connect ECONNREFUSED 10.0.0.4:443` |
| `{{ monitorJSON['...'] }}` | 전체 모니터 객체 |
| `{{ heartbeatJSON['...'] }}` | 전체 하트비트 객체 |

이 페이로드의 두 가지 세부 사항은 의도한 것입니다.

**`msg`에 적용한 `strip_newlines`.** Uptime Kuma의 메시지에는 줄바꿈이 들어 있는 경우가 많은데, JSON 문자열 안의 원시 줄바꿈은 유효하지 않은 JSON입니다. 이 필터가 없으면 웹훅이 간헐적으로 실패합니다. 그것도 텍스트가 우연히 줄바꿈된 오류에서만 실패합니다. 사용 중인 Uptime Kuma가 Liquid의 `json` 필터를 지원할 만큼 최신이라면 `"message": {{ msg | json }}`(주의: 앞뒤 따옴표 없음)이 더 안전합니다. 따옴표까지 이스케이프해 주기 때문입니다.

**`{{status}}` 대신 `heartbeatJSON['status']`.** `status` 변수는 이모지가 섞인 텍스트로 렌더링되어 비교하기가 번거롭습니다. 하트비트 상태는 단순한 숫자입니다.

- `0` — 다운
- `1` — 정상
- `2` — 대기 중
- `3` — 점검 중

따옴표로 감싸는 것(`"up": "{{ ... }}"`)도 중요한데, 그 이유는 5단계에서 설명합니다.

## 4단계 — 복구 알림이 전화를 걸지 않게 하기

Uptime Kuma의 알림 하나는 다운될 때*와* 복구될 때 모두 발동합니다. 그대로 두면 서비스가 망가질 때 전화가 오고, 서비스가 스스로 복구될 때 또 한 번 전화가 옵니다. 사람들에게 첫 번째 전화를 무시하도록 가르치는 것이 바로 이 두 번째 전화입니다.

전달 전에 평가되는 Echobell **조건**으로 둘을 분리하세요.

**`Production Down` 채널**(알림 유형 **전화**)에는 다음 조건을 설정합니다.

```
up == "0"
```

**두 번째 채널**을 `Production Recovered`라는 이름으로 만들고, 알림 유형을 **일반**으로 설정한 뒤 다음 조건을 지정합니다.

```
up == "1"
```

템플릿은 다음과 같습니다.

```
제목: ✅ {{monitor}} 복구됨
본문: {{message}}
```

그런 다음 Uptime Kuma에 두 번째 웹훅 알림을 추가합니다. 커스텀 본문과 대상 모니터는 그대로 두고 복구 채널의 URL만 지정하면 됩니다. 두 알림 모두 모든 이벤트를 받지만, 각 채널이 자신과 무관한 절반을 버립니다.

그 결과 장애가 나면 전화가 울리고, 복구는 아침에 읽으면 되는 조용한 푸시 알림으로 도착합니다.

## 5단계 — 거짓 경보를 울리지 않도록 모니터 조정하기

알고 보니 2초짜리 네트워크 끊김이었던 전화는 전화가 아예 없는 것보다 나쁩니다. 다음 전화도 똑같이 무시당하기 때문입니다. 모니터 자체에 있는 Uptime Kuma 설정 세 가지가 이 일의 대부분을 해결해 줍니다.

- **Retries** — `2` 또는 `3`으로 설정하세요. Uptime Kuma는 연속으로 이만큼 실패해야 모니터를 다운으로 표시하므로, 패킷이 한 번 유실된 경우를 걸러 냅니다.
- **Heartbeat Retry Interval** — 실패하는 동안 얼마나 빨리 다시 검사할지 정합니다. 20~30초가 적당한 균형점이며, 재시도 3회와 조합하면 실제 장애를 약 1분 안에 감지할 수 있습니다.
- **Resend Notification if Down X times consecutively** — `10` 정도로 설정하면 열 번 더 검사한 뒤에도 서비스가 여전히 다운 상태일 때 Uptime Kuma가 다시 전화를 겁니다. 투박한 에스컬레이션 정책이지만 제 역할은 합니다.

응답하지 않은 전화를 재전송을 기다리지 않고 곧바로 다시 시도하게 하려면 Echobell 앱 설정에서 **실패한 전화 재시도**를 켜세요.

## 업무 시간 외에만 울리게 하기

업무 시간에는 이미 대시보드를 보고 있을 가능성이 높고, 울리는 전화는 굳이 필요 없는 방해입니다. Echobell의 시스템 시간 변수(모두 UTC 기준)를 쓰면 채널 하나가 시간대에 따라 다르게 동작합니다.

```
up == "0" && (hour >= 17 || hour < 9)
```

이 조건은 UTC 09:00–17:00 밖에서만 전화를 겁니다. 낮 시간대 푸시 알림은 반대 조건을 지정한 일반 유형 채널을 하나 더 두면 됩니다.

```
up == "0" && hour >= 9 && hour < 17
```

자신의 시간대에 맞춰 시차를 반영하는 것을 잊지 마세요. 이 변수들은 항상 UTC로 계산됩니다. 더 자세한 내용은 [UTC 조건을 활용한 시간대별 알림](/ko/blog/time-window-notifications-using-utc-conditions)에서 다룹니다.

## 팀과 알림 공유하기

Echobell 채널은 구독 링크로 동료와 공유할 수 있고, 구독자마다 자신의 알림 유형을 직접 고릅니다. 따라서 같은 모니터가 온콜 담당 엔지니어의 휴대폰은 울리게 하면서 다른 사람에게는 일반 푸시 알림으로 도착할 수 있습니다. 사용자당 과금도, Uptime Kuma 쪽의 별도 라우팅 규칙도 필요 없습니다.

이는 애초에 셀프 호스팅을 택하게 만든 프라이버시 관점과도 잘 맞습니다. 모니터는 여러분의 인프라에 그대로 남고, Echobell은 알림 내용과 기록을 자사 서버가 아니라 기기에 보관합니다.

## 이 구성으로 할 수 없는 일

경계를 솔직하게 밝혀 두면 나중에 잘못된 이전을 겪지 않아도 됩니다. Echobell은 전달 계층이지 인시던트 관리 플랫폼이 아닙니다. 다음 기능은 없습니다.

- 온콜 교대 일정이나 팔로우 더 선 방식의 인수인계
- 두 번째 담당자를 자동으로 호출하는 에스컬레이션 트리
- 인시던트 타임라인, 확인 여부 추적, 사후 분석 도구

팀에 이런 기능이 필요하다면 PagerDuty, Grafana Cloud IRM 또는 그와 비슷한 도구를 써야 합니다. 이 구성이 메우는 것은 Uptime Kuma가 남겨 둔 특정한 빈틈, 즉 감지된 장애를 실제로 울리는 전화로 바꾸는 일입니다. 1인 운영자, 소규모 팀, 홈랩에는 보통 그것이 요구 사항의 전부입니다.

## 문제 해결

**Test 버튼을 눌러도 아무 일도 일어나지 않습니다.** 위 페이로드에서는 정상적인 동작이며, 처음에는 누구나 헷갈립니다. Test를 누르면 렌더링할 하트비트가 없으므로 `{{ heartbeatJSON['status'] }}`가 빈 문자열이 되고, 어떤 조건도 일치하지 않습니다. 제대로 테스트하려면 아무것도 수신 대기하지 않는 포트(`127.0.0.1:9`)를 가리키는 임시 TCP 모니터를 만들어 실패하게 두세요.

**웹훅이 간헐적으로 실패합니다.** 거의 항상 줄바꿈 문제입니다. `msg`가 `strip_newlines`를 거치는지 확인하세요. 우연히 줄바꿈이 들어간 오류 메시지에서만 깨지기 때문에 무작위처럼 보입니다.

**Echobell이 HTTP 200과 함께 `success: false`를 반환합니다.** 채널 토큰이 잘못됐거나 채널이 삭제된 경우입니다. Echobell은 길이만 유효한 알 수 없는 토큰에도 `200`으로 응답하므로, 상태 코드가 아니라 JSON 본문을 확인하세요.

**HTTP 405.** 채널에 **POST Only**가 켜져 있는데 GET 요청이 들어온 경우입니다. Uptime Kuma는 POST로 보내므로, 대개 브라우저에서 URL을 열어 본 것이 원인입니다.

**전화는 울리지 않는데 알림은 도착합니다.** 구독의 알림 유형이 전화가 아니라 일반 또는 긴급으로 설정된 것입니다. 알림 유형은 구독자별로 선택하므로, 울리지 않는 기기에서 확인하세요.

## 자주 묻는 질문

### Uptime Kuma가 자체적으로 전화를 걸 수 있나요?

아니요. Uptime Kuma에는 90가지가 넘는 알림 제공자가 있지만 모두 메시지를 전달합니다. 전화를 걸려면 Echobell처럼 전화를 걸 수 있는 서비스로 웹훅을 보내거나, 유료 인시던트 관리 플랫폼을 사용해야 합니다.

### 방화벽 뒤에 셀프 호스팅한 Uptime Kuma에서도 동작하나요?

네. 웹훅은 Uptime Kuma 인스턴스에서 나가는 아웃바운드 HTTPS 요청이므로 `hook.echobell.one`에만 도달하면 됩니다. 인스턴스에 공인 주소는 필요 없습니다.

### 전화 알림이 방해 금지 모드를 뚫나요?

네. Echobell의 전화 알림 유형은 수신 전화처럼 표시되어 iOS 집중 모드와 방해 금지 모드를 뚫고 울립니다. 자세한 내용과 관련 설정은 [중요한 알림을 위해 iOS 집중 모드 우회하기](/ko/blog/how-to-bypass-ios-focus-mode-for-critical-alerts)를 참고하세요.

### 서비스가 복구될 때 전화가 오지 않게 하려면 어떻게 하나요?

조건을 지정한 채널 두 개를 사용하세요. 전화 채널에는 `up == "0"`, 일반 우선순위의 복구 채널에는 `up == "1"`을 지정하고 각각에 웹훅 알림을 연결하면 됩니다. 위의 4단계에서 자세히 설명합니다.

### 같은 모니터로 여러 사람에게 전화를 걸 수 있나요?

네. 채널을 팀원과 공유하면 구독자마다 자신의 알림 유형을 고릅니다. 전화 채널을 구독한 사람은 모두 전화를 받습니다.

## 마무리

이 구성은 웹훅 하나, 커스텀 본문 하나, 조건 두 개가 전부입니다. Uptime Kuma의 모니터, 재시도 로직, 상태 페이지는 그대로 둔 채 "모니터링이 알아챘다"와 "사람이 알아챘다" 사이의 간극을 메워 줍니다.

[iPhone용 Echobell 다운로드](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-uptime-kuma-phone-call-alerts-ko&mt=8) 또는 [Google Play에서 받기](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid)를 마친 뒤, 먼저 중요하지 않은 모니터 하나를 연결해 일부러 실패시켜 보세요. 의존하기 전에 그 경로를 먼저 신뢰할 수 있는지 확인하는 것입니다.

---

## 관련 글

- [Uptime Kuma 연동 문서](/ko/docs/developer/uptime-kuma)
- [채널 조건 레퍼런스](/ko/docs/conditions)
- [Echobell로 Upptime 알림 받기](/ko/blog/upptime-alerts-with-echobell)
- [API 장애 시 전화 알림 받기](/ko/blog/phone-call-alerts-api-downtime)
- [개발자를 위한 알림 피로 해결 가이드](/ko/blog/fix-alert-fatigue-developer-guide)
