XMPP Solution 개요 및 동향 2009.12.12 ㈜씽크테크 기술연구소 이정규 책임연구원
목차 XMPP란? XMPP 국내외 동향 XMPP 프로토콜 분석 XMPP 활용 공개 서버/클라이언트를 이용한 IM 서비스 구축
역사, 아키텍쳐, 프로토콜, 1. XMPP 프로토콜 개요
eXtensible Message & Presence Protocol XMPP/Jabber란? eXtensible Message & Presence Protocol “XML 스트리밍 기술로 인터넷상의 두 지점간 Presence, Message 그리고 XML로 표현가능한 구조적 정보를 실시간으로 전달하기 위한 국제 표준. XML
XMPP History GoogleTalk 출시 1998 1999- 2000 2002-2003 2004 2005 2009 GoogleTalk 출시 독점적인 IM 서비스에 대항, 오픈소스 프로젝트인 Jabber 출범 (Jeremie Miller) IETF에 의해 표준의 형태를 갖추게 됨 Jabber.org 커뮤니티를 통해서 프로토콜 지속적 개선 XMPP 표준 제정 (RFC3920, RFC3921)
XMPP 프로토콜의특징 특징 설명 Open free, open, public 프로토콜 Standard IETF 표준 Proven 수천개의 서버, 수백만의 사용자 확보 Decentralized email과 유사한 방식으로 확장 Secure SASL, TLS 등 규격 지원 Extensible XML namespace에 의해 자신만의 프로토콜을 코어위에 확장 Flexible IM위에 네트워크 관리, 콘텐츠 동기화, 협업 도구, 파일공유, 게임, 등 확장 가능 Diverse 수많은 회사 또는 오픈소스 프로젝트에서 다양한 응용서비스들을 출시하고 있음.
RFC3920, RFC3921 그리고 XEPs… 2. XMPP 프로토콜 분석
프로토콜 스펙 규격이름 내용 => http://xmpp.org/protocols Core RFC3920 XMPP Core Architecture, XML Stream, Security, … RFC3921 XMPP IM Session, Messaging, Presence, Roster, Blocking, Extensions XEP XMPP Extensions XEP-0030: Service Discovery (http://xmpp.org/protocols/disco/) XEP-0095: Stream Initiation (http://xmpp.org/protocols/si/) XEP-0045: Multi-User chat (http://xmpp.org/protocols/muc/) XEP-0203: Delayed Delivery (http://xmpp.org/protocols/urn:xmpp:delay/) …
RFC3920 – XMPP Core 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security
username@domain/Resource RFC3920 – XMPP Core 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security username@domain/Resource Ex) jklee@xmpp.co.kr/tbotim peter@jabber.org/gaim …
XML Stream, Connection Oriented RFC3920 – XMPP Core 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security XML Stream, Connection Oriented XML Document Server Client XML Document
RFC3920 – XMPP Core Server Client 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security <stream:stream to='example.com‘ xmlns='jabber:client‘ xmlns:stream='http://etherx.jabber.org/streams’ version='1.0'> <message …..> …. </message> …………. <presence …> … </presence> <iq … > … </iq> </stream:stream> <stream:stream from='example.com‘ id='someid‘ xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams‘ version='1.0'> <message …..> …. </message> …………. <presence …> … </presence> <iq … > … </iq> </stream:stream> Server Client
RFC3920 – XMPP Core 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security <message from=“kim@xmpp.co.kr” to=“park@xmpp.co.kr” type=“chat”> <body> hello! </body> </message> <presence from=“kim@xmpp.co.kr” to=“xmpp.co.kr” type=“available”> <show>online</show> <status>I’m here </status> </presence> <iq from=“kim@xmpp.co.kr” to=“xmpp.co.kr” type=“get” <query xmlns=“jabber:iq:roster”/> </iq>
RFC3920 – XMPP Core 폐쇄적 운영가능 로컬에서도 운영가능 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security 폐쇄적 운영가능 로컬에서도 운영가능 XML Client XMPP Server Host.com
RFC3920 – XMPP Core 공인 IP에서 운영 외부 XMPP 서버와의 연결을 통한 무한 확장 아키텍쳐 JID XML 스트림 Single Server Multiple Servers Gateway Security XML Client XMPP App XMPP Server Internet 공인 IP에서 운영 외부 XMPP 서버와의 연결을 통한 무한 확장 기술적으로 이메일을 대체 가능
RFC3920 – XMPP Core sms 010-xxx-xxxx@sms.host.com 아키텍쳐 Xml 스트림 JID Single Server Multiple Servers Gateway Security Client Client sms 010-xxx-xxxx@sms.host.com XML XML XMPP Server Client Host.com XML XML XML XML Client XML Client Client Client
RFC3920 – XMPP Core TLS (Transport Layer Security) 아키텍쳐 Xml 스트림 JID Single Server Multiple Servers Gateway Security Server Client SASL TLS TLS (Transport Layer Security) RFC 5246 (TLS ver 1.2) SASL (Simple Authentication Security Layer) RFC2222
RFC3921 – XMPP IM 1) Session establishment Message Presence Roster Blocking Communication PC PDA 1) Session establishment 2) Resource binding with “PC” Server 1) Session establishment 2)Resource binding with “PDA”
RFC3921 – XMPP IM Type Subject Body Thread Session Message Presence Roster Blocking Communication Type Subject Body Thread <message from=jklee@xmpp.co.kr to=“kim@jabber.org” type=“chat” > <body> hello </body> </message> Extensions
RFC3921 – XMPP IM user2 user1 Subscription Server Info user3 Session Message Presence Roster Blocking Communication user2 Server user1 Presence notify broadcast user3 Subscription Info Subscription Management Presence subscription Subscribing (type=subscribe) Canceling (type=unsubscribed) Unsubscribing (type=unsubscribe) Presence priority
RFC3921 – XMPP IM http://usrportage.de/uploads/gaim-2.0beta1.png Session Message Presence Roster Blocking Communication http://usrportage.de/uploads/gaim-2.0beta1.png Server 1) Roster 요청 2) Roster 다운로드 Roster (add, update, delete) Roster DB AAaa Roster 정보는 개인화되어 있음
Server-side privacy list RFC3921 – XMPP IM Session Message Presence Roster Blocking Communication http://usrportage.de/uploads/gaim-2.0beta1.png Server List Management Server-side privacy list Privacy 정보는 개인화되어 있음
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png user Catalog.Kyobookbook.com Kyobookbook.com
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png <iq type='get' from=‘user@xmpp.co.kr/tbotim' to=‘kyobobook.com' id=‘item_1'> <query xmlns='http://jabber.org/protocol/disco#items'/> </iq> user Kyobookbook.com
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png Server <iq type='result' from=‘kyobobook.com‘ to=' user@xmpp.co.kr/tbotim ' id='item_1'> <query xmlns='http://jabber.org/protocol/disco#items'> <item jid='catalog.kyobobook.com' name=‘교보문고 카탈로그 서비스'/> </query> </iq> user
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png <iq type='get' from=‘user@xmpp.co.kr/tbotim' to=‘catalog.kyobobook.com' id=‘item_2'> <query xmlns='http://jabber.org/protocol/disco#items'/> </iq> user Catalog.Kyobookbook.com
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png <iq type='result' from=‘catalog.kyobobook.com‘ to=' user@xmpp.co.kr/tbotim ' id='item_2'> <query xmlns='http://jabber.org/protocol/disco#items'> <item jid=‘music.catalog.kyobobook.com' name=‘교보문고 음악 카탈로그 '/> <item jid=‘book.catalog.kyobobook.com’ name=‘교보문고 신간서적 카탈로그’ /> … </query> </iq> user
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png <iq type='result' from=‘catalog.kyobobook.com‘ to=' user@xmpp.co.kr/tbotim ' id='item_2'> <query xmlns='http://jabber.org/protocol/disco#items'> <item jid=‘catalog.kyobobook.com' node=‘music’ name=‘교보문고 음악 카탈로그 '/> <item jid=‘book.catalog.kyobobook.com’ name=‘교보문고 신간서적 카탈로그’ /> … </query> </iq> * Node 개념의 추가
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png * 동일 네트워크인 경우 proxy Server user1 user2
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png * 서로다른 네트워크인 경우 proxy Server user1 user2
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png user1 Xmpp.co.kr conference room1@conference.xmpp.co.kr
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png room1@conference.xmpp.co.kr Bill user3 user1 Harry Jack user2 Cindy user4 room1@conference.xmpp.co.kr/Harry room1@conference.xmpp.co.kr/Jack room1@conference.xmpp.co.kr/Bill room1@conference.xmpp.co.kr/Cindy
XEP(XMPP Extension Protocols) SVC Disco XEP-0030 Stream Initiation XEP-0095 Multiuser chat XEP-0045 Delayed delivery XEP-0203 http://usrportage.de/uploads/gaim-2.0beta1.png * 상대방이 온라인이 아닐 때, user2 Server user1 Message 서버가 메시지를 저장하고, 해당사용자가 온라인시 Push
공개 XMPP Server & Client 활용
XMPP 오픈소스 프로젝트 Type Name Homepage Language Server Client SDK Openfire http://www.igniterealtime.org Java eJabberD http://www.process-one.net erLang JabberD2 http://codex.xiaoka.com/wiki/jabberd2:start C Client Psi http://psi-im.org/ Pidgin http://pidgin.im/ C, C++ SDK libpurple XIFF http://www.igniterealtime.org/projects/xiff/ ActionScript Smack http://www.igniterealtime.org/projects/smack/index.jsp http://en.wikipedia.org/wiki/List_of_XMPP_library_software
Openfire http://www.igniterealtime.org/downloads/
Openfire – Install
Openfire – Admin http://127.0.0.1:9090/setup/index.jsp
Openfire – Server Setting
Openfire – Database(standard)
Openfire – Database(standard)
Openfire –Database - Embedded)
Openfire – Profile
Openfire – Administrator Account
Openfire – Setup Complete
Openfire – Admin Login http://127.0.0.1:9090/login.jsp
Openfire – Adding a User
Openfire – User Summary
Psi – Install http://psi-im.org/
Psi – Account Setup
Psi – Login
Psi – Subscribe
Psi – Subscribed
4. 참고
Gateway 개발 http://www.igniterealtime.org/projects/tinder/index.jsp
감사합니다. Contact: 이정규 책임연구원 Email: jklee@thinktek.co.kr JID: jklee@xmpp.co.kr