XMPP ?
XMPP는 'Extensible Messaging and Presence Protocol'의 약자로
- Extensible : 확장이 용이한
- Messaging : 메세지 교환 ( 메신저를 상상하면 된다. 하지만 이는 메신저에서 뿐만 아니라 다양하게 이용된다. )
- Presence : 각 사용자의 위치, 상태 정보를 전달
할 수 있는 open standard protocol이다.
History
XMPP는 'Extensible Messaging and Presence Protocol'의 약자로, 1999년 오픈소스 커뮤니티인 Jabber에 의해서 만들어진 messaging protocol이다. ( 실제로 초기에는 protocol 이름도 Jabber 였다. ) 이 후 2002년에 IETF ( Internet Engineering Task Force )에서 XMPP Working Group을 통해서 RFC320 ~ RFC3923까지의 표준을 만들었다. 그리고 이는 2011년에 XMPP Standard Foundation ( 전 Jabber Software Foundation )이 RFC6120 ~ RFC6122을 발표하면서 obsolete 되었다.
XMPP는 이렇게 시간이 지나면서 좀 더 open source 의 모습을 갖췄으며, 현재는 Jabber 뿐만 아니라 Google Talk, Facebook chat, MS .NET Messenger 등에 이용되고 있다.
XMPP Architecture
Server-Client 구조 + Gateway
xmpp도 다른 messenger service와 마찬가지로 server-client 구조이다. XMPP Server, XMPP Client가 있으며, XMPP Gateway라는 기존 service에는 없는 module이 존재한다.
Jabber ID
XMPP 기반의 messenger service에 가입하게 되면 Jabber ID ( JID )가 생성된다. 이 JID가 XMPP network 내에서 user를 식별하는 ID로 사용된다. JID 는 e-mail 주소와 비슷한 구조로, username, domain이 포함되며, e-mail과 다른 점은 뒤에 resource가 붙을 수 있다는 것이다.
JID Format
username @ domain [ / resource ]
ex) yolongyi@home.com/ipod
resource까지 포함한 JID로 각 session이 구분되기 때문에, 동시에 서로 상태를 가지는 기기의 session이 구분될 수 있다.
Communication via XMPP
기본적인 XMPP 서비스는 아래와 같은 구조로 user 간의 통신을 가능하게 한다.
[ 그림1: 기본 XMPP server-client 구조 ]
이 구조는 다른 메신저 서비스와 다르지 않다.
하지만 무엇보다 open protocol이라는 특징에 걸맞는 점은 XMPP server 간의 통신이 가능한 것으로, 서로 다른 domain 에 소속된 사용자 간의 통신이 가능하다는 점이다. 예를 들면 Jabber XMPP server를 통해서 Google Talk 사용자와의 대화가 가능하다.
[ 그림2: 다른 도메인 XMPP server 를 통한 XMPP communication ]
그리고 XMPP Gateway를 통하여 서로 다른 protocol간의 변환을 통해서 다른 protocol client와 통신이 가능하다.
예를 들면 Gateway에서 지원하는 protocol에 따라, SMTP, SMS 등의 다른 서비스와의 연계도 가능하다.
[ 그림3: XMPP Gateway 가 추가된 backbone 형태의 XMPP network ]
XMPP Pros and Cons
Pros
- Application layer Backbone ?
XMPP에서 가장 주목할 점은 XMPP가 open protocol로 단일 도메인에 한정되는 것이 아니라 다른 도메인과의 연계가 가능하다는 점이라고 생각한다. XMPP server간의 통신, XMPP Gateway를 통한 다른 protocol 연계가 가능함에 따라서 응용 범위가 넓다.
실제로 XMPP는 단순 메신저 프로토콜이 아니라 다양한 범위에서 응용되고 있다.
그리고 누구나 XMPP Server를 구성할 수 있기 때문에 XMPP network를 이용할 수 있을 뿐만 아니라 이미 구성된 network를 이용하는 것도 가능하다.
- Open standards
open standard이기 때문에 자유롭게 사용이 가능하며, 사용하기 위한 library도 많이 나와있기 때문에 필요한 client 구현이 손쉽다.
프로토콜 구현에 힘을 쓰지 않아도 도는 것만해도 큰 장점이라고 생각한다.
- Extensible
XMPP는 XML 기반의 protocol로 메세징 protocol 자체의 확장이 용이하기 때문에, XMPP 메세징을 기반으로 custom application 구축이 쉽다.
Cons
- weak at Binary Data transferring
현재 XMPP에서 binary data를 교환하기 위해서는 base64 인코딩하여 단일 XML에 첨부하여야 한다. 때문에 data 교환에 비효율이라는 단점이 있다.
XMPP Library ?
xmpp library는 http://xmpp.org/xmpp-software/libraries/ 를 참고하면 많은 라이브러리가 나와있는 것을 볼 수 있다.
이것 또한 open standard 의 장점이라고 생각한다. 별도의 구현이 필요없고 다양한 라이브러리가 제공된다.
Ruby만 하더라도 해당 페이지에 리스팅 된 것만해도 5개나 된다.
하지만 각 라이브러리 별로 편의성에 차이가 있을 수 있다.
Jingle ?XMPP 를 보다 보면 Jingle 이라는 이름을 듣게 되는데 이는 Google에서 개발한 XMPP 기반의 프로토콜로 메세징은 기존의 XMPP 기반으로 이루어 지며, P2P, VoIP 등의 multimedia communication이 추가된 protocol로 XMPP의 확장 버전 정도로 보인다.
때문에 일부는 XMPP의 다음 version 등으로 여기는 사람도 있는 듯 하다.
여기에 대해서는 다음에 시간이 나면 알아볼 생각이다.
To be continued ...
XMPP 에 대해서 간략하게 알아보았다. 사실 세부 protocol spec도 알아보려 하였지만, open standard이니 만큼 잘 만들어진 라이브러리가 있기 때문에 구현에 신경 쓸 필요가 없기에 spec 부분은 생략하였다. spec에 대해서 관심있다면 RFC6120 ~ 6122 문서를 참고하는 것도 좋을 것 같다.
짧은 시간과 얕은 지식, 저질 체력으로 XMPP에 대해서 맛만 보았기 때문에 부족하기 그지없는 내용이었습니다. ;;
참고 URL:http://en.wikipedia.org/wiki/XMPPhttp://www.ibm.com/developerworks/kr/library/x-xmppintro/http://xmpp.org이 밖에 gooling ...