XMPP 아키텍처와 XML 기반 실시간 메시징

XMPP의 분산 서버 구조, XML 스탠자, JID 주소 체계와 XEP 확장 모델을 실무 관점에서 정리한다.

2026-08-14 · 최초 발행 2025-08-10

메시지와 상태 정보를 함께 전달하는 프로토콜

XMPP는 Extensible Messaging and Presence Protocol의 약자로, XML을 기반으로 하는 개방형 통신 프로토콜이다. 메시지 전달뿐 아니라 사용자의 접속 상태, 그룹 채팅 같은 실시간 통신 기능을 다룬다.

1999년 Jeremie Miller가 Jabber라는 이름으로 개발했으며, 2004년 IETF(Internet Engineering Task Force)가 인스턴트 메시징 프로토콜로 표준화했다. 분산 서버 구조를 바탕으로 확장성과 유연성을 제공한다.

클라이언트, 서버, 게이트웨이가 맡는 역할

XMPP 클라이언트는 사용자가 직접 접하는 애플리케이션이다. 데스크톱, 모바일, 웹에서 구현할 수 있으며 서버를 통해 메시지를 주고받고 상태 정보를 공유한다. Pidgin, Adium, Gajim, Psi 등이 대표적인 클라이언트다.

서버는 클라이언트 사이의 메시지를 라우팅하고 사용자 인증, 계정 관리, 메시지 저장을 처리한다. 다른 XMPP 서버와 통신해 분산 네트워크를 구성할 수도 있다. ejabberd, Openfire, Prosody는 서버 구현체로 알려져 있다.

게이트웨이는 XMPP와 다른 메시징 시스템 사이의 변환을 담당한다. IRC, SMTP, SMS 같은 프로토콜과 연결해 이기종 메시징 시스템의 상호 운용성을 확보한다.

이 통신 구조의 기반은 XML이다. XMPP의 통신은 XML 스트림으로 이뤄지며, 이 형식이 프로토콜의 확장성과 유연성을 뒷받침한다.

서버 간 라우팅과 XML 스트림

XMPP Client BXMPP Server BXMPP Server AXMPP Client AXMPP Client BXMPP Server BXMPP Server AXMPP Client A연결 및 인증연결 및 인증메시지 전송 (user@serverB.com)서버 간 메시지 라우팅메시지 전달상태 정보 업데이트상태 정보 전파상태 정보 수신

클라이언트와 서버는 지속적인 양방향 XML 스트림을 유지한다. 그 안에서 스탠자(Stanza)라는 기본 통신 단위를 교환한다.

  • Message는 일반 메시지 전송에 사용한다.
  • Presence는 온라인, 오프라인, 자리비움 같은 사용자 상태 정보를 표현한다.
  • **IQ(Info/Query)**는 정보 조회나 설정 변경을 위한 요청-응답 메커니즘이다.

XMPP는 JID(Jabber ID)를 고유 식별자로 사용한다. 형식은 이메일 주소와 비슷한 user@domain/resource다. user는 사용자 이름, domain은 서버 도메인, resource는 같은 계정의 여러 접속 세션을 구분하는 선택적 값이다.

예를 들어 alice@example.com/laptop, bob@company.org/mobile처럼 표현할 수 있다.

도메인 간 통신과 프로토콜 확장

XMPP는 중앙 집중식 서버 하나에 의존하기보다 분산된 서버 네트워크를 구성한다. 이메일 시스템처럼 서로 다른 도메인 사이의 통신을 지원하므로 단일 실패점(Single Point of Failure)을 줄이고 확장 가능한 구조를 만들 수 있다.

특정 기업이나 조직에 종속되지 않는 공개 표준이라는 점도 특징이다. IETF를 통해 표준화되고 RFC 문서로 관리되며, 누구나 구현하고 확장할 수 있다.

기능 확장은 XEP(XMPP Extension Protocol)로 이뤄진다. 기본 프로토콜 위에 필요한 기능을 추가하는 방식이다.

  • XEP-0045: 다중 사용자 채팅(MUC)
  • XEP-0060: Publish-Subscribe
  • XEP-0166: Jingle(음성/영상 통화)
  • XEP-0363: HTTP File Upload

통신 암호화에는 TLS(Transport Layer Security)를, 인증에는 SASL(Simple Authentication and Security Layer)을 사용한다. 서버 간 통신에서는 도메인 인증을 지원하며, 종단간 암호화(E2EE) 확장 기능도 제공한다.

스탠자가 표현하는 통신 내용

