HTTP를 통해 Jabber/XMPP 메시지 전송

발행: (2026년 3월 10일 PM 10:29 GMT+9)
5 분 소요

Source: Hacker News

이 튜토리얼의 목표는 기존 XMPP 계정으로 XMPP 메시지를 보낼 수 있는 간단한 REST API를 설정하는 것입니다. 이를 통해 모니터링 솔루션이나 상태 정보를 전송하는 기타 스크립트에 손쉽게 통합할 수 있습니다.

XMPP 서버에 직접 연결하여 메시지를 보내는 go‑sendxmpp와 같은 명령줄 도구도 있지만, 이 가이드는 HTTP 인터페이스 제공에 초점을 맞추고 있습니다.

curl "https://ntfy.stdmsg.tech:5281/msg/user@example.com" \
  -u coffee@ntfy.stdmsg.tech:secret \
  -H "Content-Type: text/plain" \
  -d "Your flat white is done"

힌트: 이러한 메시지를 받을 XMPP 계정이 없는 경우, Conversations(F‑Droid, Google Play) 내에서 공개 서버에 계정을 생성하거나 원하는 다른 XMPP 클라이언트를 사용해 만들 수 있습니다.

요구 사항

이 가이드는 Debian 13의 비교적 깨끗한 설치를 전제로 합니다. 다른 Linux 배포판이나 기존 설치에서도 아마 작동할 것입니다. 또한 도메인(귀하가 제어할 수 있는 서브도메인)이 필요합니다. 예시에서는 도메인 ntfy.stdmsg.tech를 사용했으며—자신의 도메인으로 교체하십시오.

설정

설치

Prosody IM, 커뮤니티 모듈, 그리고 Certbot을 설치합니다:

apt install prosody prosody-modules lua-unbound liblua5.4-dev certbot

필요한 Prosody 커뮤니티 모듈은 prosody-modules Debian 패키지에 포함되어 있지 않으므로, Prosody 플러그인 설치 프로그램을 사용합니다:

prosodyctl install --server=https://modules.prosody.im/rocks/ mod_post_msg

구성

REST API에 필요한 것만 남기고 나머지는 모두 비활성화하는 최소한의 Prosody 설정 파일을 만듭니다. /etc/prosody/prosody.cfg.lua 파일을 다음 내용으로 교체합니다:

pidfile = "/var/run/prosody/prosody.pid"

modules_enabled = {
	"tls";
	"dialback";
	"http";
	"admin_shell";
	"post_msg";
}
modules_disabled = {
	"c2s";
	"offline";
}

log = {
	info = "prosody.log";
	error = "prosody.err";
}

certificates = "certs"

VirtualHost "ntfy.stdmsg.tech"

인증서 획득

Certbot을 사용해 Let’s Encrypt 인증서를 발급받습니다. 이미 Certbot 설정이 있다면 --standalone 옵션을 적절히 조정하세요.

certbot certonly --standalone -d ntfy.stdmsg.tech
prosodyctl --root cert import /etc/letsencrypt/live/

도메인의 A 레코드가 서버를 가리키도록 설정하십시오.

확인 및 최초 시작

구성을 검증하고 Prosody를 재시작합니다:

prosodyctl check
systemctl restart prosody

다음 명령으로 Prosody가 포트 5269 (XMPP S2S)와 포트 5281 (REST API에 사용되는 HTTPS 포트)에서 수신 대기 중인지 확인할 수 있습니다:

ss -ltnp

Source:

첫 번째 메시지 보내기

사용자 생성

prosodyctl adduser coffee@ntfy.stdmsg.tech

프롬프트가 표시되면 원하는 비밀번호를 입력하세요(예시에서는 “secret” 사용).

REST API 사용

curl "https://ntfy.stdmsg.tech:5281/msg/user@example.com" \
  -u coffee@ntfy.stdmsg.tech:secret \
  -H "Content-Type: text/plain" \
  -d "Your flat white is done"

user@example.com(경로 구성 요소)은 수신자입니다. -u 옵션에 사용된 자격 증명은 방금 만든 발신자입니다.

필요에 따라 여러 사용자를 만들어 역할을 분리할 수 있습니다.

앱 Conversations에서 온 “Your flat white is done” 메시지를 보여주는 Android 알림(보낸 사람은 ‘coffee’)

추가 읽을거리

사용된 모듈은 mod_post_msg입니다. 해당 문서에서는 JSON 페이로드를 수락할 수 있는 방법을 설명하고 있으며, 이는 일부 사용 사례에 더 적합할 수 있습니다.

또한 내장 HTTP 서버를 구성하거나 역방향 프록시 뒤에 배치할 수 있습니다.

보다 영구적인 설정을 위해서는 Prosody에 새 인증서를 다시 가져오는 Certbot 훅을 고려하십시오.

0 조회
Back to Blog

관련 글

더 보기 »