본문 바로가기

이생각 저생각

[dw Review] 구글토크 호환 메신저를 만들고 싶다면? XMPP!

예전에 메신저를 만들었던 적이 있습니다. 정확히는 메신저를 만들기 위해서 노력했던 적이 있었습니다. 그 당시 SM 사이트에서 근무했었는데, 장해가 발생하면 밤에 곧잘 사무실로 불려가곤 했었거든요. 제가 살던데가 산본이었고, 근무지가 서초였는데, 새벽 2~3시에 전화받고 잠이 깨서는 '그럼, 상쾌한 밤공기 맡으며 한번 다녀와 볼까?'와 같은 긍정적인 생각이 드는 거린 절대 아니었죠.


[네? 여보세요? 네? 뭐가 안된다고요? 알았어요. 지금 가고 있어요. 기둘...]

사실 장해가 발생해서 어렵게 어렵게 가도 상당수는 해결하는데 1시간 이내면 족한 문제였습니다. 정말 문제는 왕복 교통시간이 그 두 배쯤 걸린다는 것이었죠. 그래서 메신저를 만들어서 원격으로 작업을 해야겠다고 마음을 먹었습니다. 네이트온은 막혀있고 MSN메신저만 가능했었습니다. (사실 제가 MSN메신저를 이용해서 그런짓을 할려고 마음먹고 진행하고 있었다는걸 고객이 알았다면 전 바로 실업통계에 들어가는 캐릭터가 되었을 겁니다. 겁이 없었죠. 뭐, 여튼...) 그런데 그 당시에 MSN의 메신저 프로토콜은 공개되어있지가 않았더랬습니다. (지금은 공개되었나요?) 그래서 인터넷을 뒤지고 뒤져보니 몇몇 선구자들이 네트워크 패킷을 분석해서 리버싱으로 프로토콜을 추측해 작성해 놓았더군요.

뭐, 공부는 한참 했지만, 결국 만드는건 실패했습니다. 작업을 시작할때쯤 사이트를 옮겼거든요. 새벽 야근은 안녕~ 하진 못했지만, 집에서 택시로 15분 거리의 사이트로 파견을 나가게 되었거든요. (명학역 근처였더라지요? :)

나중엔 NATEON 호환 메신저를 만들겠다고 또 한참을 뚝딱거렸습니다. 그래도 CodeChaser라는 닉네임을 쓰시는 분이 마찬가지로 패킷 리버싱을 통해서 네이트온의 프로토콜을 분석해서 잘 정리해 놓은 문서 덕분에 어느정도 진행이 가능했더랬습니다.

뭐, (하지만 마찬가지로) 공부는 한참 했지만, 결국 만드는건 실패했습니다. 취미로 하는데는 한계가 있으니까요. 그 시절에도 밤 12시에 일이 끝나던 시절이었기 때문이라고 핑계를 대봅니다. ^^;

그러다 다시 1년쯤 뒤에 다시 시작한 메신저가 XMPP호환 메신저였습니다.

XMPP(Extensible Messaging and Presence Protocol)
공식사이트 : xmpp.org


XMPP는 전세계적으로 사용하고 있는 표준 메신저 프로토콜이라서 자료도 많고 예제도 많았습니다. 더더군다나 그때가 영문책으로 EclipseRCP를 떠듬떠듬 보고 있던 시점에 마침 RCP의 예제로 쓰인 덕분에 도움받아 만들었습니다. 책보고 따라치기도 많았지만, 책의 예제가 옛버전이라 한참 공부했었습니다. 힘들었어요.
그래도 오픈소스로 공개되었는 XMPP호환 메신저/서버들이 있었기 때문에 진행이 가능했습니다. 그리고 구글토크가 XMPP 호환 메신저라는 걸 알게되었죠. 연동 되더라구요. 버그가 있었지만 덕분에 한동안 즐겁게 보냈죠. (그 당시 전 한참 히키꼬모리.. .쿨럭..쿨럭.. :)


[소스코드가 공개되어 있는 XMPP호환 메신저 Spark. 자바 스윙으로 만들어져 있습니다.]


이제는 그때보다 자료가 많습니다. 그리고 아주 친절한 한글자료도 생겼죠. 그리고 이제는 허드슨(CI 서버)등에서도 사용할 만큼 보편적이 되었죠.

[기술자료]XMPP(Extensible Messaging and Presence Protocol) 소개
http://www.ibm.com/developerworks/kr/library/x-xmppintro/index.html

[튜터리얼]XMPP를 사용하여 웹 기반 알림 도구 빌드하기
http://www.ibm.com/developerworks/kr/xml/tutorials/x-realtimeXMPPtut/index.html

사실 지금에 와서 XMPP를 마치 신기술처럼 이야기하기엔 부끄러운 이야기입니다. 몰랐을뿐 시작한지는 오래된 프로토콜이거든요.

이미 7년전에 이런 기사도 있었답니다.

메신저를 사람과의 대화를 위해서 쓰는것도 한가지 목적이지만, 원격작업을 위해서 메신저 프로토콜을 이용해서 애플리케이션을 만드는 것도 좋은 활용법인 것 같습니다. 아마 저는 머지않아 메신저 작성을 위한 네번째 시도를 하게 되지 않을까 싶습니다. (누군가의 압박을 받지 않아도 되는) 프로그래밍은 즐거운 취미가 될 수 있거든요.

ps.
참!XMPP기반 메신저와 google talk를 연동시키고 싶으시면 아래 링크를 참조하세요.
XMPP 기반 메신저 Spark와 google talk 연동하기

그림출처
Fotogravirus님 http://farm5.static.flickr.com/4013/4479253634_110b7731b6_z.jpg