연결을 시작할 때 클라이언트와 서버는 XML 스트림을 열고 응답한다.

<!-- 클라이언트에서 서버로 스트림 시작 -->
<stream:stream
    to="example.com"
    xmlns="jabber:client"
    xmlns:stream="http://etherx.jabber.org/streams"
    version="1.0">

<!-- 서버에서 클라이언트로 스트림 응답 -->
<stream:stream
    from="example.com"
    id="someid"
    xmlns="jabber:client"
    xmlns:stream="http://etherx.jabber.org/streams"
    version="1.0">

일반 채팅 메시지는 Message 스탠자로 전송한다.

<message to="bob@example.com" from="alice@example.org/laptop" type="chat">
  <body>안녕하세요, Bob!</body>
</message>

Presence 스탠자는 사용자의 현재 상태와 우선순위를 전달한다.

<presence>
  <show>away</show>
  <status>잠시 자리를 비웠습니다</status>
  <priority>5</priority>
</presence>

IQ 스탠자는 로스터 조회처럼 요청과 응답이 짝을 이루는 작업에 사용한다.

<!-- 요청 -->
<iq type="get" id="roster_1" to="example.com">
  <query xmlns="jabber:iq:roster"/>
</iq>

<!-- 응답 -->
<iq type="result" id="roster_1" from="example.com">
  <query xmlns="jabber:iq:roster">
    <item jid="bob@example.com" name="Bob" subscription="both">
      <group>Friends</group>
    </item>
    <item jid="carol@example.net" name="Carol" subscription="to">
      <group>Work</group>
    </item>
  </query>
</iq>

활용 환경에서 보는 선택 기준

기업용 메시징 시스템에서는 자체 서버를 구축해 내부 커뮤니케이션과 보안 요구사항을 함께 다룰 수 있다. 기존 시스템과의 통합도 가능한 편이며 Cisco Jabber, Atlassian Stride(이전), Openfire 기반 솔루션이 사례다.

실시간 협업 도구에서는 텍스트 메시징, 파일 공유, 화상 회의를 통합하는 데 활용할 수 있다. RocketChat과 Matrix(부분적 XMPP 호환)가 관련 사례로 언급된다.

IoT 환경에서는 디바이스 상태를 모니터링하고 제어하는 메시지 교환 프로토콜로 활용된다. 스마트홈 시스템, 센서 네트워크, 원격 모니터링 솔루션이 대상이 될 수 있다.

게임 플랫폼에서는 사용자 간 실시간 통신과 게임 상태 동기화에 쓰이며, 채팅·프레즌스·매치메이킹 같은 소셜 기능 구현에 연결된다. 일부 온라인 게임 플랫폼과 게임 내 채팅 시스템이 사례다.

확장 가능한 메시징 백엔드가 필요한 소셜 미디어와 메신저 영역에서도 활용된 바 있다. Google Talk(구글 채팅 서비스의 초기 버전), Facebook Chat(초기 버전), WhatsApp(부분적 활용)이 대표적이다.

XML 기반 구조의 장점과 제약

공개 표준과 다수의 오픈소스 구현체는 벤더 종속성을 줄이는 기반이 된다. XEP 확장 모델은 새 기능을 추가하기 쉽게 만들고, 분산 아키텍처는 단일 실패점 없이 확장 가능한 구조를 제공한다. 다양한 클라이언트와 서버의 호환성, TLS와 SASL 같은 내장 보안 메커니즘도 강점이다.

반면 XML 기반 구조는 상대적으로 메시지 크기를 키우는 오버헤드가 있다. 다른 메시징 프로토콜보다 구현 복잡도가 높고, 모바일 환경에서는 배터리 소모와 네트워크 사용량을 고려한 최적화가 필요하다. WebSocket, MQTT 같은 경량 대안이 등장한 점도 선택 시 함께 검토할 요소다.

분산형 메시징 기반으로 남는 이유

XMPP는 IoT와 분산 시스템에서 활용 가능성을 넓혀가고 있으며, 경량화와 모바일 최적화를 위한 확장도 지속 개발되고 있다. 분산형 소셜 네트워킹과 메시징 시스템의 기반 기술로 발전하는 한편 WebRTC, HTTP/3 같은 최신 웹 기술과의 통합도 이어지고 있다.

새로운 경량 프로토콜이 등장했지만, XMPP의 확장성·상호운용성·개방형 표준이라는 성격은 프라이버시 중심 메시징 솔루션과 미래 통신 인프라에서 여전히 의미를 가진다.

XMPPJabber실시간 메시징XML네트워크 프로토콜